我有一个运行 Ubuntu 11.04 服务器的 VPS,大约每周我必须重新启动它,因为(我认为)它内存不足。
它有 256MB 的可用 RAM,我曾尝试配置 Apache 以在较少的 RAM 占用下运行,但无济于事。
您能建议我下一步该怎么做吗?我猜某个地方应该有一份日志,可以告诉我发生了什么事以及何时发生的,我在哪里可以找到它?
编辑:
我认为内存不足,因为我记得通过串行控制台登录时看到错误消息(当它崩溃时,我无法使用 SSH 等)。我不记得确切的消息,但它说了无法创建 apache 进程 - 杀死 PID 之类的东西(抱歉说得这么模糊!)。
top
这是...的输出。
top - 09:42:40 up 16:10, 1 user, load average: 0.01, 0.11, 0.12
Tasks: 78 total, 1 running, 77 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.0%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 244284k total, 230528k used, 13756k free, 3348k buffers
Swap: 262140k total, 191868k used, 70272k free, 63008k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1079 www-data 20 0 322m 26m 276 S 0.0 11.1 0:02.78 apache2
1072 www-data 20 0 260m 26m 192 S 0.0 10.9 0:02.49 apache2
877 www-data 20 0 255m 25m 140 S 0.0 10.6 0:02.89 apache2
872 www-data 20 0 249m 22m 200 S 0.0 9.6 0:02.93 apache2
875 www-data 20 0 263m 10m 132 S 0.0 4.4 0:03.53 apache2
1141 www-data 20 0 267m 9.8m 172 S 0.0 4.1 0:02.81 apache2
451 mysql 20 0 241m 2296 68 S 0.0 0.9 0:21.08 mysqld
923 www-data 20 0 263m 2188 44 S 0.0 0.9 0:03.10 apache2
1865 root 20 0 18232 2088 1380 S 0.0 0.9 0:00.05 bash
924 www-data 20 0 252m 2012 256 S 0.0 0.8 0:02.90 apache2
1852 root 20 0 93524 1940 980 S 0.0 0.8 0:00.11 sshd
1077 www-data 20 0 252m 1824 128 S 0.0 0.7 0:01.58 apache2
1171 www-data 20 0 228m 1640 216 S 0.0 0.7 0:01.68 apache2
833 root 20 0 207m 1432 268 S 0.0 0.6 0:02.19 apache2
2053 root 20 0 19352 1268 948 R 0.3 0.5 0:00.02 top
1805 postfix 20 0 39428 1160 708 S 0.0 0.5 0:00.01 pickup
1 root 20 0 23980 808 304 S 0.0 0.3 0:00.27 init
397 syslog 20 0 54452 600 460 S 0.0 0.2 0:00.27 rsyslogd
390 root 20 0 49464 436 260 S 0.0 0.2 0:00.01 sshd
934 postfix 20 0 41944 380 232 S 0.0 0.2 0:00.05 tlsmgr
638 root 20 0 37364 372 272 S 0.0 0.2 0:00.22 master
801 proftpd 20 0 98.5m 328 228 S 0.0 0.1 0:00.38 proftpd
646 postfix 20 0 39592 300 236 S 0.0 0.1 0:00.06 qmgr
437 root 20 0 18928 280 196 S 0.0 0.1 0:00.16 cron
244 root 18 -2 21268 152 148 S 0.0 0.1 0:00.00 udevd
421 root 20 0 6196 136 132 S 0.0 0.1 0:00.00 getty
422 root 20 0 6196 136 132 S 0.0 0.1 0:00.00 getty
426 root 20 0 6196 136 132 S 0.0 0.1 0:00.00 getty
428 root 20 0 6196 136 132 S 0.0 0.1 0:00.00 getty
431 root 20 0 6196 136 132 S 0.0 0.1 0:00.00 getty
864 root 20 0 6196 136 132 S 0.0 0.1 0:00.00 getty
866 root 20 0 6196 136 132 S 0.0 0.1 0:00.00 getty
198 root 16 -4 21280 124 120 S 0.0 0.1 0:00.03 udevd
246 root 18 -2 21144 116 112 S 0.0 0.0 0:00.00 udevd
541 memcache 20 0 63008 80 80 S 0.0 0.0 0:02.08 memcached
727 root 20 0 54764 80 76 S 0.0 0.0 0:00.00 saslauthd
438 daemon 20 0 16728 64 64 S 0.0 0.0 0:00.00 atd
316 root 20 0 15004 4 0 S 0.0 0.0 0:00.01 upstart-socket-
728 root 20 0 54764 4 0 S 0.0 0.0 0:00.00 saslauthd
729 root 20 0 54764 4 0 S 0.0 0.0 0:00.00 saslauthd
730 root 20 0 54764 4 0 S 0.0 0.0 0:00.00 saslauthd
731 root 20 0 54764 4 0 S 0.0 0.0 0:00.00 saslauthd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.76 ksoftirqd/0
4 root 20 0 0 0 0 S 0.0 0.0 0:01.24 kworker/0:0
5 root 20 0 0 0 0 S 0.0 0.0 0:00.16 kworker/u:0
6 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
7 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset
8 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
9 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xenwatch
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xenbus
12 root 20 0 0 0 0 S 0.0 0.0 0:00.07 sync_supers
目前服务器运行良好 - 只有当我无法访问 FTP 或 MySQL 时我才知道发生了什么事情。
答案1
这取决于您在 Apache 上运行的网站类型。我曾遇到过包含图片库的网站因 512 MB 内存而崩溃的情况。您应该进行测试,设置类似的设置,安装 munin 等绘图工具,然后开始访问您的网站。您可以看到您在哪里产生负载。
如果不是这样,但你看到一个一直呈指数增长的图表,那么可能存在内存泄漏。
答案2
如果内存不足,您将在 /var/log/messages 中看到 OOM killer 消息。事件发生后检查该日志。
至于是什么占用了内存,如果没有更多关于您设置的详细信息,就很难说。您可以随时运行,然后top
按内存使用情况排序,以快速查看发生了什么。