Java CPUの過剰使用に関する問題解決のまとめ



 
以前、圧力測定をした時、CPUが高すぎる状況に遭遇したことがありますが、総括していません.今日またこのような状況に遭遇して、あちこちで資料を探して、考えを知っていますが、多くの命令は度娘やグーグルを探し直す必要があります.そこで今回は、
 
現象:プロジェクトが突然ダウンタイムし、サーバーに接続するとCPUが800%(8コア)近くになる.
 
ステップ1:まずtopコマンドはCPUが最も占有するプロセスを表示し、javaプロセスであることを発見する(32691).
ステップ2:topインタフェースで「H」(centOS,ubuntu)を押すと、最も高いスレッド情報(32693)がクエリーされ、一般的に複数になります.
 
ステップ3:「kill-332691(tomcatプロセス番号)」では、この時点でスレッドのスタック情報がcatalina.outファイルに出力されます.
ステップ4:catalinaで32693を16進数7 fb 5に変換する.outでプロセスを検索し、スタック情報を表示
ステップ5:ここでは一般的にいくつかの状況が見られる.デッドロック2.デッドサイクルまたは大量サイクル3.gc(ごみ回収)
手順6:gcの場合、jstat-gcutil 326911000 100を使用してgcを印刷し、メモリの使用状況とgcの状況を確認できます.
ツールを使用して、jconsole構成(linux):
catalina.sh   CATALINA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.1.188 -Dcom.sun.management.jmxremote.port=9527 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

またはjvisualvmを使用する.exeツール.
手順7:メモリがほぼ100%の場合、上記のツールを使用してdumpメモリファイルを作成できます.次にeclipseプラグインmatを使用してメモリ解析を行い、コマンドを使用してheadDumpファイルを生成することもできます.
jmap -dump:format=b,file=/home/gytec/aa.hprof 9665

 
 
上記は基本的にメモリ内のオブジェクトの分布を決定することができ、自分のビジネスロジックとコードを組み合わせて、メモリの漏れがどこにあるかを分析することができます.
 
今日は遅すぎて、図がないので、今度図を補充します.