jstack: Java占用高CPU分析之- C2 Compiler Thread
1. 现象
应用刚上线时发现Java进程占用了大量的CPU份额,但过了几分钟后会降下来(流量没变的情况下),因为已经做了负载均衡,于是拿一台实例重新部署代码上线来分析。具体分析步骤参考另外一篇文章《jstack: Java占用高CPU分析之- GC task thread》。这里简单说一下步骤,重点是分析结果后的解决方法,不过强调一点:当发现Java应用占用高CPU的时候,先把Java的线程号和JVM的堆栈信息记录到文件(这个可以用脚本实现),因为堆栈信息随时在变。
2.定位
top | grep java
3.原因和解释
定位到 C2 CompilerThread0这个线程占用了比较高的CPU。C2 Compiler 是JVM在server模式下字节码编译器,JVM启动的时候所有代码都处于解释执行模式,当某些代码被执行到一定阈值次数,这些代码(称为热点代码)就会被 C2 Compiler编译成机器码,编译成机器码后执行效率会得到大幅提升。
流量进来后,大部分代码成为热点代码,这个过程中C2 Compiler需要频繁占用CPU来运行,当大部分热点代码被编译成机器代码后,C2 Compiler就不再长期占用CPU了,这个过程也可以看作抖动。
4.解决方案
(1)最直接有效的方法是“预热(warm up)”:可以使用Jmeter等压测工具模拟线上访问流量,让C2 Compiler预先将热点代码编译成机器码, 减少对正式环境流量的影响。
(2) 设置JVM启动参数:-XX:CICompilerCount=threads
默认是2, 可以设置4或6。在默认值下抖动时CPU已经满载,设置成更多的线程也不一定起作用,但对于CPU“高而不满”的情况会有用,能减少抖动时间。
参考文章:
http://www.javaworld.com/article/2078635/enterprise-middleware/jvm-performance-optimization-part-2-compilers.html
https://answers.atlassian.com/questions/22651310/c1c2-compiler-thread-eats-a-lot-of-cpu
http://www.cnblogs.com/LBSer/p/3703967.html
http://qa.blog.163.com/blog/static/190147002201392221426372/
https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html
jstack: Java占用高CPU分析之- C2 Compiler Thread相关推荐
- java应用CPU占用过高分析、C2 Compiler Thread高CPU占用分析
文章目录 1. 查找进程下占用过高CPU的线程 1.1 查找应用对应的pid 1.2 查看哪个线程cpu占用高,确定对应的线程id: 1.3 计算线程id的十六进制值 1.4 打印线程堆栈内容 2. ...
- 如何在 Windows 10 上修复 Windows Modules Installer Worker 占用高 CPU
原文:https://softwarekeep.com/help-center/fixed-windows-modules-installer-worker-high-cpu-on-windows-1 ...
- 生产环境下JAVA进程高CPU占用故障排查
感谢原作者 http://blog.chinaunix.net/uid-10449864-id-3463151.html 问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常 ...
- 解决挖矿病毒占用高cpu(sysupdate、networkservice)
我也是有一段时间服务器变的很卡,那时我还以为是我自己的软件装太多导致的问题,不看不知道,看了吓一跳,服务器已经被攻击了,接下来,我来分享下如何查找和解决这个病毒. 一.找出病毒 当发现服务器卡的时候, ...
- linux下java进程占用高问题分析过程
2019独角兽企业重金招聘Python工程师标准>>> 1.用top命令找出占用cpu高的进程,记录下pid 2.用top -H -p pid(上面的pid)查看该进和下各线程占用c ...
- 关于Linux系统指令 top 之 %si 占用高,分析实例一
续"top %wa 高的问题"之后,又遇到top之%si过高(高峰时段超过95%)的问题. %wa高,说明磁盘忙.譬如磁盘读写次数非常高. %si高,是否说明软中断忙?是否也说明软 ...
- WmiPrvSE.exe是什么进程?WMI Provider Host占用很高CPU怎么办?
WmiPrvSE.exe是什么进程?WMI Provider Host占用很高CPU怎么办? 时间:2018-01-06 来源:系统之家 作者:chunhua WmiPrvSE.exe是什么进程?WM ...
- java应用 cpu占用过高问题分析及解决方法
主要介绍了java应用cpu占用过高问题分析及解决方法,具有一定参考价值,需要的朋友可以参考下. 使用jstack分析java程序cpu占用率过高的问题 1,使用jps查找出java进程的pid,如3 ...
- Java 线上cpu占用过高分析
转载于:https://blog.csdn.net/ch999999999999999999/article/details/113151519 感谢作者:ch999999999999999999 J ...
最新文章
- context-param与init-param的区别与作用
- shell实例100例《一》
- mysql和oracle表的互导_oracle到mysql的导数据方式(适用于任意数据源之间的互导)...
- [html] 回车表单自动跳转如何禁止
- css a标签去掉下划线_这30个CSS选择器,你必须熟记(上)
- CentOS6.7安装scala2.11.7
- 重建控制文件的案例(RESETLOGS模式和NORESETLOGS模式)
- linux服务器配置trunk,在Linux配置VLAN Trunk
- 同一台机器上安装2个SDE服务
- 计算机板报设计简单,计算机板报制作
- python dbf转excel,使用Python将.csv文件转换为.dbf?
- 【LaTeX】pdfTex error: pdflatex.exe (file simhei.ttf): cannot open TrueType font file for reading解决方案
- 什么是TOGAF?TOGAF初学者指南
- 无限网卡不能启动WZC服务的解决方案
- reviewboard使用 与原理
- 80后的北漂IT人:你的未来在哪?该做好打算了!
- AriaNG保存服务器信息,AriaNg
- Log4j2跨线程打印traceId
- 计算机表格的名次怎么弄,excel表格怎么给成绩排名
- Involution:新神经网络算子(CVPR2021 论文速读)