GNU/Linux >> Linux の 問題 >  >> Linux

Linux –ディストリビューション間で移植可能なメモリの量を取得するにはどうすればよいですか?

メモリを報告する標準のファイル/ツールは、Linuxディストリビューションごとに異なる形式になっているようです。たとえば、ArchやUbuntuの場合。

  • アーチ

    $ free
                  total        used        free      shared  buff/cache   available
    Mem:        8169312     3870392     2648348       97884     1650572     4110336
    Swap:      16777212      389588    16387624
    
    
    $ head /proc/meminfo 
    MemTotal:        8169312 kB
    MemFree:         2625668 kB
    MemAvailable:    4088520 kB
    Buffers:          239688 kB
    Cached:          1224520 kB
    SwapCached:        17452 kB
    Active:          4074548 kB
    Inactive:        1035716 kB
    Active(anon):    3247948 kB
    Inactive(anon):   497684 kB
    
  • Ubuntu

    $ free
                 total       used       free     shared    buffers     cached
    Mem:      80642828   69076080   11566748    3063796     150688   58358264
    -/+ buffers/cache:   10567128   70075700
    Swap:     20971516    5828472   15143044
    
    
    $ head /proc/meminfo 
    MemTotal:       80642828 kB
    MemFree:        11565936 kB
    Buffers:          150688 kB
    Cached:         58358264 kB
    SwapCached:      2173912 kB
    Active:         27305364 kB
    Inactive:       40004480 kB
    Active(anon):    7584320 kB
    Inactive(anon):  4280400 kB
    Active(file):   19721044 kB
    

では、どうすれば(Linuxディストリビューション全体でのみ)移植可能で、ソフトウェアが特定の時間に使用できるメモリの量(スワップを除く)を確実に取得できますか?おそらく、それがfreeの出力で「利用可能」および「MemAvailable」として表示されるものです。 およびcat /proc/meminfo Archで使用できますが、Ubuntuまたは別のディストリビューションで同じものを入手するにはどうすればよいですか?

承認された回答:

MemAvailable /proc/meminfoに含まれています カーネルのバージョン3.14以降。コミット34e431b0aによって追加されました。これが、表示する出力変動の決定要因です。コミットメッセージは、MemAvailableなしで使用可能なメモリを推定する方法を示します :

現在、システムをスワップにプッシュせずに新しいワークロードに使用できるメモリの量は、MemFreeから見積もることができます。 、Active(file)Inactive(file) 、およびSReclaimable 、および/proc/zoneinfoからの「低」透かし 。

低透かしは、システムがスワップするレベルです。したがって、MemAvailableがない場合 少なくともMemFreeに指定された値を合計することができます 、Active(file)Inactive(file) およびSReclaimable/proc/meminfoに存在する方 )、/proc/zoneinfoから最低透かしを減算します 。後者には、ゾーンごとの空きページの数もリストされており、比較に役立つ可能性があります…

完全なアルゴリズムは、meminfo.cのパッチに記載されています。 適応するのはかなり簡単なようです:

  • すべてのゾーンの最低水準点を合計します。
  • 識別された空きメモリを取得します(MemFree );
  • 低水準点を引きます(交換を避けるために、低水準点に触れないようにする必要があります)。
  • ページキャッシュから使用できるメモリの量を追加します(Active(file)の合計 およびInactive(file) ):これは、ページキャッシュで使用されるメモリの量から、ページキャッシュの半分、または最低水準点のいずれか小さい方を差し引いたものです。
  • 再利用できるメモリの量を追加します(SReclaimable )、同じアルゴリズムに従います。
関連:Linux –LinuxでUSBフラッシュドライブを書き込み可能にする方法は??

したがって、これらすべてをまとめると、次の方法で新しいプロセスに使用できるメモリを取得できます。

awk -v low=$(grep low /proc/zoneinfo | awk '{k+=$2}END{print k}') 
 '{a[$1]=$2}
  END{ 
   print a["MemFree:"]+a["Active(file):"]+a["Inactive(file):"]+a["SReclaimable:"]-(12*low); 
  }' /proc/meminfo 

Linux
  1. Linux –オペレーティングシステムの名前を確実に取得するにはどうすればよいですか?

  2. Linux で利用可能なワイヤレス ネットワークのリストを取得するにはどうすればよいですか?

  3. Linuxでメモリ消費をログに記録する方法は?

  1. Linuxでキーボードの状態を取得するにはどうすればよいですか?

  2. Cを使用してLinuxでCPUの数を取得するには?

  3. Linuxで共有メモリセグメントに接続されているプロセスを一覧表示する方法は?

  1. 利用可能な`shopt`オプションの説明を取得する方法は?

  2. Linuxでファイルの物理サイズを取得するには?

  3. Linux で ECC エラーの通知を受け取るにはどうすればよいですか?