JAVAプロセス異常分析-CPU、メモリ
1795 ワード
現象:CPUがいっぱい走って、メモリが急速に増加して、サービスが崩壊します。問題:C 2 CopilerThread 理由と説明は、C 2 CopilerThread 0というスレッドが比較的高いCPUを占有しているためです。C 2 ComplerはJVMのServerモードでのバイトコードコンパイラであり、JVMが起動するとすべてのコードが解釈実行モードにあり、あるコードが一定の閾値回数まで実行されると、これらのコードはC 2 Copilerによってマシンコードにコンパイルされ、マシンコードにコンパイルされて実行効率が大幅に向上します。流量が入った後、ほとんどのコードがホットスポットコードになります。この過程でC 2 ComplerはCPUを頻繁に占用して運行します。大部分のホットスポットコードがマシンコードにコンパイルされた後、C 2 Copilerはもう長期的にCPUを占用しなくなります。この過程もジッタと見なされます。
解決策(1)の最も直接的で効果的な方法は「ウォームアップ」です。Jmeter等圧測定ツールを使ってオンラインアクセス流量をシミュレーションできます。C 2 Copilerにあらかじめホットスポットコードをマシンコードにコンパイルして、正式な環境流量に対する影響を減少させます。
(2)JVM起動パラメータを設定:-XX:CICommpilerCount=threadsコンパイルスレッド数は、デフォルトは2で、4または6を設定できます。デフォルト値でディザがいっぱいになっていて、より多くのスレッドに設定しても機能するとは限りませんが、CPUの「高すぎて不満」の場合に役立ち、ディザ時間を減らすことができます。
(3)インターフェース呼び出し回数spring boot actuat orhttp://host:port/metrics 呼び出し回数と時間を調べる
参考:http://www.xiuson.com/?p=203 https://cyberdak.github.io/jvm/2017/03/25/jvm-restart-cause-high-load http://www.blogjava.net/xylz/archive/2012/03/15/371966.html問題:GC task thread
MATツールを使ってメモリリーク分析を行います。http://www.eclipse.org/mat/downloads.php問題:Locked ownable synchronizes
// CPU pid
# top
// dump
# jstack -l > cpu.log
// cpu tid
ps -mp -o THREAD,tid,time | sort -rn
// tid
printf "%x
"
// cpu.log tid
解決策(1)の最も直接的で効果的な方法は「ウォームアップ」です。Jmeter等圧測定ツールを使ってオンラインアクセス流量をシミュレーションできます。C 2 Copilerにあらかじめホットスポットコードをマシンコードにコンパイルして、正式な環境流量に対する影響を減少させます。
(2)JVM起動パラメータを設定:-XX:CICommpilerCount=threadsコンパイルスレッド数は、デフォルトは2で、4または6を設定できます。デフォルト値でディザがいっぱいになっていて、より多くのスレッドに設定しても機能するとは限りませんが、CPUの「高すぎて不満」の場合に役立ち、ディザ時間を減らすことができます。
(3)インターフェース呼び出し回数spring boot actuat orhttp://host:port/metrics 呼び出し回数と時間を調べる
参考:http://www.xiuson.com/?p=203 https://cyberdak.github.io/jvm/2017/03/25/jvm-restart-cause-high-load http://www.blogjava.net/xylz/archive/2012/03/15/371966.html
//
jstat -gcutil pid 2000 10
jmap -histo
jmap -dump:format=b,file=dumpFileName //
jmap -dump:format=live,file=dumpFileName //
一般的にGC問題、メモリ不足またはメモリ漏れです。MATツールを使ってメモリリーク分析を行います。http://www.eclipse.org/mat/downloads.php
//-XX:+HeapDumpOnOutOfMemoryError
//-XX:HeapDumpPath=d:/a.dump
-Xmx20m -Xms20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/a.dump -XX:+PrintGCDetails