
Linux (ubuntu 20.04) サーバーのメモリを何が消費しているのかを突き止めようとしています。
再起動後しばらくすると、htop に次のように表示されます。
これは、現在 17 GB のメモリが使用されていることを示しています。再起動する前は、29.6 GB と表示され、コンピュータの動作が遅いように見えました。htop ウィンドウはメモリ別にソートされており、最もメモリを使用しているプロセスは 0.6% のメモリを使用しています。
もう一つの質問このコマンドの使用をお勧めします:
ps -e -orss=,args= | sort -b -k1,1n
最も使用率の高いプロセスは 209596 キロバイト (?) のメモリを報告しますが、これも使用可能な RAM のわずかな割合です。
ps
私は、そのコマンドによって報告された最初の列のすべての数字を合計するという、かなり難解なコマンドを試しました。
ps -e -orss=,args= | sort -b -k1,1n | sed 's/^ \+//' | cut -d \ -f 1 | sed '2,$s/$/+/' | sed '$s/$/p/' | dc
合計使用量は 2965816 キロバイト (?) と報告されていますが、これは (キロバイトの想定が正しいと仮定すると) 3 GB 未満なので、残りの 14 GB はどこに行くのでしょうか?
誰かこれについて助けてくれませんか?
答え1
はい、それが問題を引き起こしているのでしょうか?
問題ではありません。これは想定された動作です。ZFS はもともと Linux 用に作られたものではありません。独自のキャッシュ システム (ARC、Adaptive Replacement Cache と呼ばれます) があります。Linux では、このキャッシュに割り当てられたメモリは「使用中」と見なされますが、通常のファイル システム キャッシュと同様に、メモリの負荷が上昇すると解放されます。デフォルトの最大 ARC サイズは物理メモリの 50% です。
最新バージョン (3+) では、htop
ARC ステータス表示をオンにすることができます。
このスクリーンショットは、8 GiB のメモリを搭載したシステムのものです。
答え2
ZFS には、通常の Linux ディスク キャッシュとは別の RAM ベースのディスク キャッシュがあります。これは、ZFS が Linux 以外で開発されたことに関係しています。この ZFS メモリ キャッシュは、Adaptive Replacement Cache (ARC) と呼ばれます。この分離により、ZFS ARC は Linux では、EXT4 などのネイティブ ファイル システムで予想されるように「キャッシュ」メモリではなく「使用済み」メモリとして表示されます。これが、ZFS を初めて使用する多くの人が RAM の使用量を心配する理由ですが、心配する必要はありません。重複排除を扱っていない限り (おそらく扱っていないでしょうし、おそらくそうすべきでもありません)、多くの人が言うことに反して、ZFS にとってメモリはそれほど大きな問題ではありません。
大量のデータを移動 (つまり読み取り) しているため、このディスク キャッシュ (およびメモリ) がいっぱいになっていることがわかります。ARC のデフォルトのメモリ制限は通常、RAM の 50% ですが、最大値を設定する場合は、zfs カーネル モジュール パラメータ「zfs_arc_max」を使用して構成できます。空きメモリが不足すると、ZFS は Linux の通常のディスク キャッシュと同様に、ARC の一部を解放します。繰り返しますが、心配する必要はありません。未使用の RAM は無駄な RAM です。