1つのLinuxボックスで複数のサーバープロセスのインスタンスを実行しています。ボックスには8コアと16GBのRAMがあります。 Java 1.6を使用して、-Xincgcオプションを使用して各プロセスを起動します。JavaガベージコレクションはすべてのJavaプロセスを停止します
さまざまなタスクを完了するための時間を追跡する、アプリケーション全体で計測されたさまざまなタイマーがあります。ガベージコレクションが発生すると、その時に実行されていたタスクが遅いというボックスのすべてのJavaプロセスが表示されることがわかりました。
これは長時間停止していないかもしれません。おそらく100〜300ms程度ですが、レイテンシはこれの大きな要因です。また、定期的に停止しているわけでもありません。
ガベージコレクションが実行されているときに、Javaプロセスがいつでも停止することはありませんか?もしそうなら、これを回避する方法はありますか?別のGCオプションを使用する必要がありますか?
UPDATE:
ただ、明確にするためにGCが発生している間、私は1つのプロセスのストールについて心配していません。私は設定を微調整したり、その場合に最適化することができます。私は、Javaプロセスを実行しているときに、いつもそれが多かれ少なかれ独立していると思ったときに、同時に停止するように思えるのかと思っています。
GCは本当にすべてのプロセスを停止べきではありません。また、[GCチューニングガイド](http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html)も参照してください。 Java 6のデフォルトのガベージコレクタは、処理時間に最適化されたパラレルGCであり、休止時間ではありません。コンカレントコレクタは、より適しています。 – millimoose
オブジェクトプーリングを検討することをお勧めします。これは、起こっているGCの量を減らす1つの方法です。 –
@Guaranteed:独立したJVMを実行していて、1つのJVMが完全なGCを実行すると、1つのJVMがすべて影響を受けますか?あなたはこれを説明していますか? – TacticalCoder