さまざまなオペレーティング システムでのメモリ管理に問題があります。
私のプログラムは、数 GB のメモリを必要とする処理を行うサーバーです。その後、別のリクエストが到着するまで数時間待機する間、ほとんどのメモリを解放します。
AIX と Solaris では、次のような動作が見られます。
メモリを解放しても、メモリがオペレーティング システムに戻されません。プロセスが使用する仮想メモリの量は常に増加し、減少することはありません。物理メモリについても、限界まで同じことが言えます。したがって、スリープモードでもこのメモリをすべて使用しているように見えます。
このメモリを OS に戻すことができるのはいつですか? どうすれば作れますか?
Linux は違います。時々メモリを返すようですが、いつ、どのように返すのかわかりません。たとえば、リクエスト前のプロセスが 100MB で、ピーク時には 700MB であり、すべてを解放した後は 600MB に減少したというシナリオがあります。私には理解できません。Linux が OS にメモリを返還するのであれば、なぜすべてを返さないのでしょうか?