前言:小编总结了之前生产环境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;

@Component

@EnableScheduling

public 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.skip=true

1ebc56ecb76a

打包成功.png

③放到服务器上执行

java -jar xxx.jar

排查过程:

**① **查看问题进程, 得到进程 PID:

top -c

1ebc56ecb76a

top -c.png

②查看进程里的线程明细, 并手动记下 CPU 异常的线程 PID:

top -p PID -H

1ebc56ecb76a

top -p PID -H.png

③ 使用 jdk 提供 jstack 命令打印出项目堆栈:

jstack 3464 >3464.log

1ebc56ecb76a

jstack.png

项目后台打印出来的日志:

1ebc56ecb76a

项目后台日志.png

jatask命令得到的线程快照:

2020-03-21 13:06:17

Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.151-b12 mixed mode):

"DestroyJavaVM" #31 prio=5 os_prio=0 tid=0x00007f8828008800 nid=0xd76 waiting on condition [0x0000000000000000]

java.lang.Thread.State: RUNNABLE

"http-nio-8089-Acceptor-0" #29 daemon prio=5 os_prio=0 tid=0x00007f88281ef000 nid=0xd96 runnable [0x00007f87ce3a9000]

java.lang.Thread.State: RUNNABLE

at 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 prio=5 os_prio=0 tid=0x00007f8829052800 nid=0xd95 runnable [0x00007f87ce4aa000]

java.lang.Thread.State: RUNNABLE

at 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 prio=5 os_prio=0 tid=0x00007f8829598800 nid=0xd94 runnable [0x00007f87ce5ab000]

java.lang.Thread.State: RUNNABLE

at 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 prio=5 os_prio=0 tid=0x00007f8829594800 nid=0xd93 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 prio=5 os_prio=0 tid=0x00007f8829592800 nid=0xd92 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 prio=5 os_prio=0 tid=0x00007f882992d000 nid=0xd91 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 prio=5 os_prio=0 tid=0x00007f882992b000 nid=0xd90 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 prio=5 os_prio=0 tid=0x00007f8829929000 nid=0xd8f 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 prio=5 os_prio=0 tid=0x00007f8828b52000 nid=0xd8e 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 prio=5 os_prio=0 tid=0x00007f8828b50000 nid=0xd8d 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 prio=5 os_prio=0 tid=0x00007f8828b4e000 nid=0xd8c 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 prio=5 os_prio=0 tid=0x00007f8828b4c800 nid=0xd8b 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 prio=5 os_prio=0 tid=0x00007f8828e08800 nid=0xd8a 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 prio=5 os_prio=0 tid=0x00007f8828e06800 nid=0xd89 runnable [0x00007f87cf2b6000]

java.lang.Thread.State: RUNNABLE

at 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 prio=5 os_prio=0 tid=0x00007f8829183800 nid=0xd88 runnable [0x00007f87cf3b6000]

java.lang.Thread.State: RUNNABLE

at 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 prio=5 os_prio=0 tid=0x00007f88288bc800 nid=0xd87 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 prio=1 os_prio=0 tid=0x00007f8828804000 nid=0xd86 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 prio=9 os_prio=0 tid=0x00007f8828198800 nid=0xd82 runnable [0x0000000000000000]

java.lang.Thread.State: RUNNABLE

"C1 CompilerThread2" #7 daemon prio=9 os_prio=0 tid=0x00007f8828183800 nid=0xd81 waiting on condition [0x0000000000000000]

java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" #6 daemon prio=9 os_prio=0 tid=0x00007f8828181800 nid=0xd80 waiting on condition [0x0000000000000000]

java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #5 daemon prio=9 os_prio=0 tid=0x00007f882817e800 nid=0xd7f waiting on condition [0x0000000000000000]

java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" #4 daemon prio=9 os_prio=0 tid=0x00007f882817d000 nid=0xd7e waiting on condition [0x0000000000000000]

java.lang.Thread.State: RUNNABLE

"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007f882814a000 nid=0xd7d 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 prio=10 os_prio=0 tid=0x00007f8828145800 nid=0xd7c 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_prio=0 tid=0x00007f882813d800 nid=0xd7b runnable

"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f882801d800 nid=0xd77 runnable

"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007f882801f800 nid=0xd78 runnable

"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x00007f8828021800 nid=0xd79 runnable

"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x00007f8828023000 nid=0xd7a runnable

"VM Periodic Task Thread" os_prio=0 tid=0x00007f88281a3800 nid=0xd83 waiting on condition

JNI global references: 1363

Heap

PSYoungGen 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 1095680K

class space used 6537K, capacity 6915K, committed 7040K, reserved 1048576K

④异常线程PID转化成16进制数:

printf %x 3464

1ebc56ecb76a

转换16进制.png

使用notepad++查找线程的nid为d88的线程,定位代码位置:

1ebc56ecb76a

d88线程.png

1ebc56ecb76a

第20行代码.png

以上就是CUP100%问题排查过程。

二、 针对内存问题, 使用以下命令组合来排查问题:

①查看内存中的存活对象统计, 找出业务相关的类名:

jmap -histo:live PID > xxx.log

1ebc56ecb76a

内存存活对象.png

1ebc56ecb76a

业务相关的类名.png

②通过简单的统计还是没法定位问题的话, 就输出内存明细来分析。 这个命令会将内

存里的所有信息都输出, 输出的文件大小和内存大小基本一致。 而且会导致应用暂时挂起,

所以谨慎使用。

jmap -dump:live,format=b,file=xxx.hprof PID

可以用jdk自带的工具打开文件:

1ebc56ecb76a

jvisualvm.exe.png

1ebc56ecb76a

jmap.png

③最后对 dump 出来的文件进行分析。 文件大小不是很大的话, 使用 jdk 自带的 jhat命令即可:

jhat -J-mx2G -port 7170

④dump 文件太大的话, 可以使用 jprofiler 工具来分析。

三、 需要分析 GC 情况, 可以使用以下命令:

jstat -gc PID

java项目内存使用率过高排查_项目内存或者 cpu 占用率过高如何排查相关推荐

  1. window服务器cpu过高的排查_线上服务器发生CPU占用率过高应该如何排查并定位问题?...

    国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果显示如下: 排名前几的比较受重视的能力分别为:解决问题 ...

  2. win10内存占用率过高怎么办_如果你的CPU占用率过高 或跟Win10累积更新有关

    如果您近期发现电脑的CPU占用率过高,别着急,这可能并不是你应用程序的问题,而罪魁祸首可能处在你的系统端.源于 Windows 10 2019 五月(Version 1903)发布的累积更新. 根据微 ...

  3. 【性能定位】cpu占用率过高问题排查

    问题:公司一个系统在测试单个功能登录上,并发才5个用户时,CPU使用率就瞬间飙升到100% 排查过程: 1.首先查看系统资源占用信息,使用top命令,查看那个进程占用CPU高 发现正在运行的JAVA项 ...

  4. 记一次线上Java程序导致服务器CPU占用率过高的问题排除过程

    1.故障现象 客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高. 2.CPU占用过高问题定位 2.1.定位问题进程 使用top ...

  5. linux cpu不足处理运维,Linux运维知识之Linux服务器CPU占用率较高问题排查思路

    本文主要向大家介绍了Linux运维知识之Linux服务器CPU占用率较高问题排查思路,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 注意:本文相关配置及说明已在 CentOS  ...

  6. 压力测试过程中MySQL服务CPU占用率过高的问题排查思路

    〇.经验总结: 在关注业务接口的TPS时,也要关注数据库服务器的QPS.如果一个业务流程里包含多条查询,那么业务接口TPS的上升对数据库服务器QPS的放大效应会很明显. 如果查询结果集不大,尽量使用一 ...

  7. centos cpu排查_Linux/CENTOS 系统 CPU 占用率较高负载较高问题排查思路 - 沃森博客...

    如果阿里云服务器 ECS Linux 系统的 CPU 持续跑高,则会对系统稳定性和业务运行造成影响.本文对 CPU 占用率较高问题的排查分析做简要说明.注意:本文相关配置及说明已在 CentOS 6. ...

  8. CPU占用率过高和OOM场景下如何排查问题

    本文来说下CPU占用率过高和OOM场景下如何排查问题 文章目录 CPU占用率过高 OOM场景下如何排查问题 CPU占用率过高 CPU占用率过高 CPU占用率过高可以通过top命令去看占用CPU最多的J ...

  9. 内存和CPU占用率过高,该怎么办?

    转载自戴尔 公众号 戴尔 今天 " 电脑的内存和CPU都达到非常大的占用率时 就很可能会导致系统崩溃 " 本期视频中,小编将指导大家如何尽量有效的减少内存和CPU的占用率. 尝试进 ...

  10. compattelrunner.exe占用磁盘过高_Linux 系统 CPU 占用率太高?

    在使用Linux 系统时,经常会遇到 CPU 占用率太高的问题.此篇文章教你如何解决,排查解决的思路是什么 CPU负载查看方法: 使用vmstat查看系统维度的CPU负载 使用top查看进程维度的CP ...

最新文章

  1. python打印浮点数_python – 打印整数或带有n位小数的浮点数
  2. php设置html全局路径_全局:语言包配置
  3. return 关键字 c
  4. 错误请联系管理员文件 index.php,ThinkPHP5框架在写项目过程中遇到的相关问题,以及前端问题-Go语言中文社区...
  5. UA MATH523A 实分析3 积分理论 概念与定理整理
  6. 把 SAP UI5 应用部署到 SAP Kyma
  7. html中常见的小问题(1)
  8. ubuntu16.04安装virtualbox5.2
  9. DJFP2FP2计算机电缆,ZR-DJFP2FP2-22 (ZR-DJFP2FP2-22计算机电缆)(百勤石油)
  10. 不同计算机用户的区别是什么意思,电脑的系统64位和32位是什么意思呢?
  11. Hadoop完全分布式搭建全过程
  12. 中学教师资格证——综合素质备考心得+建议
  13. 如何将Photoshop图层复制到其他文档
  14. 海底捞的启示(4):员工成长与职业生涯
  15. 语音识别之HTK入门(四)——HCompV源码解析
  16. 最大似然位同步算法总结
  17. Java图片处理框架
  18. 设计模式(C++实现)
  19. 深度优先和广度优先算法(例题)
  20. 基于简单的机器学习方法等异常值识别方法(含2022年全国服务外包大赛实例)

热门文章

  1. JetBrains下载历史版本
  2. 对xml操作的主要方法[轉]
  3. Chapter 4 Invitations——25
  4. 数据结构-使用两个栈实现一个队列
  5. Sublime Text 3 搭建 React.js 开发环境
  6. 设置DIV半透明CSS代码:
  7. 项目:飞凌单片机boa服务器遇到问题总结
  8. linux的驱动开发——字符设备驱动
  9. Leetcode--319. 灯泡开关
  10. python缩进格式错误的是_Python 中常见错误总结