jvm 中有很多如图的线程,CPU使用率越来越高,每隔2-3天cpu使用率会到100%,需要重启服务

1、jvm 中有很多如图的线程,CPU使用率越来越高,每隔2-3天cpu使用率会到100%,需要重启服务

41: "http-nio-8080-exec-18" (blocked:9941 times, wait:280099 times)
   java.lang.Thread.State: TIMED_WAITING(on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4bdced9d)
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
        at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
        at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:89)
        at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:33)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)
 29: "http-nio-8080-exec-10" (blocked:9744 times, wait:279927 times)
   java.lang.Thread.State: TIMED_WAITING(on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4bdced9d)
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
        at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
        at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:89)
        at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:33)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)
 40: "http-nio-8080-exec-17" (blocked:9551 times, wait:279787 times)
   java.lang.Thread.State: TIMED_WAITING(on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@4bdced9d)
        at sun.misc.Unsafe.park(Native Method)
        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
        at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
        at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:89)
        at org.apache.tomcat.util.threads.TaskQueue.poll(TaskQueue.java:33)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1066)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)


使用top -H 看到的线程数


图片说明

线程池有死锁发生,你的代码有没有多线程并发没有正确同步的地方,要仔细检查。

死锁一般不会导致cpu偏高。有线程在一直运行,并且占有锁,使用jstack命令,查看运行的线程,找到熟悉的代码分析。

jmap -dump:live,format=b,file=/路径/heap_dump pid 命令 将堆信息下载到heap_dump中
在使用JProfiler 软件查看一下对信息中的线程使用情况
可以试一下