1、最近线上一个用来做websocet的服务出现了问题,该服务平时使用不多,但是运维top发现使用率一直在100%左右,从现象看是某个线程一直在跑,然后jstack 看了一下线程信息,内容如下:
"ObjectCleanerThread" #24 daemon prio=1 os_prio=0 tid=0x00007f3bbaea7000 nid=0x22 runnable [0x00007f3b9c1c5000]
java.lang.Thread.State: RUNNABLE
at io.netty.util.Recycler$WeakOrderQueue$Head.run(Recycler.java:264)
at io.netty.util.internal.ObjectCleaner$AutomaticCleanerReference.cleanup(ObjectCleaner.java:143)
at io.netty.util.internal.ObjectCleaner$1.run(ObjectCleaner.java:62)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)
2、了解了一下是一个回收线程,用来处理netty框架申请的直接内存。由于netty框架未正确关闭ObjectCleanerThread导致的cpu占用异常。
最后将pom文件改为如下然后重新打包,问题解决。
<!--将版本从4.1.23.Final 升级到4.1.50.Final 解决c