質問: 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: apeace@pts/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が最終的にスワップメモリを使用し始めることです。これは、ディスクキャッシュでは実行されません。では、このすべてのメモリを何が使用しているかをどこで確認できますか?
回答: 本当の問題は、スワップファイルが大きいために再起動する必要があるということです。私の知る限り、カーネルのメモリが不足している場合、2つの選択肢があります。 スワップアウト 「キャッシュ」の一部を食べ尽くします(もちろん、キャッシュされたデータが再度要求されることを期待して、それは蓄えられてきました) swappiness で遊んで、この選択に影響を与えようとしましたか?低い値(20?)に設定すると、改善に役立つ場合があります。デフォルトは60です(これはスワップアウトを優先する傾向があります)。繰り返しになりますが、あなたは管理者であり、私は通常のユーザーであり、おそらくあなたはすでにそれを試したことがあるでしょう。