いくつかの機能を追加できるように、 rack-timeout gemをフォークしました。つまり、タイムアウトのインシデントをキャッチし、ログに記録し、503 を送信します。
これが私のフォークです。
これが私の fork の Rack アプリ/ミドルウェアです。
動作は期待どおりです。ただし、展開してから、アプリのメモリ フットプリントが増加し、再起動するまで着実に増加します。成長している間、その動作は正しく、パフォーマンスは一見正常に見えます。
これに最初に気づいたとき、リクエストが終了した場合に、一部のスレッド/メモリがハングアップしたままになっている可能性があると思いました。この一連の実験の結果、このパッチが生まれました。実際、私のローカル テストでは、このパッチを適用しないと、アプリが (意図的に) タイムアウト リクエストに遭遇したときにメモリが着実に増加し、パッチを適用するとメモリは低く正常なままになります。
それで、私は問題を解決したと思いました。しかし、私はそうしませんでした。実稼働アプリのメモリはまだ増え続けています。(実稼働モードでアプリをローカルでテストしたことはありません。次に行います)。
Rack アプリのメモリ リークの原因は何ですか?