メモリ使用量を監視するにはどうすればよいですか?


265

私が使用しているtop時点でのメモリ使用量を確認します。しかし、メモリの使用状況を一定期間監視したいと思います。たとえば、監視を開始してからいくつかのコマンドを実行し、最後に監視を停止して、期間中に使用されたメモリ量を確認します。

Ubuntu Serverでこれを行うにはどうすればよいですか?

5秒ごとにcronジョブを開始し、テキストファイルに現在のメモリ使用量を記録するコマンドを呼び出すことができると思います。しかし、現在のメモリ使用量をテキストファイルに簡単に記録できる形式で取得するには、どのコマンドを使用する必要がありますか?

回答:


322

以前の回答を組み合わせることをお勧めします

watch -n 5 free -m

Linuxは、追加のメモリを使用してハードドライブブロックキャッシュすることを好みます。だから、無料だけを見たくないMem。行のfree列を見たいと思います-/+ buffers/cache:。これは、アプリケーションで使用可能なメモリ量を示します。だから私は走っfree -mてこれを得た:

             total       used       free     shared    buffers     cached
Mem:          3699       2896        802          0        247       1120
-/+ buffers/cache:       1528       2170
Swap:         1905         62       1843

私は1528 MBを使用していて、2170 MBが無料であることを知っています。

注:このwatchサイクルを停止するには、Ctrl+を押しCます。


1
ありがとう、それは有益です。しかし、最初に使用する列で2896、次に1528バッファに使用する列では、これは使用しているという意味ではありません2896 + 1528か?
ジョナス

8
Mem: used合計使用メモリです。-/+ buffers/cache: used合計使用メモリからバッファとキャッシュを差し引いたものです。出力がおかしいように見えますが、ここでは算術演算は必要ありません。-/ + buffers / cache行でused / freeを探しているだけです。
ジャスティンフォース

6
-hオプションの方がずっといいです
frmdstryr

1
@frmdstryr良い点!-h /-しかし、私がこれを書いたときには人間は存在していませんでした。gitlab.com/procps-ng/procps/commit/...
ジャスティン・フォース

3
@ cbradsh1あなただけ行うことができfree -h、例えばwatch -n 5 free -h、「人間が読める」出力、例えばを取得する2.1G代わりに、2170出力に。
ジャスティンフォース

213

htop最善の解決策だと思います。

  • sudo apt-get install htop

これにより、どのプログラムがほとんどのRAMを使用しているかがわかります。必要に応じて簡単に終了できます。これがスクリーンショットです!


2
htopそれは、それがより「グラフィカル」で、おそらく読みやすいからですfree
mjswensen

1
出力がわかりません。あるRESMBで、そのアプリケーションが使用するメモリは?何SHRですか?
faizal

1
@faizal:仮想メモリ、予約メモリ、共有メモリ。
ウィッチクラフト

1
htop「一定期間のメモリ使用量」をどのように表示しますか?
天使

htop -s M_SHARE htop -s TIME-
戸町

40

あなたは、実行中の各プロセスが使用するメモリの素敵な内訳を探しているならば、私はチェックアウトをお勧めかもしれませんps_mem.py(見つかっここ pixelbeat.orgでは)。

上記のコメントで、freeから1行のスナップショットが欲しいと言っていましたが、他の人がこれが役立つと思うかもしれません。

出力例:

user@system:~$ sudo ps_mem.py
[sudo] password for user:
 Private  +   Shared  =  RAM used       Program

  4.0 KiB +   7.5 KiB =  11.5 KiB       logger
  4.0 KiB +   8.0 KiB =  12.0 KiB       mysqld_safe
  4.0 KiB +  10.0 KiB =  14.0 KiB       getty
  4.0 KiB +  42.0 KiB =  46.0 KiB       saslauthd (5)
 48.0 KiB +  13.0 KiB =  61.0 KiB       init
 56.0 KiB +  27.5 KiB =  83.5 KiB       memcached
 84.0 KiB +  26.5 KiB = 110.5 KiB       cron
120.0 KiB +  50.0 KiB = 170.0 KiB       master
204.0 KiB + 107.5 KiB = 311.5 KiB       qmgr
396.0 KiB +  94.0 KiB = 490.0 KiB       tlsmgr
460.0 KiB +  65.0 KiB = 525.0 KiB       rsyslogd
384.0 KiB + 171.0 KiB = 555.0 KiB       sudo
476.0 KiB +  83.0 KiB = 559.0 KiB       monit
568.0 KiB +  60.0 KiB = 628.0 KiB       freshclam
552.0 KiB + 259.5 KiB = 811.5 KiB       pickup
  1.1 MiB +  80.0 KiB =   1.2 MiB       bash
  1.4 MiB + 308.5 KiB =   1.7 MiB       fail2ban-server
888.0 KiB +   1.0 MiB =   1.9 MiB       sshd (3)
  1.9 MiB +  32.5 KiB =   1.9 MiB       munin-node
 13.1 MiB +  86.0 KiB =  13.2 MiB       mysqld
147.4 MiB +  36.5 MiB = 183.9 MiB       apache2 (7)
---------------------------------
                        208.1 MiB
=================================

 Private  +   Shared  =  RAM used       Program

私が気に入らない唯一の部分は、スクリプトがルート特権を必要とするという事実です。なぜそうなのかを正確に知る機会はまだありません。


メモリがスレッド間で共有されているのだろうか。プロセス間で共有されていますか?少なくともWindowsでは...
トーマスウェラー14

したがって、この場合、共有メモリとは、共有ライブラリの形で複数のプロセスによってマップされるページを指します。さらに、マルチスレッドアプリケーションのコンテキスト内では、プロセスのすべてのスレッドがプロセスメモリ空間全体にアクセスできます。
ジェイソンモック

4
PyPI(pip install ps_mem)およびGitHubで利用できるようになりました
レイフアルネストセット

@ThomasWeller:はい、スレッドは常にメモリを共有しますが、プロセスは特定の条件下でメモリの一部またはすべてを共有する場合があります。
レイフアルネストセット

これにはgnome-system-monitor

24

freeコマンドを使用します。たとえば、これは次の出力ですfree -m

             total       used       free     shared    buffers     cached
Mem:          2012       1666        345          0        101        616
-/+ buffers/cache:        947       1064
Swap:         7624          0       7624

free -m | grep /+ 2行目のみを返します。

-/+ buffers/cache:        947       1064

よろしくお願いします。これ947は、メモリ使用量からバッファとキャッシュに使用されるメモリを引いたものですか?
ジョナス

11

時計のコマンドが有用である可能性があります。watch -n 5 free5秒ごとに更新してメモリ使用量を監視してください。


おかげで、これは素晴らしかったです!ただし、メモリ使用量を1行で取得したいので、テキストファイルに簡単に記録できます。
ジョナス

8

を使用して実行できますcat /proc/meminfo

MemTotal:        4039160 kB
MemFree:          309796 kB
MemAvailable:    3001052 kB
Buffers:          345636 kB
Cached:          2341288 kB
SwapCached:            8 kB
Active:          1725160 kB
Inactive:        1551652 kB
Active(anon):     538404 kB
Inactive(anon):    70076 kB
Active(file):    1186756 kB
Inactive(file):  1481576 kB
Unevictable:          32 kB
Mlocked:              32 kB
SwapTotal:       4194300 kB
SwapFree:        4194044 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        589988 kB
Mapped:           255972 kB
Shmem:             18596 kB
Slab:             374888 kB
SReclaimable:     310496 kB
SUnreclaim:        64392 kB
KernelStack:        6976 kB
PageTables:        26452 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     6213880 kB
Committed_AS:    3589736 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      147392 kB
DirectMap2M:     4046848 kB

1
このコマンドの前にウォッチを追加すると、すばらしいものになります!ようにwatch cat /proc/meminfo
長老ギーク

このfreeコマンドは、情報を取得/proc/meminfoしてコンパクトな方法で表示します。free -h人間が読める出力に使用します。
LoMaPh

4

RAM全体の使用状況を視覚的に監視するために、Byobuを使用すると、端末の右下隅でメモリ使用量が維持され、端末セッション中に実行されます。

スクリーンショットからわかるように、私の仮想マシンには1h3mのアップタイム、0.00の負荷、2.8GHz(仮想)プロセッサ、およびシステムで利用可能な994MB(21%)のRAMがあります。

使用中のBy風


3

単一行のソリューションと出力:

free -m | grep "Mem:"

予想される出力の例を次に示します。

Mem:           3944         652         302          18        2990        2930

1

私はCactiを使用します。これにより、メモリ使用量などが一定期間にわたってグラフ化され、Webブラウザを使用して使用量を確認できます。


1

メモリ使用量の監視

メモリ使用量を監視するための優れた方法としてCactiについて言及した前述の投稿の1つと、より一致しています。ただし、サボテンは主流ではもはや人気がないようであるため、Graphiteと呼ばれる代替のグラフ作成アプリケーションがあります。

Graphiteは、ubuntuサーバーに比較的簡単にインストールできます。インストール手順については、このリンク確認してください

グラファイトがインストールされた後、任意の間隔でメモリメトリックを送信できます。5秒ごと、1分ごと、1時間ごとなど。

メモリメトリックをグラフ化するには、以前の投稿で既に提案したように、システムツールを使用して必要なメモリ情報を収集する独自のスクリプトを作成できます。または、事前に作成されたsnmpプラグインを使用して、すべての作業を実行できます。

独自のメモリスクリプトを作成する場合は、使用済みメモリを計算する際にバッファメモリとキャッシュメモリを考慮に入れることが賢明です。そうしないと、誤ったデータを収集してしまいます。

代わりに必要なすべての計算をすでに実行しているsnmpプラグインを利用したい場合、ここで非常にうまく機能するものへのリンクがあります:checkMemoryviaSNMP

SNMPの長所:

監視するすべてのリモートノードにsnmpをインストールしています。これにより、リモートノードにプラグインをコピーしたり配置したりすることなく、1つの中央サーバーからすべてのシステムを監視できます。

SNMPの短所:

メモリを監視する各リモートノードにsnmpエージェントがインストールされていることを確認する必要があります。ただし、このインストールは1回限りです。ご使用の環境でシェフやパペットなどの自動化ツールまたは同様のツールを使用している場合、これはまったく問題ありません。

リモートノード上のSNMPエージェントの構成:

snmpエージェントをインストールしたら、単に/etc/snmpd/snmpd.confファイルをviにして、次の行を追加します。

rocommunity  (specify-a-community-string-aka-password-here)

次に、次を使用してsnmpdエージェントを再起動します。

/etc/init.d/snmpd restart

次に、他のすべてのサーバーを監視する代わりに使用する中央サーバーで、次のコマンドを実行できます。

$ time ./checkMemoryviaSNMP -v2 public gearman001.phs.blah.com 30 90 graphite,10.10.10.10,2003,typical
WARNING: Used = [ 3.26154 GB ], Installed = [ 5.71509 GB ], PCT.Used = [ 57.069% ], Available.Memory = [ 2.00291 GB ]. Buffer = [ 137.594 MB ], Cached = [ 1.3849 GB ]. Thresholds: [ W=(30%) / C=(90%) ].  System Information = [ Linux gearman001.phs.blah.com 2.6.32-504.30.3.el6.x86_64 #1 SMP Thu Jul 9 15:20:47 EDT 2015 x86_64 ].

real    0m0.23s
user    0m0.03s
sys     0m0.02s
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.