当前位置: 首页>>技术教程>>正文


linux – 释放Ubuntu 8.04服务器上的内存(RAM)

, ,

问题描述

我在带有某些轻量级服务器应用程序的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个内存)

您的电话号码看起来不错。不要清除缓冲区/缓存。您有足够多的可用内存。

现在,如果没有足够的可用内存来缓存,则系统将运行缓慢。如果您开始使用大量交换功能,则在投放网页时会遇到问题。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8475.html,未经允许,请勿转载。