一米电子产品营销型网站案例展示,中国建筑股票,企业网站备案建设方案策划书,免费给人做网站的前言:小编总结了之前生产环境cpu 占用率过高等问题,小编功力不够深厚,文章如有不对的地方,还望各位大神指正。排查原因#xff1a;客服反馈说系统访问缓慢一、 在排查问题的过程中针对 CPU 的问题#xff0c; 使用以下命令组合来排查问题模拟过程:①示例代码#xff1a;pack…前言:小编总结了之前生产环境cpu 占用率过高等问题,小编功力不够深厚,文章如有不对的地方,还望各位大神指正。排查原因客服反馈说系统访问缓慢一、 在排查问题的过程中针对 CPU 的问题 使用以下命令组合来排查问题模拟过程:①示例代码package com.sunxxx.task;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;ComponentEnableSchedulingpublic class JobTask {Logger logger LoggerFactory.getLogger(JobTask.class);Scheduled(cron 0 0/2 * * * *)public void task(){try {logger.info(Thread.currentThread().getName()开始执行业务代码);Integer sum 0;Thread.sleep(30000);for (; ; ) {//死循环,模拟出CPU100%}// logger.info(Thread.currentThread().getName()执行任务结束:sum);} catch (InterruptedException e) {e.printStackTrace();}}}②将项目打包,打包命令:mvn clean package -Dmaven.test.skiptrue打包成功.png③放到服务器上执行java -jar xxx.jar排查过程**① **查看问题进程 得到进程 PIDtop -ctop -c.png②查看进程里的线程明细 并手动记下 CPU 异常的线程 PIDtop -p PID -Htop -p PID -H.png③ 使用 jdk 提供 jstack 命令打印出项目堆栈jstack 3464 3464.logjstack.png项目后台打印出来的日志:项目后台日志.pngjatask命令得到的线程快照:2020-03-21 13:06:17Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.151-b12 mixed mode):DestroyJavaVM #31 prio5 os_prio0 tid0x00007f8828008800 nid0xd76 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLEhttp-nio-8089-Acceptor-0 #29 daemon prio5 os_prio0 tid0x00007f88281ef000 nid0xd96 runnable [0x00007f87ce3a9000]java.lang.Thread.State: RUNNABLEat sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)- locked 0x00000000fcc0f6e8 (a java.lang.Object)at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:448)at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:70)at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:95)at java.lang.Thread.run(Thread.java:748)http-nio-8089-ClientPoller-1 #28 daemon prio5 os_prio0 tid0x00007f8829052800 nid0xd95 runnable [0x00007f87ce4aa000]java.lang.Thread.State: RUNNABLEat sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)- locked 0x00000000fcdd1ed0 (a sun.nio.ch.Util$3)- locked 0x00000000fcdd1ec0 (a java.util.Collections$UnmodifiableSet)- locked 0x00000000fcdd1da8 (a sun.nio.ch.EPollSelectorImpl)at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:744)at java.lang.Thread.run(Thread.java:748)http-nio-8089-ClientPoller-0 #27 daemon prio5 os_prio0 tid0x00007f8829598800 nid0xd94 runnable [0x00007f87ce5ab000]java.lang.Thread.State: RUNNABLEat sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)- locked 0x00000000fcdd0540 (a sun.nio.ch.Util$3)- locked 0x00000000fcdd0530 (a java.util.Collections$UnmodifiableSet)- locked 0x00000000fcdd0418 (a sun.nio.ch.EPollSelectorImpl)at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:744)at java.lang.Thread.run(Thread.java:748)http-nio-8089-exec-10 #26 daemon prio5 os_prio0 tid0x00007f8829594800 nid0xd93 waiting on condition [0x00007f87ce8ac000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for 0x00000000fcc5daf0 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)http-nio-8089-exec-9 #25 daemon prio5 os_prio0 tid0x00007f8829592800 nid0xd92 waiting on condition [0x00007f87ce9ad000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for 0x00000000fcc5daf0 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)http-nio-8089-exec-8 #24 daemon prio5 os_prio0 tid0x00007f882992d000 nid0xd91 waiting on condition [0x00007f87ceaae000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for 0x00000000fcc5daf0 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)http-nio-8089-exec-7 #23 daemon prio5 os_prio0 tid0x00007f882992b000 nid0xd90 waiting on condition [0x00007f87cebaf000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for 0x00000000fcc5daf0 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)http-nio-8089-exec-6 #22 daemon prio5 os_prio0 tid0x00007f8829929000 nid0xd8f waiting on condition [0x00007f87cecb0000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for 0x00000000fcc5daf0 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)http-nio-8089-exec-5 #21 daemon prio5 os_prio0 tid0x00007f8828b52000 nid0xd8e waiting on condition [0x00007f87cedb1000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for 0x00000000fcc5daf0 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)http-nio-8089-exec-4 #20 daemon prio5 os_prio0 tid0x00007f8828b50000 nid0xd8d waiting on condition [0x00007f87ceeb2000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for 0x00000000fcc5daf0 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)http-nio-8089-exec-3 #19 daemon prio5 os_prio0 tid0x00007f8828b4e000 nid0xd8c waiting on condition [0x00007f87cefb3000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for 0x00000000fcc5daf0 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)http-nio-8089-exec-2 #18 daemon prio5 os_prio0 tid0x00007f8828b4c800 nid0xd8b waiting on condition [0x00007f87cf0b4000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for 0x00000000fcc5daf0 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)http-nio-8089-exec-1 #17 daemon prio5 os_prio0 tid0x00007f8828e08800 nid0xd8a waiting on condition [0x00007f87cf1b5000]java.lang.Thread.State: WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for 0x00000000fcc5daf0 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:103)at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:31)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)NioBlockingSelector.BlockPoller-1 #16 daemon prio5 os_prio0 tid0x00007f8828e06800 nid0xd89 runnable [0x00007f87cf2b6000]java.lang.Thread.State: RUNNABLEat sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)- locked 0x00000000fcc11ad0 (a sun.nio.ch.Util$3)- locked 0x00000000fcc11a48 (a java.util.Collections$UnmodifiableSet)- locked 0x00000000fcc11680 (a sun.nio.ch.EPollSelectorImpl)at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)at org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:298)scheduling-1 #15 prio5 os_prio0 tid0x00007f8829183800 nid0xd88 runnable [0x00007f87cf3b6000]java.lang.Thread.State: RUNNABLEat com.suneee.task.JobTask.task(JobTask.java:20)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)container-0 #13 prio5 os_prio0 tid0x00007f88288bc800 nid0xd87 waiting on condition [0x00007f88101b9000]java.lang.Thread.State: TIMED_WAITING (sleeping)at java.lang.Thread.sleep(Native Method)at org.apache.catalina.core.StandardServer.await(StandardServer.java:573)at org.springframework.boot.web.embedded.tomcat.TomcatWebServer$1.run(TomcatWebServer.java:181)Catalina-utility-1 #12 prio1 os_prio0 tid0x00007f8828804000 nid0xd86 waiting on condition [0x00007f8811fd4000]java.lang.Thread.State: TIMED_WAITING (parking)at sun.misc.Unsafe.park(Native Method)- parking to wait for 0x00000000d4760088 (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)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.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)Service Thread #8 daemon prio9 os_prio0 tid0x00007f8828198800 nid0xd82 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLEC1 CompilerThread2 #7 daemon prio9 os_prio0 tid0x00007f8828183800 nid0xd81 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLEC2 CompilerThread1 #6 daemon prio9 os_prio0 tid0x00007f8828181800 nid0xd80 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLEC2 CompilerThread0 #5 daemon prio9 os_prio0 tid0x00007f882817e800 nid0xd7f waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLESignal Dispatcher #4 daemon prio9 os_prio0 tid0x00007f882817d000 nid0xd7e waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLEFinalizer #3 daemon prio8 os_prio0 tid0x00007f882814a000 nid0xd7d in Object.wait() [0x00007f88126db000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on 0x00000000d3e6dac8 (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)- locked 0x00000000d3e6dac8 (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)Reference Handler #2 daemon prio10 os_prio0 tid0x00007f8828145800 nid0xd7c in Object.wait() [0x00007f88127dc000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on 0x00000000d3c78980 (a java.lang.ref.Reference$Lock)at java.lang.Object.wait(Object.java:502)at java.lang.ref.Reference.tryHandlePending(Reference.java:191)- locked 0x00000000d3c78980 (a java.lang.ref.Reference$Lock)at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)VM Thread os_prio0 tid0x00007f882813d800 nid0xd7b runnableGC task thread#0 (ParallelGC) os_prio0 tid0x00007f882801d800 nid0xd77 runnableGC task thread#1 (ParallelGC) os_prio0 tid0x00007f882801f800 nid0xd78 runnableGC task thread#2 (ParallelGC) os_prio0 tid0x00007f8828021800 nid0xd79 runnableGC task thread#3 (ParallelGC) os_prio0 tid0x00007f8828023000 nid0xd7a runnableVM Periodic Task Thread os_prio0 tid0x00007f88281a3800 nid0xd83 waiting on conditionJNI global references: 1363HeapPSYoungGen total 232448K, used 208110K [0x00000000f1400000, 0x0000000100000000, 0x0000000100000000)eden space 227328K, 89% used [0x00000000f1400000,0x00000000fdaa5ab8,0x00000000ff200000)from space 5120K, 91% used [0x00000000ff200000,0x00000000ff696020,0x00000000ff700000)to space 7680K, 0% used [0x00000000ff880000,0x00000000ff880000,0x0000000100000000)ParOldGen total 38400K, used 16473K [0x00000000d3c00000, 0x00000000d6180000, 0x00000000f1400000)object space 38400K, 42% used [0x00000000d3c00000,0x00000000d4c16750,0x00000000d6180000)Metaspace used 50044K, capacity 52052K, committed 52352K, reserved 1095680Kclass space used 6537K, capacity 6915K, committed 7040K, reserved 1048576K④异常线程PID转化成16进制数:printf %x 3464转换16进制.png使用notepad查找线程的nid为d88的线程,定位代码位置:d88线程.png第20行代码.png以上就是CUP100%问题排查过程。二、 针对内存问题 使用以下命令组合来排查问题①查看内存中的存活对象统计 找出业务相关的类名jmap -histo:live PID xxx.log内存存活对象.png业务相关的类名.png②通过简单的统计还是没法定位问题的话 就输出内存明细来分析。 这个命令会将内存里的所有信息都输出 输出的文件大小和内存大小基本一致。 而且会导致应用暂时挂起所以谨慎使用。jmap -dump:live,formatb,filexxx.hprof PID可以用jdk自带的工具打开文件:jvisualvm.exe.pngjmap.png③最后对 dump 出来的文件进行分析。 文件大小不是很大的话 使用 jdk 自带的 jhat命令即可jhat -J-mx2G -port 7170④dump 文件太大的话 可以使用 jprofiler 工具来分析。三、 需要分析 GC 情况 可以使用以下命令jstat -gc PID