日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

jstack: Java占用高CPU分析之- C2 Compiler Thread

發布時間:2023/12/8 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。