メモリ使用量に疑問があります。
現在、Linuxでfree -m
コマンドから使用メモリを測定するnagios
チェックをしています。 http://exchange.nagios.org/directory/Plugins/Operating-Systems/Solaris/check_mem-2Epl/details からメモリ使用量の別のスクリプトを追加しました。これは、vmstat
からSolarisとLinuxを測定します/proc/meminfo
から、この新しいチェックを使用すると、一部のホストで使用量が20%〜30%増加します。
./check_mem.pl -f -w 90 -c 60
CRITICAL - 34.6% (439872 kB) free!|TOTAL=1272376KB;;;; USED=832504KB;127237;508950;; FREE=439872KB;;;; CACHES=418977KB;;;;
これは、このホスト上のSolarisホスト上の新しいスクリプトからの出力でもあります。
vmstat 1 2
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr s0 -- -- -- in sy cs us sy id
0 0 0 1184172 474856 54 222 0 0 0 0 112 8 0 0 0 231 1735 669 1 8 91
0 0 0 1175352 440948 16 58 0 0 0 0 0 0 0 0 0 229 83 190 0 3 97
vmstat
と新しいスクリプトの値は問題ありません。つまり、スクリプトはvmstat
の値から収集します。 SolarisとLinuxでメモリ使用量を測定するための最良の方法は何かを知る必要があります。OSがどのくらい使用し、アプリがどれだけ使用しているのかは、vmstat
(Sunos)と/proc/meminfo
(Linux)でわかります。それ?
vmstat
は、メモリ使用量の測定にはそれほど役立ちません。使用されている仮想メモリと物理メモリの量、および何がそれを使用しているかを定量化するメトリックは提供されません。ただし、RAM不足を測定するための非常に優れたツールです。 sr
列(スキャン速度)を監視するだけです。ゼロのままである限り、RAMについて心配する必要はありません。それがゼロに等しくない場合は、何がRAMを要求しているかを調査する必要があります。
システムメモリを何が使用しているかについての詳細なアイデアを得るには、既に提案されている_echo ::memstat | mdb -k
_コマンドに加えて、_prstat -n 1 -a
_を実行して、ユーザーごとのメモリ使用量を得ることができます__prstat -n 1 -Z
_ forゾーンの使用量と_prstat -s rss
_(RAMでソートされたプロセスごとの使用量)。
prstat
出力のSWAP
列は使用されている仮想メモリを示し、RSS
列はRAMを使用しています。
カーネルの使用法については、_kstat -n system_pages
_を実行して、_pp_kernel
_の値を確認できます。
あなたの質問に正確に答えるには:
oSがどれだけ使用し、アプリがどれだけ使用しているのかを確認するにはどうすればよいですか?vmstat(Sunos)と/ proc/meminfo(Linux)は問題ありませんか?
Solarisの場合、vmstat
は適切ではありません。 _echo ::memstat | mdb -k
_を実行して、その出力を解析できます。
行「Anon
」と「_Exec and libs
_」の合計は、アプリケーションで使用されるRAMです。行「Kernel
」は、RAMカーネルで使用されている行、「_ZFS ...
_」、「_Page cache
_」、「Free (cachelist)
」は、データと行をキャッシュするために使用されるRAMを示しています。 "Free (freelist)
"は、未使用、つまりRAMの浪費を報告します。
注:上記はすべてSolarisに関するものです。
はい。vmstatと/ proc/meminfoが最適なオプションです。Solarisでは、次のコマンドを使用することもできます。
echo ::memstat | mdb –k
それは本当に遅いです(それはいくつかのより大きなシステムでは最大30分かかる場合があります:))が、メモリ使用量の素晴らしい概要を提供します。
「最善の方法」は、必ずしもあなたが示唆するようにOSが使用する量とアプリが使用する量を区別することではありません。
vmstat 1 2
このコマンドは、重要な側面である1秒あたりの値を提供します。 -Sm
を使用すると、長い数字によるレイアウトの間違いを防ぐことができます。
]# vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 6291912 22108 991804 0 0 2 24 7 29 7 3 90 0 0
0 0 0 6291156 22108 992488 0 0 0 0 79 251 0 0 100 0 0
0 0 0 6291156 22116 992568 0 0 0 44 51 85 0 0 100 0 0
]# vmstat 1 3 -Sm
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 6442 22 1016 0 0 2 24 7 29 7 3 90 0 0
0 0 0 6442 22 1015 0 0 0 0 73 212 0 0 100 0 0
0 0 0 6442 22 1015 0 0 0 0 87 186 0 0 100 0 0
ここでは、free
と同様に、基本的な質問に答えることができます。
これはmm値です。コマンドfree
はこれを使用して、「合計」から「使用済み」を計算します。合計物理量RAMは上記には表示されていません。-s
オプションはいくつかの追加の値を提供します:
]# vmstat -s -Sm |grep total
8254 m total memory
0 m total swap
Vmstatの出力は、6年前のSolarisの例と現在のLinuxの間で大きく異なります。 swpd
は興味深いフィールドで、kswapd
のスキャンアクティビティを提供します。 siおよびsoフィールドはアクティビティを示します。適切な遅延とカウントを選択することで、何が起こっているかを正確に確認できます。スワップのサイズと使用/空きはfree
(および/ proc/meminfo)にあります。
これは、詳細が複雑になるところです。 vmstat -a
はbuffおよびcacheの代わりにactiveおよびinactiveを示し、free
のようになります。 、buff/cacheとして。
昨日、傷つきましたがecho 1 > /proc/sys/vm/drop_caches
をしました。今私はLinux 5カーネルソースの上部でgrep -r ...
を実行し、vmstat 7 100 -Sm
で監視しました:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 6361 27 1069 0 0 0 0 76 159 0 0 100 0 0
0 0 0 6395 27 1068 0 0 0 13 263 419 0 0 100 0 0
1 0 0 6278 30 1185 0 0 15767 0 1863 3680 1 2 96 2 0
2 0 0 6128 33 1332 0 0 20570 0 2716 5158 2 4 92 2 0
1 0 0 5940 38 1513 0 0 25500 0 2456 4645 2 4 92 2 0
0 1 0 5770 40 1682 0 0 23369 0 2064 3784 2 4 92 2 0
1 0 0 5472 43 1978 0 0 41068 3 1960 3484 3 3 91 3 0
1 0 0 5367 44 2079 0 0 14870 0 1139 2118 2 2 95 1 0
0 0 0 5367 44 2079 0 0 0 201 39 96 0 0 100 0 0
0 0 0 5367 44 2079 0 0 0 0 37 95 0 0 100 0 0
0 0 0 5370 44 2079 0 0 0 0 99 203 0 0 100 0 0
0 0 0 5370 44 2079 0 0 0 0 248 446 0 0 100 0 0
したがって、1 GBのソースファイルは、ブロックデバイスを介してCacheに(再)ロードされます。 CPUはわずかに変更されました。
重要なのは次のとおりです:free
がダウンしましたが、キャッシュにのみ使用されていたため、すぐにavailableになりました。
カーネルスラブキャッシュである別の種類のキャッシュもあります。
/proc/meminfo:KReclaimable: 601200 kB
/proc/meminfo:SReclaimable: 601200 kB
/proc/meminfo:SUnreclaim: 50048 kB
/proc/vmstat:nr_slab_reclaimable 150300
/proc/vmstat:nr_slab_unreclaimable 12512
Proc/vmstatファイルではkBではなくページであるため、4を掛けます。SReclaimable
は、man freeで言及されています。
free
とvmstat
、vmstat -s
とvmstat DELAY COUNT
の後に、それらのフィールドと用語を示します。/ proc/vmstatファイルがあります。多くの追加値が含まれています。
完全を期すために:top
は、プロセスごとのメモリ使用量を示します。しかし、それは別の話です。