参见英文答案 >
Why is Linux reporting “free” memory strangely?3个
我在Slicehost虚拟服务器上运行了一个带有一些轻量级服务器应用程序的Ubuntu 8.04 – apache22,svnserve,MysqL和proftpd.唯一严重的服务限制是RAM – 256MB是我付出的代价.
我在Slicehost虚拟服务器上运行了一个带有一些轻量级服务器应用程序的Ubuntu 8.04 – apache22,svnserve,MysqL和proftpd.唯一严重的服务限制是RAM – 256MB是我付出的代价.
我注意到,如果我让系统运行几天/周,则可用RAM的数量会缓慢下降,并且很快就会使用分页文件.例如,在重新启动时,我可能有60%的RAM空闲,第二天它可能是55%等.
total used free shared buffers cached Mem: 256 114 141 0 3 50 -/+ buffers/cache: 61 194 Swap: 511 0 511
如何防止可用内存量下降?
编辑:这是我的ps -aux列出了顶级内存消费者.我遗漏了所有系统进程.我可以看到apache和MysqL最重要的内存使用情况.
USER PID %cpu %MEM VSZ RSS TTY STAT START TIME COMMAND root 1369 0.0 0.3 16844 952 ? S<s 00:10 0:00 /sbin/udevd --daemon syslog 2110 0.0 0.2 12288 748 ? Ss 00:10 0:00 /sbin/syslogd -u syslog root 2131 0.0 0.2 8128 588 ? S 00:10 0:00 /bin/dd bs 1 if /proc/kmsg of /var/run/klogd/kmsg klog 2133 0.0 0.4 4516 1304 ? Ss 00:10 0:00 /sbin/klogd -P /var/run/klogd/kmsg root 2154 0.0 0.4 50904 1152 ? Ss 00:10 0:00 /usr/sbin/sshd root 2211 0.0 0.2 3932 592 ? S 00:10 0:00 /bin/sh /usr/bin/MysqLd_safe MysqL 2253 0.0 8.8 161940 23252 ? Sl 00:10 0:00 /usr/sbin/MysqLd --basedir=/usr --datadir=/var/lib/MysqL --user=MysqL --pid-file=/var/run/mys root 2254 0.0 0.2 3836 604 ? S 00:10 0:00 logger -p daemon.err -t MysqLd_safe -i -t MysqLd proftpd 2340 0.0 0.5 63000 1504 ? Ss 00:10 0:00 proftpd: (accepting connections) root 2356 0.0 0.3 18608 964 ? Ss 00:10 0:00 /usr/sbin/cron root 2384 0.0 0.3 83360 892 ? Ss 00:10 0:00 svnserve -d -r /etc/svn/svn-rep-01 root 2387 0.0 3.5 194628 9220 ? Ss 00:10 0:00 /usr/sbin/apache2 -k start root 2409 0.0 0.2 3852 576 tty1 Ss+ 00:10 0:00 /sbin/getty 38400 tty1 root 2410 0.0 0.5 15252 1444 ? Sl 00:10 0:00 /usr/lib/ruby/gems/1.8/gems/passenger-2.0.2/ext/apache2/ApplicationPoolServerExecutable 0 /us www-data 2411 0.0 3.4 195880 9100 ? S 00:10 0:00 /usr/sbin/apache2 -k start www-data 2412 0.0 7.3 205532 19400 ? S 00:10 0:00 /usr/sbin/apache2 -k start www-data 2413 0.0 3.3 195620 8824 ? S 00:10 0:00 /usr/sbin/apache2 -k start www-data 2414 0.0 3.4 195880 9080 ? S 00:10 0:00 /usr/sbin/apache2 -k start www-data 2415 0.0 3.4 195888 9056 ? S 00:10 0:00 /usr/sbin/apache2 -k start root 2416 0.0 2.4 43448 6512 ? Sl 00:10 0:00 Passenger spawn server www-data 2437 0.0 7.7 208116 20248 ? S 00:48 0:00 /usr/sbin/apache2 -k start www-data 2519 0.0 3.3 195644 8820 ? S 02:12 0:00 /usr/sbin/apache2 -k start root 3026 0.0 1.1 67960 2892 ? Ss 20:53 0:00 sshd: dv [priv] dv 3028 0.0 0.6 67960 1700 ? S 20:53 0:00 sshd: dv@pts/0 dv 3029 0.1 0.8 19392 2304 pts/0 Ss 20:53 0:00 -bash dv 3041 0.0 0.4 15056 1092 pts/0 R+ 20:54 0:00 ps -aux
总的来说,我要感谢大家的深思熟虑的答案,选择最好的答案真的很难,因为每个人都有一些有用的信息.
我将研究转向lighthttpd或Nginx,或者至少减少apache的MaxClients参数.
解决方法
你会注意到其中一些是由“缓存”消耗的.
这只是缓存的磁盘读/写,你基本上可以假设它是免费的,因为一旦更重要的东西需要它就会被抛弃.
它使磁盘IO更快.