htopはfreeまたはtopよりもはるかに高いメモリ使用量を報告します。

htopはfreeまたはtopよりもはるかに高いメモリ使用量を報告します。

デフォルトでは、次の3つの出力が同時に取得されます。

トップ:

top - 02:54:36 up 2 days, 13:50,  3 users,  load average: 0.05, 0.05, 0.09
Tasks: 181 total,   1 running, 179 sleeping,   0 stopped,   1 zombie
%Cpu(s):  2.5 us,  0.8 sy,  0.0 ni, 96.6 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  16158632 total, 11234480 used,  4924152 free,      844 buffers
KiB Swap: 16777212 total,        0 used, 16777212 free, 10640832 cached

無料-h:

             total       used       free     shared    buffers     cached
Mem:           15G        10G       4.7G         0B       844K        10G
-/+ buffers/cache:       578M        14G
Swap:          15G         0B        15G

トップ: トップ

freeとtopが同意するようです。上部は11234480KiBを使用し、キャッシュされた10640832KiBを除くと579.7MiBになります。これは、使用されている+/-バッファ/キャッシュの下の無料レポートに非常に近いです。

しかし、htopは私が知っている限り存在しないか存在しない1836(MiB)を使用して報告します。この違いはどこから来るのか? htopには明らかにキャッシュされたデータは含まれていませんが、まだフリーまたはトップの3倍以上のメモリ使用量を報告します。

似たような質問がたくさんあることを知っていますが、この違いを説明する質問は見たことがありません。混乱は一般的にキャッシュの数があるかどうかがないようです。

編集:私はopenSUSEを実行しており、バージョン12.2と12.3 RC1で同じ違いを見つけたことに注意する必要があります。

Edit2:htopに含まれるバージョンは1.0.1です。また、ソースからバージョン1.0.2をコンパイルしましたが、同じ違いがありました。

答え1

以前の投稿を完全に書き直しました。少し気になってもう少し調べました。

簡単に言えば、違いがあるのは、openSUSEがパッチバージョンを使用するためです。トップそして無料これは追加の価値を追加します「隠れ家」


a) 標準バージョン

トップ, 無料, htop, ...:

使用量は読んで計算されます。データソース: /proc/meminfo:

たとえば、

#free:
Row   Column  | Corresponding /proc/meminfo entry
-----|--------|----------------------------------
Mem:

      total   : MemTotal
      used    : MemTotal - MemFree
      free    : MemFree
      shared  : MemShared
      buffers : Buffers
      cached  : Cached
-----|--------|----------------------------------
-/+ buffers/cache:

      used    : (MemTotal - MemFree) - (Buffers + Cached)
      free    :  MemFree             + (Buffers + Cached)

#htop:
    Used U*   : ((MemTotal - MemFree) - (Buffers + Cached)) / 1024

*ユーザーモードで使用するメモリー名を使用してください。Used Uアカ減算(キャッシュ+バッファ)を使用

したがって、実際には同じ計算が使用されます。

htopメモリーメーターには以下が表示されます。

[Used U % of total | Buffers % of total | Cached % of total ] UsedU MB

(MBは実際にMiBです。)


B)パッチバージョン

freeDebian、Fedora、openSuse は以下に基づいてtopいます。procps-ng。ただし、各スタイルは基本プロジェクトの一部になることも、そうでない場合もある独自のパッチを追加します。

オープン水勢で我々は発見するtop/free(procps) パッケージへのさまざまな追加です。ここで注目すべき点は、キャッシュされた値を表すために使用されるいくつかの追加値です。(私のシステムは「クリーン」プロセスを使用しているため、以前の投稿にはこれらの内容は含まれていません。)

B.1) 補足

/proc/meminfoに投手版これはカーネルデータ構造キャッシュです。私たちが探しているサブカテゴリとしてSリサイクル可能これはSlabの一部であり、カーネルモードとユーザーモードで異なる用途にリサイクルできます。

さらに、私たちはキャッシュ交換これは一度スワップアウトされ、スワップインされましたが、スワップファイルにもあるメモリです。したがって、もう一度交換する必要がある場合はすでに完了しています。

最後にNFS_不安定サーバーに送信されたがまだ安定したリポジトリにコミットされていないページです。

cacheopenSUSE パッチリリースには次の値が追加されました。

SReclaimable
SwapCached
NFS_Unstable

(また、いくつかのチェックがあります。合計は空き容量より大きくなければならず、使用される量はバッファ+キャッシュよりも大きくなければなりません。)

B.2) 結果

見ている無料したがって、次の値は同じです。 total, used, free and buffers

変更は次のとおりです cached and "+/- buffers"

used    = MemTotal - MemFree

old:
    cached         : Cached
    +-/buffers-used: used - (Buffers + Cached)
    +/-buffers-free: free + (Buffers + Cached)

patched:
    cached         : Cached + SReclaimable + SwapCached + NFS_Unstable
    +/-buffers-used: used - (Buffers + Cached + SReclaimable +
                     SwapCached + NFS_Unstable)
    +/-buffers-free: free + (Buffers + Cached + SReclaimable +
                     SwapCached + NFS_Unstable)

同じ追加をしてくださいトップ

トップ変更がないため、以前/パッチが適用されていない親/無料バージョンとのみ一致します。

関連情報