私は与えられた時間にシステムがどのくらいのメモリを使用しているかをできるだけ正確に計算しようとしています。 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
示された値を決定するために使用される計算が詳細に記載されている。