Full GCが発生した場合にユーザから見るとどのような状態になっているのでしょうか?
前提としては
・Web-AP-DBの3層モデルのWebアプリケーション
・CPUリソースは余裕があるものとします。
・FullGCには1分程度かかるものとします。
私自体はFullGCが起こっていても、CPUリソースに余裕があれば、ユーザにはなんの影響がないと考えています。
http://www.atmarkit.co.jp/fjava/rensai3/javavm02/javavm02_2.html
@IT:チューニングのためのJava VM講座(後編)
アプリの作りや規模、VMのチューニングにもよりますが、応答が一定時間返ってこなくなる障害が一般的だと思います。
CPUリソースに余裕があればユーザー(というか具体的に言うとweb applicationの動作)に影響がないというのは一概に言えないと思います。理由としてはGC実行時に消費するリソースはCPUだけではありませんし、アプリケーション・スレッドと並列的に実行する、という相互排他性自体が問題だからです。ガーベジ・コレクターが仕事をするには、ガーベジ・コレクターが一定期間操作するヒープ空間(メモリ)に対して、どのスレッドもアクセスしないようにする必要があります。この期間は、GCの「stop-the-world」フェーズとして知られています。
対応策としては、ヒープサイズやGCタイミングのチューニングが考えられます。 GCへの影響に関していえばヒープサイズは必ずしも大きければよいわけでもなく、サイズが大きくなれば必然的にGCの範囲も広がりますのでそれだけGC実行の所要時間が増えます。ですのでアプリが必要な量を適切に割り当てる事と、ユーザーアクセスの頻度とアプリの処理の重さを考慮してGCの設定をtチューニングするのが良いと思います。
なるほど、GCの「stop-the-world」フェーズというのがあるんですね。そこを考慮しなければならないということですね。 ずばりの回答です。
ありがとうございます。