问题描述
我在带有某些轻量级服务器应用程序的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参数。
最佳答案
您会注意到”cache”正在消耗其中的一些。
这只是磁盘读/写被缓存,您基本上可以假定它是免费的,因为一旦有更重要的需求,它将被转储掉。
它使磁盘IO更快。 🙂
目前,我的盒子上有2G的磁盘缓存,可以让一切变得更快。
“free”是不良的内存分析工具。我发现”htop”是一个更加实用的整体系统管理工具,它既提供了内存使用的实用表示形式,又提供了探索过程的实用方式。
像这样,更漂亮:
1 [||||| 5.0%] Tasks: 156 total, 2 running
2 [||| 2.5%] Load average: 0.29 0.30 0.31
Mem[||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 1182/3967MB] Uptime: 5 days, 16:25:36
Swp[|| 37/2000MB]
Mem:3967M used:1182M buffers:0M cache:1952M
(如果您想知道正常运行时间很短。那就是一台笔记本电脑)
许多人可能会提供否定缓存的方法,以使东西不再掉用,但这或多或少毫无意义。最终您将要做的就是降低性能,除非您的程序确实占用大量内存,但是每隔几天仅密集运行一次,这样当它不密集运行时就被换出,并且当它启动时,您就无法等待〜.5秒将其从磁盘交换回内存。
我个人想不出符合这些条件的任何优秀程序。耸耸肩
编写内核的人员或多或少地知道他们在该部门的工作,除非您确定自己知道更多,否则我相信他们的判断。
正如@Paul Betts所说,切换到lighttpd可能会帮助您节省一些时间。取决于您在做什么,总会有一些权衡。
我在vps上使用它。仅具有96M的内存和63M的交换,并且它们仅分别使用26M(无笑话)和35M。那里也有一个数据库在运行。 (Postgres,但并未真正使用)
次佳答案
忽略第一行。重要数字在“-/+缓冲区/缓存”行上。 Linux将清除高速缓存和缓冲区,以便为进程腾出空间。
我的Debian服务器通常在第一行显示2至10 MB的可用空间。第二行显示我有50 MB的可用空间。 (系统上总共有256个内存)
您的电话号码看起来不错。不要清除缓冲区/缓存。您有足够多的可用内存。
现在,如果没有足够的可用内存来缓存,则系统将运行缓慢。如果您开始使用大量交换功能,则在投放网页时会遇到问题。