1 2 3 4

linux服务器下CPU爆满

top -c

使用top发现进程64690 CPU占用过高超过200%          可使用 toc -c 查看具体进程明细  按1可查看cpu详情

top -H -p PID

top -H -p 64690

发现进程64690下的其中一个线程64736 CPU占用异常高

线程PID转换十六进制

printf “%x\n” 64637

获取到进程64637的十六进制码值(字母小写): fce0

jstack打印堆栈信息

进入到jdk安装目录下   /opt/jdk1.8.0_11/bin

使用./jstack 64690 | grep "fce0" -A 50

可在打印出来的堆栈信息中找到对应的异常代码

 

也可直接打印进程堆栈信息

jstack -l 64690

 

生成堆栈快照文件

-- 查看线程数
ps -eLf|wc -l

 

1.手动生成

jstack 64690 > jstack.hprof

jstack 64690 > jstack.log

 

2.自动生成:

-XX:+HeapDumpOnOutOfMemoryError
当OutOfMemoryError发生时自动生成 Heap Dump 文件。

这是一个非常有用的参数,因为当你需要分析Java内存使用情况时,往往是在OOM(OutOfMemoryError)发生时。

-XX:+HeapDumpBeforeFullGC
当 JVM 执行 FullGC 前执行 dump。

-XX:+HeapDumpAfterFullGC
当 JVM 执行 FullGC 后执行 dump。

-XX:+HeapDumpOnCtrlBreak
交互式获取dump。在控制台按下快捷键Ctrl + Break时,JVM就会转存一下堆快照。

-XX:HeapDumpPath=d:\test.hprof
指定 dump 文件存储路径。
注意:JVM 生成 Heap Dump 的时候,虚拟机是暂停一切服务的。如果是线上系统执行 Heap Dump 时需要注意。

 

线程状态

1.死锁:Deadlock(重点关注)

2.执行中: Runnable

3.等待资源: Waiting on condition(重点关注,等到什么资源)

4.等待获取监视器: Waiting on monitor entry(重点关注)

5.暂停: Suspended

6.对象等待中: Object.wait() 或者 TIMED_WAITING

7.堵塞: Blocked(重点关注)

8.停止: Parked

 

 

1、NEW

线程刚刚被创建,也就是已经new过了,但是还没有调用start()方法,jstack命令不会列出处于此状态的线程信息

2、RUNNABLE #java.lang.Thread.State: RUNNABLE

RUNNABLE这个名字很具有欺骗性,很容易让人误以为处于这个状态的线程正在运行。事实上,这个状态只是表示,线程是可运行的。我们已经无数次提到过,一个单核CPU在同一时刻,只能运行一个线程。

3、BLOCKED # java.lang.Thread.State: BLOCKED (on object monitor)

线程处于阻塞状态,正在等待一个monitor lock。通常情况下,是因为本线程与其他线程公用了一个锁。其他在线程正在使用这个锁进入某个synchronized同步方法块或者方法,而本线程进入这个同步代码块也需要这个锁,最终导致本线程处于阻塞状态。

4、WAITING

等待状态,调用以下方法可能会导致一个线程处于等待状态:

Object.wait 不指定超时时间 # java.lang.Thread.State: WAITING (on object monitor)

Thread.join with no timeout

LockSupport.park #java.lang.Thread.State: WAITING (parking)

例如:对于wait()方法,一个线程处于等待状态,通常是在等待其他线程完成某个操作。本线程调用某个对象的wait()方法,其他线程处于完成之后,调用同一个对象的notify或者notifyAll()方法。Object.wait()方法只能够在同步代码块中调用。调用了wait()方法后,会释放锁。

5、TIMED_WAITING

线程等待指定的时间,对于以下方法的调用,可能会导致线程处于这个状态:

Thread.sleep #java.lang.Thread.State: TIMED_WAITING (sleeping)

Object.wait 指定超时时间 #java.lang.Thread.State: TIMED_WAITING (on object monitor)

Thread.join with timeout

LockSupport.parkNanos #java.lang.Thread.State: TIMED_WAITING (parking)

LockSupport.parkUntil #java.lang.Thread.State: TIMED_WAITING (parking)

6、TERMINATED

线程终止。

 

 

查看占用内存较多的前30名java对象 jmap -histo:live 【pid】 | head -30

posted @ 2021-06-16 18:04  一缕清风丶  阅读(891)  评论(0编辑  收藏  举报