web-dev-qa-db-ja.com

SunOSおよびLinuxでのメモリ使用量

メモリ使用量に疑問があります。
現在、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)でわかります。それ?

4
klerk

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に関するものです。

8
jlliagre

はい。vmstatと/ proc/meminfoが最適なオプションです。Solarisでは、次のコマンドを使用することもできます。

echo ::memstat | mdb –k

それは本当に遅いです(それはいくつかのより大きなシステムでは最大30分かかる場合があります:))が、メモリ使用量の素晴らしい概要を提供します。

2
b13n1u

「最善の方法」は、必ずしもあなたが示唆するように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と同様に、基本的な質問に答えることができます。

1)空きメモリ

これはmm値です。コマンドfreeはこれを使用して、「合計」から「使用済み」を計算します。合計物理量RAMは上記には表示されていません。-sオプションはいくつかの追加の値を提供します:

]# vmstat -s -Sm |grep total
         8254 m total memory
            0 m total swap

2)スワップ

Vmstatの出力は、6年前のSolarisの例と現在のLinuxの間で大きく異なります。 swpdは興味深いフィールドで、kswapdのスキャンアクティビティを提供します。 siおよびsoフィールドはアクティビティを示します。適切な遅延とカウントを選択することで、何が起こっているかを正確に確認できます。スワップのサイズと使用/空きはfree(および/ proc/meminfo)にあります。

3)キャッシュ( "pagecache"、...)

これは、詳細が複雑になるところです。 vmstat -abuffおよび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で言及されています。

4)詳細

freevmstatvmstat -svmstat DELAY COUNTの後に、それらのフィールドと用語を示します。/ proc/vmstatファイルがあります。多くの追加値が含まれています。


完全を期すために:topは、プロセスごとのメモリ使用量を示します。しかし、それは別の話です。

0
rastafile