「/proc/meminfo」の「MemTotal」から「MemAvailable」を減算するために現在使用されている合計メモリを計算する正しい方法は何ですか?

「/proc/meminfo」の「MemTotal」から「MemAvailable」を減算するために現在使用されている合計メモリを計算する正しい方法は何ですか?

私は与えられた時間にシステムがどのくらいのメモリを使用しているかをできるだけ正確に計算しようとしています。 MemTotalからMemAvailableを減算し、その差を1024で割ってkBからMiBに変換すると、現在使用中のRAMの総量が得られるようです。スクリプトを実行すると、/ proc / meminfoの次の出力によると、出力はです1905.27 MiB。しかし free -m と top はどちらもメモリが1154 MiB。出力が異なる理由は何ですか?私の方法が使用中の合計メモリを計算する正しい方法ではありませんか?

/proc/meminfoの出力:

MemTotal:       16093472 kB
MemFree:        11284772 kB
MemAvailable:   14142472 kB
Buffers:          256672 kB
Cached:          3217852 kB
SwapCached:            0 kB
Active:          1721676 kB
Inactive:        2375840 kB
Active(anon):       3928 kB
Inactive(anon):  1057160 kB

出力free -m

               total        used        free      shared  buff/cache   available
Mem:           15716        1154       11014         428        3547       13803
Swap:           2047           0        2047

スクリプトの断片:

mem_avail() {
    awk 'FNR == 3 {printf "%lu", $2}' "/proc/meminfo"
}

mem_total() {
    awk 'FNR == 1 {printf "%lu", $2}' "/proc/meminfo"
}

mem_used() {
    echo "|  $((($(mem_total)-$(mem_avail))/1024)) MiB"
}

私の出力は/ proc / meminfoの値に基づいています。1905.27 MiB

答え1

あなたが明示した目的を考慮して:

使用されるメモリとは、現在他の場所に割り当てられているため、使用できなくなったメモリを意味します。したがって、私のコンピュータに16 GBまたはRAMがあり、このスクリプトのアイデアは、現在のステータスバーで使用されているメモリ量を視覚的通知として表示し、合計16 GBに近づいていることを警告することです。

私はあなたの計算があなたの意図と一致すると思います。MemAvailable短時間でどのくらいのメモリを提供できるかを測定します。「free -m」コマンドの「使用可能」フィールドの意味詳細はこちら)との違いは、MemTotal使用できないメモリ量を測定したことです。

MemAvailable値が16GiBにどれだけ近いかを追跡するのではなく、直接使用し、ゼロにどれだけ近いかを追跡することを検討できます。これにより、インストールされたメモリ量に関する精神的な体操や知識は不要になります。

man free示された値を決定するために使用される計算が詳細に記載されている。

関連情報