サーバーから大量のデータを消費する Java クライアントがあります。クライアントが十分な速度でデータ ストリームについていけない場合、サーバーはソケット接続を切断します。クライアントが 1 日に数回切断されます。jconsole を実行してメモリ使用量を確認したところ、ヒープ スペース グラフはかなり明確に定義されたノコギリ波パターンのように見え、約 0.5GB から 1.8GB の間で振動しています (2GB のヒープ スペースが割り当てられています)。しかし、切断されるたびに、完全な GC が実行されます (すべての完全な GC ではありません)。完全な GC には平均で 1 秒以上かかることがわかります。時間帯にもよりますが、フル GC は忙しいときは 5 分おきに発生し、遅い時間帯にはフル GC の間に最大 30 分かかることがあります。
完全な GC 時間を短縮できれば、クライアントは受信データにうまく対応できるようになると思いますが、GC チューニングの経験はあまりありません。これが良いアイデアであるかどうか、またその方法について誰かが洞察を持っていますか? または、同様に機能する可能性のある別のアイデアはありますか?
** 更新 ** -XX:+UseConcMarkSweepGC を使用したところ、改善されましたが、非常に忙しいときに切断されました。そのため、忙しい時期を乗り切るためにヒープ割り当てを 3GB に増やしました。現在はかなり順調に進んでいるようですが、切断されなかったのは 1 日だけです。たぶん、時間があれば、作成されるゴミの量を減らすように努めますが、これも役立つと確信しています. すべての提案をありがとう。