
在生产环境中,java进程的CPU使用率有时超过100%. 如何找到此问题的原因?
通常,JAVA进程的CPU较高主要是由于程序中的无限循环. 无限循环将导致两种情况: 首先,无限循环本身不会消耗太多的CPU时间,但是它将继续创建对象,从而导致Java堆内存溢出,但是有时内存几乎已满,没有删除内存报告错误,JVM一直在执行FGC,CPU使用率超过100%;第二种情况是在无限循环或网络连接和其他操作中存在请求的资源;
在第一种情况下,您需要转储当前的JVM内存对象以进行分析,找到导致JVM频繁执行FGC的对象,然后根据业务代码定位特定的代码位置;

在第二种情况下,您需要找到占用CPU时间的线程,并根据线程代码提示找到特定的问题代码.
第一种情况分析方法:
1. 使用top命令查看当前系统的CPU使用率,并找到CPU使用率超过100%的进程ID;

2. jstat -gc pid time命令用于查看JVM的垃圾回收状态. 时间参数是统计频率,通常为1-3秒. 如果频繁出现FGC,则需要进一步分析内存状况;
3. 使用命令jmap -dump: format = b,file = test.dump pid导出当前进程的内存信息,然后使用MAT工具进行分析以发现问题;
第二种情况的分析方法:
1. 使用top命令查看当前系统的CPU使用率,并找到CPU使用率超过100%的进程ID;
2. 使用ps aux | grep PID命令,进一步确定具体的线程信息;
3. 通过ps -mp pid -o THREAD,tid,time命令显示线程信息列表,然后找到耗时的线程ID;
4. 将所需的线程ID转换为十六进制格式: printf“%x \ n” tid
5. 最后找到线程堆栈信息: jstack pid | grep tid -A 30,其中tid是上面转换的十六进制线程ID
以这种方式,找到最终导致100%CPU使用的代码,然后分析特定代码.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-301466-1.html
其实在高离婚率的背景下男女失衡其实并不严重顶多是晚婚现象严重很到30多岁后才能结婚
手上都是