本文章参考了 葛一鸣 讲解的 深入JVM内核——原理、诊断与优化

一 定位cpu占用高问题(linux系统):

1 使用top命令查看占用cpu进程情况

使用jvm自带工具定位并解决java程序占用cpu高(或内存)与程序假死问题

2 查看是否是java进程(不是的话java自带工具就不能定位了),是java进程造成的话,使用jsp命令

简单的列出java进程pid与类名

3 使用pidstat定位是那些线程的原因

pidstat -p 进程id 采样间隔时间与次数 -u(-u是监控cpu) -t (-t显示线程)

例:pidstat -p 3455 1 3 -u -t 

使用jvm自带工具定位并解决java程序占用cpu高(或内存)与程序假死问题

4 使用jstack命令输出线程信息

jstack 线程id 

例:jstack 3455

使用jvm自带工具定位并解决java程序占用cpu高(或内存)与程序假死问题

说明:0xd8b就是3467

从图中我们得到在HoldCPUMain类的第8行在运行,可能这里有问题去查看一下定位问题;

二 例子:运行一程序ThreadBlockMain,期望输出Hello,World ,结果在程序运行后,程序卡死,没有预期输出。

使用jvm自带工具定位并解决java程序占用cpu高(或内存)与程序假死问题

t.txt:

使用jvm自带工具定位并解决java程序占用cpu高(或内存)与程序假死问题

我们发现程序正在等在输入值


相关文章:

  • 2021-09-14
  • 2022-12-23
  • 2021-12-13
  • 2022-12-23
  • 2021-08-26
  • 2022-12-23
  • 2021-12-18
猜你喜欢
  • 2022-01-29
  • 2022-12-23
  • 2022-12-23
  • 2021-04-07
  • 2022-12-23
  • 2021-10-28
  • 2021-12-04
相关资源
相似解决方案