it-swarm-ja.com

Linuxボックスでのメモリ使用量のソースの検出

256mb RAM Ubuntu 10.04.1LTSを実行している)のおもちゃのLinuxボックスがあります。free -mの出力は次のとおりです。

             total       used       free     shared    buffers     cached
Mem:           245        122        122          0         19         64
-/+ buffers/cache:         38        206
Swap:          511          0        511

私がこれを間違って読んでいない限り、122mbが使用されており、そのうち84mbだけがディスクキャッシュです。これが私が実行しているすべてのプロセスをメモリ使用量(ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -r)でソートしたものです。

%MEM %CPU   RSS    VSZ COMMAND
 5.0  0.0 12648 633140 node /home/node/main/sites.js
 1.5  0.0  3884 251736 /usr/sbin/console-kit-daemon --no-daemon
 1.3  0.0  3328  77108 sshd: apeace [priv]
 0.9  0.0  2344  19624 -bash
 0.7  0.0  1776  23620 /sbin/init
 0.6  0.0  1624  77108 sshd: [email protected]/0
 0.6  0.0  1544   9940 redis-server /etc/redis/redis.conf
 0.6  0.0  1524  25848 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 103:105
 0.5  0.0  1324 119880 rsyslogd -c4
 0.4  0.0  1084  49308 /usr/sbin/sshd
 0.4  0.0  1028  44376 /usr/sbin/exim4 -bd -q30m
 0.3  0.0   904   6876 ps -eo pmem,pcpu,rss,vsize,args
 0.3  0.0   888  21124 cron
 0.3  0.0   868  23472 dbus-daemon --system --fork
 0.2  0.0   732  19624 -bash
 0.2  0.0   628   6128 /sbin/getty -8 38400 tty1
 0.2  0.0   628  16952 upstart-udev-bridge --daemon
 0.2  0.0   564  16800 udevd --daemon
 0.2  0.0   552  16796 udevd --daemon
 0.2  0.0   548  16796 udevd --daemon
 0.0  0.0     0      0 [xenwatch]
 0.0  0.0     0      0 [xenbus]
 0.0  0.0     0      0 [sync_supers]
 0.0  0.0     0      0 [netns]
 0.0  0.0     0      0 [migration/3]
 0.0  0.0     0      0 [migration/2]
 0.0  0.0     0      0 [migration/1]
 0.0  0.0     0      0 [migration/0]
 0.0  0.0     0      0 [kthreadd]
 0.0  0.0     0      0 [kswapd0]
 0.0  0.0     0      0 [kstriped]
 0.0  0.0     0      0 [ksoftirqd/3]
 0.0  0.0     0      0 [ksoftirqd/2]
 0.0  0.0     0      0 [ksoftirqd/1]
 0.0  0.0     0      0 [ksoftirqd/0]
 0.0  0.0     0      0 [ksnapd]
 0.0  0.0     0      0 [kseriod]
 0.0  0.0     0      0 [kjournald]
 0.0  0.0     0      0 [khvcd]
 0.0  0.0     0      0 [khelper]
 0.0  0.0     0      0 [kblockd/3]
 0.0  0.0     0      0 [kblockd/2]
 0.0  0.0     0      0 [kblockd/1]
 0.0  0.0     0      0 [kblockd/0]
 0.0  0.0     0      0 [flush-202:1]
 0.0  0.0     0      0 [events/3]
 0.0  0.0     0      0 [events/2]
 0.0  0.0     0      0 [events/1]
 0.0  0.0     0      0 [events/0]
 0.0  0.0     0      0 [crypto/3]
 0.0  0.0     0      0 [crypto/2]
 0.0  0.0     0      0 [crypto/1]
 0.0  0.0     0      0 [crypto/0]
 0.0  0.0     0      0 [cpuset]
 0.0  0.0     0      0 [bdi-default]
 0.0  0.0     0      0 [async/mgr]
 0.0  0.0     0      0 [aio/3]
 0.0  0.0     0      0 [aio/2]
 0.0  0.0     0      0 [aio/1]
 0.0  0.0     0      0 [aio/0]

psはプロセスのメモリ使用量を表示するのに最適ではないことはわかっていますが、それは実際に使用されているよりもmoreメモリを報告する傾向があるためです...つまり、どのように使用してもディスクキャッシュを考慮しても、すべてのプロセスを組み合わせて122MB近くを使用するべきではありません。

さらに、メモリ使用量は常に増加しています。 256 MBがいっぱいになるとスワッピングが開始されるため、サーバーを週に1回再起動する必要がありました。これは、ディスクキャッシュだけでは実行されません。犯人を見る方法はないのか!

私はサーバー管理者に不慣れなので、見落としている明らかなことがあれば、それを指摘してください。

念のため、cat /proc/meminfoの出力:

MemTotal:         251140 kB
MemFree:          124604 kB
Buffers:           20536 kB
Cached:            66136 kB
SwapCached:            0 kB
Active:            65004 kB
Inactive:          37576 kB
Active(anon):      15932 kB
Inactive(anon):      164 kB
Active(file):      49072 kB
Inactive(file):    37412 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:        524284 kB
SwapFree:         524284 kB
Dirty:                 8 kB
Writeback:             0 kB
AnonPages:         15916 kB
Mapped:            10668 kB
Shmem:               188 kB
Slab:              18604 kB
SReclaimable:      10088 kB
SUnreclaim:         8516 kB
KernelStack:         536 kB
PageTables:         1444 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      649852 kB
Committed_AS:      64224 kB
VmallocTotal:   34359738367 kB
VmallocUsed:         752 kB
VmallocChunk:   34359737600 kB
DirectMap4k:      262144 kB
DirectMap2M:           0 kB

編集:私は最初にfree -mの意味を誤解していました。しかし、それでも重要なことは、サーバーを再起動しないと、OSが最終的にスワップメモリ​​を使用し始めることです。これは、ディスクキャッシュでは実行されません。では、このすべてのメモリを何が使用しているかをどこで確認できますか?

3
apeace

他の誰もが説明しているように、何もis今は多くのRAMを使用しています。実際に問題が発生しているときに、そのpsコマンドを実行してみてください。

最も可能性が高いのは、Node.js、Redis、またはその他のサービスが適切に構成されておらず、トラフィックが増えるにつれて時間の経過とともにより多くのRAMを使用するか、突然RAMスラッシュドット効果が発生したとき。しかし、何がうまくいかないかを正確に言うことは不可能です後で何も問題がないとき

3
Matt Nordhoff

本当の問題は、スワップファイルが大きいために再起動する必要があるということです。

私の知る限り、カーネルのメモリが不足している場合、2つの選択肢があります。

  1. スワップアウト
  2. 「キャッシュ」の一部を食べ​​尽くします(もちろん、キャッシュされたデータが再度要求されることを期待して、それは蓄えられてきました)

swappiness で遊んで、この選択に影響を与えようとしましたか?

低い値(20?)に設定すると、改善に役立つ場合があります。デフォルトは60です(これはスワップアウトを優先する傾向があります)。

繰り返しになりますが、あなたは管理者であり、私は通常のユーザーであり、おそらくあなたはすでにそれを試したことがあるでしょう。

2
ArjunShankar

それらの一部はバッファ/キャッシュに使用されているため、メモリの空き領域が少なくても問題ありません。スワップにはすべての空き容量があります。ですから、メモリ不足の影響がまだないことを願っています。

バッファ/キャッシュ出力から、206Mはアプリケーションに自由に使用できます。

から近似を取得することもできます

cat/proc/[プロセスID]/maps

(または)

pmap [プロセスID]

pmap -x [プロセスID]

1
superNobody