私のUbuntu 12サーバーは不思議なことにメモリを失ったり浪費しています。64GBのRAMを搭載。すべてのアプリケーションをシャットダウンしても、約 46GB が使用済みとして表示されます。このメモリは、バッファまたはキャッシュに使用されるとは報告されていません。
top の結果 (私のアプリの実行中。アプリは約 9G を使用します):
top - 21:22:48 up 46 days, 10:12, 1 user, load average: 0.01, 0.09, 0.12
Tasks: 635 total, 1 running, 633 sleeping, 1 stopped, 0 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 99.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 65960100k total, 55038076k used, 10922024k free, 271700k buffers
Swap: 0k total, 0k used, 0k free, 4860768k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5303 1002 20 0 26.2g 1.2g 12m S 0 1.8 2:08.21 java
5263 1003 20 0 9.8g 995m 4544 S 0 1.5 0:19.82 mysqld
7021 www-data 20 0 3780m 18m 2460 S 0 0.0 8:37.50 apache2
7022 www-data 20 0 3780m 18m 2540 S 0 0.0 8:38.28 apache2
.... (smaller processes)
top はキャッシュに対して 48G ではなく 4.8G を報告しており、使用されているのは 55G であることに注意してください。free -m の結果:
total used free shared buffers cached
Mem: 64414 53747 10666 0 265 4746
-/+ buffers/cache: 48735 15678
Swap: 0 0 0
何が私のメモリを使用していますか? 出くわす可能性のあるすべての診断を試しました。Linux はバッファ/キャッシュに RAM を使用しているため、フォーラムには同じ質問をする人が殺到しています。これはここで起こっていることではないようです。
システムが lxc コンテナーのホストであることが関連している可能性があります。上記で報告された上位および無料の結果はホストからのものですが、コンテナ内でも同様のメモリ使用量が報告されています。すべてのコンテナを停止しても、メモリは解放されません。一部の 46G は使用されたままです。ただし、ホストを再起動すると、メモリは解放されます。しばらくすると46Gに達しません。(数日か数週間かかるかはわかりません。数時間以上かかります。)
システムが zfs を使用していることも関連している可能性があります。Zfs はメモリを大量に消費すると言われていますが、それほど多くはありません。このシステムには、1.5T と 200G の 2 つの raidz プールに 2 つの zfs ファイルシステムがあります。まったく同じ問題 (何も使用されていない 46G) を示す別のサーバーがあり、ほとんど同じように構成されていますが、1.5T ではなく 3T アレイを使用しています。zfs ファイルシステムごとにたくさんのスナップショット (100 程度) があります。私は通常、各ファイルシステムのスナップショットを常に 1 つずつマウントしています。それらをアンマウントしても、記憶は戻りません。
上のスクリーンショットの VIRT 数値は、使用されているメモリとほぼ一致していることがわかりますが、これらのアプリをシャットダウンした後も、それらを実行しているコンテナーをシャットダウンした後でも、メモリは使用されたままです。
編集:スワップを追加してみましたが、興味深いことが起こりました。30Gのスワップを追加しました。しばらくすると、上部にキャッシュとしてマークされたメモリの量が 5G から 25G に増加しました。Free -m は、使用可能なメモリが約 20G 多いことを示しました。さらに 10G のスワップを追加し、キャッシュ メモリを 33G に増やしました。さらに 10G のスワップを追加すると、さらに 6G がキャッシュとして認識されます。この間ずっと、数キロバイトのスワップしか使用されていないと報告されています。あたかも、カーネルが認識またはキャッシュされていると報告するすべてのビットに対して、一致するスワップが必要であるかのようです。40G のスワップを使用した top の出力は次のとおりです。
top - 23:06:45 up 46 days, 11:56, 2 users, load average: 0.01, 0.12, 0.13
Tasks: 586 total, 1 running, 585 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 65960100k total, 64356228k used, 1603872k free, 197800k buffers
Swap: 39062488k total, 3128k used, 39059360k free, 33101572k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6440 1002 20 0 26.3g 1.5g 11m S 0 2.4 2:02.87 java
6538 1003 20 0 9.8g 994m 4564 S 0 1.5 0:17.70 mysqld
4707 dbourget 20 0 27472 8728 1692 S 0 0.0 0:00.38 bash
どんな提案でも大歓迎です。
編集 2: /proc/spl/kstat/zfs/arcstats の arc* 値は次のとおりです。
arc_no_grow 4 0
arc_tempreserve 4 0
arc_loaned_bytes 4 0
arc_prune 4 0
arc_meta_used 4 1531800648
arc_meta_limit 4 8654946304
arc_meta_max 4 8661962768
ZFS 用にアクティブ化された L2ARC はありません