JVM线程运行诊断
情况1 CPU占用过多
使用 jstack 命令
如以下代码:
/**
* 测试类
*
*/
public class A {
public static void main(String[] args) throws InterruptedException {
while (true){
//Thread.sleep(100);
System.out.println(1);
}
}
}
某个线程陷入死循环,一直占用着CPU在工作
1 让这段代码跑起来
2 使用top
命令查看进程与cpu占用情况
3 可以看到占用CPU将近一半
使用命令ps H -eo pid,tid,%cpu | grep 进程号
根据进程号查看其具体线程,找到cpu占用率高的线程
4 使用命令jstack 线程ID
查看线程具体情况
找到我们自己的线程,可以看到下边写着locked at 9,也就是我们打印1那行,因为是死循环,所以这行一直执行,使用jstack命令我们找到了问题所在
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤