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相关推荐

  1. java应用CPU占用过高分析、C2 Compiler Thread高CPU占用分析

    文章目录 1. 查找进程下占用过高CPU的线程 1.1 查找应用对应的pid 1.2 查看哪个线程cpu占用高,确定对应的线程id: 1.3 计算线程id的十六进制值 1.4 打印线程堆栈内容 2. ...

  2. 如何在 Windows 10 上修复 Windows Modules Installer Worker 占用高 CPU

    原文:https://softwarekeep.com/help-center/fixed-windows-modules-installer-worker-high-cpu-on-windows-1 ...

  3. 生产环境下JAVA进程高CPU占用故障排查

    感谢原作者 http://blog.chinaunix.net/uid-10449864-id-3463151.html 问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常 ...

  4. 解决挖矿病毒占用高cpu(sysupdate、networkservice)

    我也是有一段时间服务器变的很卡,那时我还以为是我自己的软件装太多导致的问题,不看不知道,看了吓一跳,服务器已经被攻击了,接下来,我来分享下如何查找和解决这个病毒. 一.找出病毒 当发现服务器卡的时候, ...

  5. linux下java进程占用高问题分析过程

    2019独角兽企业重金招聘Python工程师标准>>> 1.用top命令找出占用cpu高的进程,记录下pid 2.用top -H -p pid(上面的pid)查看该进和下各线程占用c ...

  6. 关于Linux系统指令 top 之 %si 占用高,分析实例一

    续"top %wa 高的问题"之后,又遇到top之%si过高(高峰时段超过95%)的问题. %wa高,说明磁盘忙.譬如磁盘读写次数非常高. %si高,是否说明软中断忙?是否也说明软 ...

  7. WmiPrvSE.exe是什么进程?WMI Provider Host占用很高CPU怎么办?

    WmiPrvSE.exe是什么进程?WMI Provider Host占用很高CPU怎么办? 时间:2018-01-06 来源:系统之家 作者:chunhua WmiPrvSE.exe是什么进程?WM ...

  8. java应用 cpu占用过高问题分析及解决方法

    主要介绍了java应用cpu占用过高问题分析及解决方法,具有一定参考价值,需要的朋友可以参考下. 使用jstack分析java程序cpu占用率过高的问题 1,使用jps查找出java进程的pid,如3 ...

  9. Java 线上cpu占用过高分析

    转载于:https://blog.csdn.net/ch999999999999999999/article/details/113151519 感谢作者:ch999999999999999999 J ...

最新文章

  1. context-param与init-param的区别与作用
  2. shell实例100例《一》
  3. mysql和oracle表的互导_oracle到mysql的导数据方式(适用于任意数据源之间的互导)...
  4. [html] 回车表单自动跳转如何禁止
  5. css a标签去掉下划线_这30个CSS选择器,你必须熟记(上)
  6. CentOS6.7安装scala2.11.7
  7. 重建控制文件的案例(RESETLOGS模式和NORESETLOGS模式)
  8. linux服务器配置trunk,在Linux配置VLAN Trunk
  9. 同一台机器上安装2个SDE服务
  10. 计算机板报设计简单,计算机板报制作
  11. python dbf转excel,使用Python将.csv文件转换为.dbf?
  12. 【LaTeX】pdfTex error: pdflatex.exe (file simhei.ttf): cannot open TrueType font file for reading解决方案
  13. 什么是TOGAF?TOGAF初学者指南
  14. 无限网卡不能启动WZC服务的解决方案
  15. reviewboard使用 与原理
  16. 80后的北漂IT人:你的未来在哪?该做好打算了!
  17. AriaNG保存服务器信息,AriaNg
  18. Log4j2跨线程打印traceId
  19. 计算机表格的名次怎么弄,excel表格怎么给成绩排名
  20. Involution:新神经网络算子(CVPR2021 论文速读)

热门文章

  1. GSM Foxit Reader
  2. matlab 野值剔除,一种基于多项式拟和的野值剔除方法与流程
  3. matlab angle函数
  4. 「题解」300iq Contest 2 B Bitwise Xor
  5. (原创)添加QQ好友日期爬虫01——总体思路
  6. ecshop商品页面附件下载,京东淘宝购买,自定义按钮自定义连接
  7. ubuntu软件开发必备东西
  8. 访问www.baidu.com的过程
  9. (洛谷刷题)P1830 轰炸机III
  10. 微信WIFI,帮你做好客流量统计