admin 管理员组文章数量: 1184232
#系统:centos7;openjdk:1.8;
1、简单介绍:
#1 若CPU100%,可能所有进程都不能正常干活(假死)
#2 Cpu100%出现情况:没有多余CPU切换(所有CPU均被占用,且不能被释放)
#3 Cpu100%出现条件:死循环、循环里无阻塞、只有计算型任务
注:System.out.println方法有IO,方法里有synchronized关键字、有阻塞。
2、CPU100%排查
#1 jcmd或jps获取当前异常进程pid
#注 centos7自带的openjdk1.8若没有jps等命令,可自行安装openjdk1.8的开发版
#2 获取进程pid的线程运行情况
top -H -p pid
找到cpu占用最高(异常)的线程,记录id
#3 获取进程pid的堆栈信息并存进log文件
jstack pid > tem.log
#4 将第2步获取的id转换成十六机制,并在第3步的tem.log文件里查找该进程号,由此锁定异常API,再具体分析代码
注:synchronized引起的死锁会被jstack pid直接分析出deadlock,因为synchronized关键字是jvm提供的,做了优化。
3、请求程序异常情况分析
#1 完全不响应:很有可能deadlock
#2 响应较慢:用jstack排查
#3 排查思路,例如2s不响应算是不太合理算是比较慢:
a、将2s之前jstack生成log和2s之后jstack生成log进行对比,查看线程在还是不在,在的话,查看为什么还没执行完
注:tomcat不太适用,因为tomcat里是线程池,thread可以复用
b、针对tomcat:观察前后2份log的相关方法调用栈,基本没变化可以说明thread没干活;如果大多数thread有问题,基本说明有问题
版权声明:本文标题:一文读懂:为何我的C++代码会烧掉CPU资源? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1770846649a3538240.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论