Linuxでは、Javaで約200個のマイクロサービスを実行しており、cpuとメモリ分離のためにc-groupを使用しています。私たちが発見したことの1つは、Javaが(メジャーな)ガベージコレクションを効率的に実行するためにCPUの完全なコアを必要とする傾向があることです。単一サーバ上の複数のjvmsのガベージコレクションをスケジュールする
明らかに、実行中のアプリケーションが200個、CPUが24個の場合は、同時にすべてのGCがGCグループに限定されることになりました。アプリケーションのCPU使用量が比較的少ない(1CPUピークの約15%)ので、同時にすべてのGCを保証する方法を見つけるのは良いことです。
私は、GCごとに同時にGCを設定しないようにして、ホストあたり200個以上のアプリケーションを実行できるようにしましたが、誰かがこのトピックに関する提案や経験を持っているかどうか疑問に思っていましたホイールを発明しようとする前に。
私は、実際にGCを起動するためにMBeanを使用するだけでなく、使用できるコマンドラインメソッドがあることを発見しましたが、これは非決定論的なプロシージャを混乱させるのでGCの場合。
パフォーマンスメトリックを使用してCPU、メモリ、トラフィックを監視してGCを試して予測すると、複数のGCがGCごとに1つずつ起動される可能性がありますが、実用的でないか、または悪い考えかもしれない。
我々はそれが配分率に依存するのであなたは、GCをスケジュールすることはできませんのJava 7を実行している、と8
200個のJVMがすべてのGCを同時に、あるいはそのかなりの割合で使用することはほとんどありません。 – EJP
あなたは実際にその問題を観察しましたか? – the8472
いいえ、問題は発生していません@ the8472 – sub