私は Java で単純なサーバー アプリケーションを作成しており、現在Apache ベンチマークを使用していくつかのベンチマークを作成しています。
サーバーが使用する常駐メモリは、起動直後で約 40M です。一連の 1000 件のリクエスト (100 件の同時リクエスト) を行います。各シリーズの後、メモリ使用量を再度確認します。結果は私には非常に奇妙に思えます。
ベンチマークの最初の実行中、リクエストの 99% は約 20 ミリ秒で処理され、残りの 1% は約 300 ミリ秒 (!) で処理されます。その間、メモリ使用量は増加します。5 ~ 7 回の実行後、この増加は 120M で止まり、リクエストははるかに高速に実行され始めます (リクエストあたり約 10 ミリ秒)。さらに、リクエストの数を増やしても、時間とメモリの値は変わりません。
なぜこれが起こるのでしょうか?メモリ リークが発生した場合、サーバーはますます多くのリソースを必要とします。これは、事前にヒープサイズを増やすいくつかの適応型 JVM メモリ割り当てメカニズムが原因であるとしか言えません。