4

128Gbを備えた強力な32コアAMDOpteronサーバーの配信を開始しました。それぞれ16コアの2x6272CPUがあります。30スレッドで長時間実行される大きなJavaタスクを実行しています。LinuxとJavaのNUMA最適化がオンになっています。私たちのJavaスレッドは、主にそのスレッド専用のオブジェクトを使用しており、他のスレッドが読み取るメモリを読み取ることもあれば、共有オブジェクトを書き込んだりロックしたりすることもあります。

CPUコアが25%アイドル状態である理由を説明することはできません。以下は「トップ」のダンプです。

トップ-23:06:381日、23分、3ユーザー、平均負荷:10.84、10.27、9.62
タスク:合計676、実行中1、睡眠中675、停止中0、ゾンビ0
CPU:64.5%us、1.3%sy、0.0%ni、32.9%id、1.3%wa、0.0%hi、0.0%si、0.0%st
Mem:合計132138168k、使用済み131652664k、空き485504k、バッファー92340k
スワップ:合計5701624k、使用済み230252k、空き5471372k、キャッシュされた13444344k
..。
トップ-22:37:39アップ23:54、3ユーザー、平均負荷:7.83、8.70、9.27
タスク:合計678、実行中1、睡眠中677、停止0、ゾンビ0
Cpu0:75.8%us、2.0%sy、0.0%ni、22.2%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu1:77.2%us、1.3%sy、0.0%ni、21.5%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu2:77.3%us、1.0%sy、0.0%ni、21.7%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu3:77.8%us、1.0%sy、0.0%ni、21.2%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu4:76.9%us、2.0%sy、0.0%ni、21.1%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu5:76.3%us、2.0%sy、0.0%ni、21.7%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu6:12.6%us、3.0%sy、0.0%ni、84.4%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu7:8.6%us、2.0%sy、0.0%ni、89.4%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu8:77.0%us、2.0%sy、0.0%ni、21.1%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu9:77.0%us、2.0%sy、0.0%ni、21.1%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu10:77.6%us、1.7%sy、0.0%ni、20.8%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu11:75.7%us、2.0%sy、0.0%ni、21.4%id、1.0%wa、0.0%hi、0.0%si、0.0%st
Cpu12:76.6%us、2.3%sy、0.0%ni、21.1%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu13:76.6%us、2.3%sy、0.0%ni、21.1%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu14:76.2%us、2.6%sy、0.0%ni、15.9%id、5.3%wa、0.0%hi、0.0%si、0.0%st
Cpu15:76.6%us、2.0%sy、0.0%ni、21.5%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu16:73.6%us、2.6%sy、0.0%ni、23.8%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu17:74.5%us、2.3%sy、0.0%ni、23.2%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu18:73.9%us、2.3%sy、0.0%ni、23.8%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu19:72.9%us、2.6%sy、0.0%ni、24.4%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu20:72.8%us、2.6%sy、0.0%ni、24.5%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu21:72.7%us、2.3%sy、0.0%ni、25.0%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu22:72.5%us、2.6%sy、0.0%ni、24.8%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu23:73.0%us、2.3%sy、0.0%ni、24.7%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu24:74.7%us、2.7%sy、0.0%ni、22.7%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu25:74.5%us、2.6%sy、0.0%ni、22.8%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu26:73.7%us、2.0%sy、0.0%ni、24.3%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu27:74.1%us、2.3%sy、0.0%ni、23.6%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu28:74.1%us、2.3%sy、0.0%ni、23.6%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu29:74.0%us、2.0%sy、0.0%ni、24.0%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu30:73.2%us、2.3%sy、0.0%ni、24.5%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Cpu31:73.1%us、2.0%sy、0.0%ni、24.9%id、0.0%wa、0.0%hi、0.0%si、0.0%st
Mem:合計132138168k、使用済み131711704k、空き426464k、バッファー88336k
スワップ:合計5701624k、使用済み229572k、無料5472052k、キャッシュ済み13745596k

  PIDユーザーPRNIVIRT RES SHR S%CPU%MEMTIME+コマンド
13865ルート200122g 112g 3.1g S 2334.3 89.6 20726:49 java
27139 jayen 20 0 15428 1728 952 S 2.6 0.0 0:04.21トップ
27161 sysadmin 20 0 15428 1712 940 R 1.0 0.0 0:00.28トップ
   33ルート2000 0 0 S 0.3 0.0 0:06.24 ksoftirqd / 7
  131ルート2000 0 0 S 0.3 0.0 0:09.52イベント/ 0
 1858ルート2000 0 0 S 0.3 0.0 1:35.14 kondemand / 0

Javaスタックのダンプは、ロックが使用されているいくつかの場所の近くにスレッドがないこと、およびディスクやネットワークI/Oの近くにスレッドがないことを確認します。

「アイドル」と「待機」の「トップ」の意味を明確に説明するのに苦労しましたが、「アイドル」は「実行する必要のあるスレッドがこれ以上ない」という意味であるという印象を受けますが、これは意味がありません。私たちの場合。「Executors.newFixedThreadPool(30)」を使用しています。保留中のタスクは多数あり、各タスクは10秒ほど続きます。

説明にはNUMAをよく理解する必要があるのではないかと思います。CPUが非ローカルアクセスを待機しているときに表示される「アイドル」状態ですか?そうでない場合、説明は何ですか?

4

1 に答える 1

1

それはいくつかの可能性があります:

  • 共有データへのアクセスをめぐるスレッド間の競合である可能性があります。これは、ロックの競合、または読み取りまたは書き込みバリアによる余分なメモリトラフィックの形をとる可能性がありますが、後者がこれらの症状を引き起こす可能性は低いです。

  • ワーカースレッドをリークしています。例えば、彼らは時々死にかけ、取り替えられていません。

  • エグゼキュータ自体にボトルネックがある可能性があります。たとえば、次のタスクをスケジュールして終了するタスクに十分な速さで応答しない場合があります。

  • 特に並列収集が有効になっていない場合、ボトルネックはガベージコレクターである可能性があります。


このページでは、JavaのNUMAの機能強化について説明し、NUMA対応のGCスイッチについて説明します。それを試してみてください。そのページの他のGCチューニングアドバイスもチェックしてください。

この質問は、プロセスの状態を説明しています。Linuxでは、「top」コマンドのすべての値はどういう意味ですか?

プロセッサの概要での「wa」と「idle」の時間の違いは、「wa」はプロセッサが「D」状態のスレッドを持っていることを意味すると思います。つまり、ディスクI/Oを待機しています。対照的に、すべてのスレッドが「S」状態で待機しているプロセッサは、「アイドル」としてカウントされます。(この観点から、ロックを待機しているスレッドはS状態になります。)

top -Hスレッドを個別に表示する方法を試すこともできます。

于 2012-10-05T03:35:53.873 に答える