java 程序消耗 cpu 100% 查找方法
2023-09-11 14:19:51 时间
问题原因:由于HashMap是非线程安全的,在多线程访问时,造成死循环。
查找问题方法:
1.
- top
找出最耗费cpu的进程号 如:27377
2.
- top -p 27377 -H
找出此进程下的所有线程,然后找出最耗cpu线程号 如:27433
3.
- python hex(27433)
将十进制数转为16进制 如:0x6b29
4.
- jstack 27377 >cpu.log
将此进程号的Java堆栈信息打印到文件中
5.
- grep 0x6bz8 cpu.log
查看java堆栈中的线程nid 如:
"foundationTaskExecutor-2" prio=10 tid=0x00007f064c041000 nid=0x6b28 runnable [0x00007f069f5da000]
6.
- vim cpu.log
查找nid=0x6b28的内容 如:
- "foundationTaskExecutor-2" prio=10 tid=0x00007f064c041000 nid=0x6b28 runnable [0x00007f069f5da000]
- java.lang.Thread.State: RUNNABLE
- at java.util.HashMap.get(HashMap.java:320)
- at ***********************************(WareServiceImpl.java:64)
- at ***********************************(Mid2FoundationTask.java:127)
- at ***********************************(Mid2FoundationTask.java:27)
- at ***********************************$FoundationThreadImpl.run(Mid2FoundationTask.java:86)
- at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
- at java.lang.Thread.run(Thread.java:722)
相关文章
- java高级用法之:在JNA中将本地方法映射到JAVA代码中
- Java描述设计模式(13):迭代器模式
- 两个变量交换的四种方法(Java) 七种方法(JS)
- java.lang.OutOfMemoryError异常解决方法
- [转]获取JAVA[WEB]项目相关路径的几种方法
- Java Invoked OOM-Killer - OOM不一定是来自于java heap
- java实现基数排序
- 《Java编码指南:编写安全可靠程序的75条建议》—— 指南18:不要将使用降低安全性检查的方法暴露给不可信代码
- 基于 Android NDK 的学习之旅----- Java 方法映射到C中的签名
- Java 完美判断中文字符的方法
- JAVA好书之《深入理解Java虚拟机》
- Java配置环境变量、方法和原因
- Java学习-029-JSON 之三 -- 模仿 cssSelector 封装读取 JSON 数据方法
- 在Eclipse中运行Jboss时出现java.lang.OutOfMemoryError:PermGen space及其解决方法
- 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果集 java.lang.OutOfMemoryError: Java heap space
- Java_类似java.lang.VerifyError: Expecting a stackmap frame at branch target 22 in method的解决方法
- JAVA项目中关于字典学习,和缓存搭配使用的方法
- java中遍历Map几种方法
- JAVA学习.java.sql.date 与java.util.date以及gettime()方法的分析
- JSON以及Java转换JSON的方法(前后端经常使用处理方法)
- java获取当前方法
- 【java养成】:基础练习题(18道(水仙花数、toShing方法、线程等等))
- Java hutool/java 常用方法