java程序很卡怎么排查_java 性能问题排查

cpu占用率过高

1) 首先能过top查看cpu过高的pid,而后通过ps -ef |grep pid查看进程的详细信息。

2) 接着查看每个线程占用的cpu占用率,ps -mp pid -o THREAD,tid,time | sort -rn

或者 通过 top -H -p pid

3) 转换,而后通过比较查看哪个占用过高, 其次将需要的线程ID转换为16进制格式:printf "%x\n" tid

得。

4)  jstack pid |grep tid -A 30   ,jstack 可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。

5) 最后就根据得到的信息分析 代码,看哪块会出现问题 。

实战

今天出现了一个问题,集成代码上线后,系统卡死,无法访问,初看日志也没有问题,而后top查看,cpu果然占用100%+;

而后根据如上操作,找到线程id,而后jstack 查看 ,dump信息如下,原来是syslog 出现了问题。

Thread 9099: (state = IN_VM)

- java.net.PlainDatagramSocketImpl.datagramSocketCreate() @bci=0 (Compiled frame; information may be imprecise)

- java.net.AbstractPlainDatagramSocketImpl.create() @bci=15, line=83 (Compiled frame)

你可能感兴趣的:(java程序很卡怎么排查)