サーバーのメモリが不足し、プロセスの強制終了が開始されるポイントに到達すると、アプリケーションを使用してトップが消費するPSSメモリの合計(常駐メモリから使用される実際のメモリ)がシステムのメモリの合計よりも少なくなります。この余分なメモリ使用量が発生している場所を見つけますか?以下のアイデアは、meminfo、smem、free -m、からの出力です。
どんな提案も本当にありがたいですか?
cat /proc/meminfo
MemTotal: 5976008 kB
MemFree: 138768 kB
Buffers: 2292 kB
Cached: 57444 kB
SwapCached: 85980 kB
Active: 324332 kB
Inactive: 121836 kB
Active(anon): 309264 kB
Inactive(anon): 77992 kB
Active(file): 15068 kB
Inactive(file): 43844 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 8159224 kB
SwapFree: 6836184 kB
Dirty: 572 kB
Writeback: 0 kB
AnonPages: 372160 kB
Mapped: 13976 kB
Shmem: 472 kB
Slab: 328216 kB
SReclaimable: 92544 kB
SUnreclaim: 235672 kB
KernelStack: 4824 kB
PageTables: 14732 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 8159224 kB
Committed_AS: 4940480 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 102424 kB
VmallocChunk: 34359584392 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 6384 kB
DirectMap2M: 2080768 kB
DirectMap1G: 4194304 kB
SMEM usage:
30971 root python /usr/local/scripts/s 2432 660 860 1204
23296 root /usr/bin/spamd -d -c -m5 -H 58296 1460 1564 1868
2763 ufc csrv -c /home/ufc/ufclient/ 116000 12768 12792 13084
55819 root /usr/bin/python /bin/smem 0 22356 22988 24364
2101 root clamd 189228 41224 41280 41700
32914 root /opt/safesquid/safesquid/sa 831120 5808 138619 271844
[root@server sysadmin]# free -m
total used free shared buffers cached
Mem: 5835 5695 140 0 1 19
-/+ buffers/cache: 5674 161
Swap: 7967 1315 6652
更新:
サーバーは正常に戻りましたが、メモリ使用量は指数関数的であり、7時間後にアプリケーションが強制終了されるまで増加し続けます
Out of memory: Kill process 14585 (safesquid) score 81 or sacrifice child
Killed process 16141, UID 500, (python) total-vm:79284kB, anon-rss:2656kB, file-rss:680kB
top - 21:58:16 up 16 days, 11:10, 1 user, load average: 0.46, 0.74,
0.78 Tasks: 243 total, 1 running, 242 sleeping, 0 stopped, 0 zombie Cpu(s): 5.7%us, 5.8%sy, 0.0%ni, 88.3%id, 0.1%wa, 0.0%hi,
0.1%si, 0.0%st Mem: 5976008k total, 5830648k used, 145360k free, 35724k buffers Swap: 8159224k total, 445384k used, 7713840k free, 3684540k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4960 ssquid 20 0 1000m 534m 3068 S 20.6 9.2 90:19.40 safesquid
2101 clamav 20 0 4153m 85m 1672 S 2.0 1.5 536:42.26 clamd
23333 root 20 0 244m 50m 1940 S 0.0 0.9 2:10.84 spamd
2763 ufc 20 0 1628m 32m 25m S 1.0 0.5 399:12.74 csrv
61303 root 20 0 97876 4380 3304 S 0.0 0.1 0:00.28 sshd
23296 root 20 0 227m 3424 928 S 0.0 0.1 0:07.87 spamd
ボックスはrulespace、clam、safesquidプロキシを実行しています。
メモリグラフでは、アプリケーションが強制終了され、safesquidサービスを再起動したときに大きな低下が見られます...
@David Schwartz:カーネルのOOMキラーがプロセスを強制終了すると確信しています。そして、はい、どのプロセスが強制終了されているかを知る必要があります。
強制終了されているプロセスが何らかの形で誤動作している(またはクラッシュしている)と確信しています。その結果、使用可能なメモリのほとんどを使い果たしており、その時点でカーネルのOOMキラーがプロセスを終了することを決定します。たとえば、この種の動作は、mozilla/firefoxが現在よりもメモリリークを起こしやすい10年ほど前に(私の場合は)横行していました。それはどんどん使用していき、突然消えてしまいました...あなたはその考えを理解します。
さて、ここに内訳があります:
強制終了されるプロセスが何であれ、おそらくメモリリークが発生します。あなたのグラフは確かにそれをケースのように見せます。黄色よりも紫色の線に焦点を合わせる必要があります。 黄色は実際には空きメモリでもあります 。
合計メモリを使用していないプロセスについては、マシンにどれだけの容量があるかを教えていないため、何を言っているのか不明です。ただし、カーネルでは常に一定量のメモリが使用され、 ページテーブル などが使用されるため、アプリケーションはハードウェアメモリ全体を使用できません。
あなたの場合、合計メモリショーは5.7Gであり、おそらく6Gがインストールされていることを意味します。 meminfoの非常に徹底的な説明 はあなたを助けるかもしれません、しかし要約はあなたの大きな低下は修正されるか少なくとも定期的に再起動される必要があるメモリリークアプリから来るということです。