Java 9(最新のJava 8から)に1インスタンス(2 vCPU、2GB RAM、負荷〜4k req/sec)を切り替えました。しばらくの間、すべてがうまくいき、CPU使用率は以前と同じでした。しかし、〜6時間後には、理由なくCPU消費量が4%増加しました(21%から25%へ)。私はトラフィックスパイクを持っていませんでした。 メモリ消費は増加せず、メトリックの変更もありませんでした(コード内のすべてのメソッドに対してカウンタがあります)。何もない。実際に負荷が増加することなく、Java 9 G1の作業から約6時間後にパフォーマンスが低下するのはなぜですか?
私はそれが戻って戻ります期待〜12時間そのまま、このインスタンスを残しました。しかし何も変わっていない。それはちょうどより多くのCPUを消費し始めました。
top
コマンドは、インスタンスがJavaサーバ・プロセスのために通常よりも多くのCPUスパイクを有することを示しました。私は最近、G1が高スループットには適していないと読んでいます。だから私は理由がG1にあるとの結論を下しました。
java -XX:+UseParallelGC -jar server-0.28.0.jar
と監視の〜20時間後に、すべてが以前のように細かいです。 CPU使用量は数日前と同じ21%です。
:7時間+ 12時間 "そのまま"(7Dスケール)後
CPU増加:
CPU使用権のJava 9配備(6Hスケール)後CPU後 - XX:+UseParallelGC
(24時間スケール):
だから私の質問をされた - G1の期待する動作でありますか?他の誰かが同様のことを見ていますか?
のUbuntu 16.04のx64
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
あなたは、時間(6時間スケール)にその時点でGCログを見るために起こりましたか。 GCに関する疑わしい*疑惑を除外するのは良いことであり、正確な原因を知るための自信を持っていたでしょうか。 – nullpointer
はありません。:(これはので、私はそこに危険を冒したくなかった本番インスタンスである。 –
ええ...ログなしで、これは(私は仮定推測する以外に)不可能ミッション – Eugene