web-dev-qa-db-ja.com

tmpfsのメモリ使用量の制御

スワップの量を制限せずにtmpfsによって使用されるRAMの量を制限する方法はありますか?

ほとんどのドキュメントでは、tmpfsのsizeオプションによってtmpfsの合計サイズが制限されると記載されていますpartition以降、このスペースはRAM =とSWAP。そして、デフォルトはRAMの半分であると言います。これは、すべてのRAMを使い切ると、OOMの致命的なエラーが発生するためです。混乱を招きます。

たとえば、RAMの1/4を使用して、スワップの最大3/4を使用したいと思います。

5
gcb

私の知る限り、仮想メモリシステムのどの部分(つまり、RAMまたはスワップ))をtmpfsに使用するかを制御することはできません。

ただし、大きなtmpfsを作成するとOOMの致命的なエラーが発生するというのは事実ではありません。ファイルをtmpfsに配置するまで実際には使用されないため、RAM + SWAPの合計よりも大きいtmpfsを作成できます。

doファイルをtmpfsに配置すると、メモリが使用されますが、tmpfsに配置したファイルと同じ量になります。その後、これらのファイルに長時間触れず、システムがバッファキャッシュに保持する必要がある以上にRAMを使用する必要がある場合、これらのファイルは実際にはスワップからバックアップされます。 RAMの。

Tmpfsに対する要求がRAMの大部分になると、バッファキャッシュに影響を及ぼします(tmpfsファイルに必要なためRAM)にキャッシュされなくなります)。要求が大きくなるにつれて、最終的には、バッファキャッシュがない場合、すべてのスワップが使用され、さらに多くのメモリ要求が行われ、その後、OOMエラーが発生し始めます。

したがって、適切な量のスワップもある限り、実際には/tmpに大きなtmpfsを指定するのが安全です。 RAMの25%とスワップの75%を使用しても大丈夫だと言います。その場合、通常は1GのRAMと2Gのスワップ。tmpfsを1Gに設定し、スワップを少し増やして、たとえば3Gにします。

システムでメモリ不足が発生した場合、最初に発生するのは、/tmp内の使用頻度の低いファイルがRAMではなくスワップによってバックアップされることです。 tmpfsをRAMと同じサイズにすることで、すべてのRAMを失うことはありません。

7
grifferz