使用top命令查看系统资源的使用情况
top
获取java的PID
或者
jps -l
jps -v
通过命令查看进程的线程情况
**ps p pid-L -o pcpu,pmem,pid,tid,time,tname,cmd**
找到以下进程中,CPU利用率比较高的线程号TID(十进制数),此处为12394
接下来就可以通过jstack查看内存使用的堆栈。
将获取的线程号PID(十进制数)转换成十六进制
printf "%x\n" 12494
结果 30ce
查看线程占内存信息
jstack pid |grep 16进制的线程id -a10
-a10的作用额外显示上下10行
**at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
"Timer-1" #27 prio=5 os_prio=0 tid=0x00007fcc502082e0 nid=0x30e3 in Object.wait() [0x00007fcc58fa7000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000000f5f21658> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505) "MVStore background writer nio:/root/solo_h2/db.mv.db" #23 daemon prio=5 os_prio=0 tid=0x00007fcc7cacbb20 nid=0x30ce in Object.wait() [0x00007fcc592a8000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.h2.mvstore.MVStore$BackgroundWriterThread.run(MVStore.java:2684)
- locked <0x00000000f5ea6178> (a java.lang.Object) "Abandoned connection cleanup thread" #21 daemon prio=5 os_prio=0 tid=0x00007fcc7ca9bef0 nid=0x30cc in Object.wait() [0x00007fcc593a9000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
- locked <0x00000000f5e1c750> (a java.lang.ref.ReferenceQueue$Lock)**
可以看到这个线程状态为:WAITING。通过查看文件分析看到大量Java Thread State。
说明它在等待另一个条件的发生,来把自己唤醒,或者干脆它是调用了 sleep(N)。
此时线程状态大致为以下几种:
java.lang.Thread.State: WAITING (parking):一直等那个条件发生;
java.lang.Thread.State: TIMED_WAITING (parking或sleeping):定时的,那个条件不到来,也将定时唤醒自己。
或者输出该进程的堆栈日志文件里
**jstack -l pid> jstack.log**
sz jstack.log 发送文件到桌面
再次使用十六进度ID查询也行
相关命令
1、jps 显示指定系统内的所有JVM进程
2、jstat 收集JVM各方面的运行数据
3、jinfo 显示JVM配置信息
4、jmap 堆快照
5、jhat 分析headdump文件
6、jstack 显示JVM的线程快照
查看线程信息
ps -mp pid -o THREAD,tid,time|wc -l 查看线程数
ps -mp pid -o THREAD,tid,time | sort -rn | head -10 线程列表,并按照CPU占用高的线程排序
参考资料