我正在开发一个用 PHP 编写的中型 Web 应用程序,该应用程序运行在具有 512MB RAM 的 VPS 上。该 Web 应用程序尚未正式启动,因此流量不大,只有我和其他几个人在开发它。
这台机器上还托管另一个稍微小一点的 Web 应用程序,以及其他 4-5 个小型静态站点。
我们正在运行 Centos 5 32 位和 cPanel/WHM。
这是运行的结果ps aux
,如您所见,它没有使用 100% 的 RAM。然而,在 hypanel 概览中,它始终显示使用大约 500MB 的 RAM,仅用于运行 apache、mysql 以及内存占用最低的邮件服务器、ftp 服务器等版本。
-bash-3.2# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2156 664 ? Ss 12:08 0:00 init [3]
root 1123 0.0 0.0 2260 548 ? S<s 12:08 0:00 /sbin/udevd -d
root 1462 0.0 0.0 1812 568 ? Ss 12:08 0:00 syslogd -m 0
named 1496 0.0 0.0 3808 820 ? Ss 12:08 0:00 nsd
named 1497 0.0 0.0 10672 756 ? S 12:08 0:00 nsd
named 1499 0.0 0.0 3880 584 ? S 12:08 0:00 nsd
root 1514 0.0 0.1 7240 1064 ? Ss 12:08 0:00 /usr/sbin/sshd
root 1522 0.0 0.0 2832 832 ? Ss 12:08 0:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
root 1534 0.0 0.1 3712 1328 ? S 12:08 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql -
mysql 1667 0.0 2.9 225680 30884 ? Sl 12:08 0:00 /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql -
mailnull 1766 0.0 0.1 9352 1100 ? Ss 12:08 0:00 /usr/sbin/exim -bd -q60m
root 1797 0.0 0.0 2156 708 ? Ss 12:08 0:00 /usr/sbin/dovecot
root 1798 0.0 0.0 2632 1012 ? S 12:08 0:00 dovecot-auth
root 1816 0.0 3.0 38580 32456 ? Ss 12:08 0:01 /usr/local/bin/spamd -d --allowed-ips=127.0.0.1 --pidfi
root 1839 0.0 1.6 63200 17496 ? Ss 12:08 0:00 /usr/local/apache/bin/httpd -k start -DSSL
root 1846 0.0 0.1 5416 1468 ? Ss 12:08 0:00 pure-ftpd (SERVER)
root 1848 0.0 0.1 6212 1244 ? S 12:08 0:00 /usr/sbin/pure-authd -s /var/run/ftpd.sock -r /usr/sbin
root 1856 0.0 0.1 4492 1112 ? Ss 12:08 0:00 crond
root 1864 0.0 0.0 2356 428 ? Ss 12:08 0:00 /usr/sbin/atd
dovecot 1927 0.0 0.1 5196 1952 ? S 12:08 0:00 pop3-login
dovecot 1928 0.0 0.1 5196 1948 ? S 12:08 0:00 pop3-login
dovecot 1929 0.0 0.1 5316 2012 ? S 12:08 0:00 imap-login
dovecot 1930 0.0 0.2 5416 2228 ? S 12:08 0:00 imap-login
root 1939 0.0 0.1 3936 1964 ? S 12:08 0:00 cPhulkd - processor
root 1963 0.0 0.8 15876 8564 ? S 12:08 0:00 cpsrvd (SSL) - waiting for connections
root 1966 0.0 0.7 15172 7748 ? S 12:08 0:00 cpdavd - accepting connections on 2077 and 2078
root 1990 0.0 0.2 5008 3136 ? S 12:08 0:00 queueprocd - wait to process a task
root 2017 0.0 2.9 38580 31020 ? S 12:08 0:00 spamd child
root 2018 0.0 0.5 8904 5636 ? S 12:08 0:00 /usr/bin/perl /usr/local/cpanel/bin/leechprotect
nobody 2021 0.0 3.2 66512 33724 ? S 12:08 0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody 2022 0.0 3.1 67812 33024 ? S 12:08 0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody 2024 0.0 1.9 64364 20680 ? S 12:08 0:00 /usr/local/apache/bin/httpd -k start -DSSL
root 2027 0.0 0.4 9000 4540 ? S 12:08 0:00 tailwatchd
root 2032 0.0 0.1 4176 1836 ? SN 12:08 0:00 cpanellogd - sleeping for logs
nobody 3096 0.0 1.9 64572 20264 ? S 12:09 0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody 3097 0.0 2.8 66008 30136 ? S 12:09 0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody 3098 0.0 2.8 65704 29752 ? S 12:09 0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody 3099 0.0 3.1 67260 32816 ? S 12:09 0:00 /usr/local/apache/bin/httpd -k start -DSSL
andrei 3448 0.0 0.1 3204 1632 ? S 12:50 0:00 imap
nobody 3537 0.0 1.9 64308 20108 ? S 13:01 0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody 3614 0.0 1.9 64576 20628 ? S 13:10 0:00 /usr/local/apache/bin/httpd -k start -DSSL
nobody 3615 0.0 1.3 63200 14672 ? S 13:10 0:00 /usr/local/apache/bin/httpd -k start -DSSL
root 3626 0.0 0.2 10232 2964 ? Rs 13:14 0:00 sshd: root@pts/0
root 3648 0.0 0.1 3844 1600 pts/0 Ss 13:14 0:00 -bash
root 3826 0.0 0.0 2532 908 pts/0 R+ 13:21 0:00 ps aux
最近,在未对配置进行任何重大更改的情况下,内存使用量开始达到峰值并超过 512,导致虚拟服务器杀死 apache,从而基本上在此过程中杀死我们的网站。
结果如下free -m
:
-bash-3.2# free -m
total used free shared buffers cached
Mem: 1024 381 642 0 0 0
-/+ buffers/cache: 381 642
Swap: 0 0 0
另请注意:
当内存使用量达到 400/512mb 时,Apache 似乎会被终止。以前从未发生过这种情况。这很奇怪。
您是否知道这是否正常并且应该获取更多资源?我不这么认为,因为目前在线数据或流量还不是太多。
编辑2:
[Sat Apr 07 18:04:21 2012] [notice] Graceful restart requested, doing restart
[Sat Apr 07 18:04:22 2012] [notice] seg fault or similar nasty error detected in the parent process
(after manual restart)
[Sat Apr 07 18:28:51 2012] [notice] suEXEC mechanism enabled (wrapper: /usr/local/apache/bin/suexec)
etc.
这是 Apache 一次崩溃的日志。这让人很困惑。
答案1
free -m 显示应该有足够的可用 RAM。当某个进程由于可用 RAM 太少而被终止时,这称为“oom kill”,其中“oom”代表o乌特oF米埃默里。
您甚至可以告诉 Linux 当这种情况发生时按什么顺序终止哪些进程。
除此之外,MySQL 在我们的系统上保留了大量的 RAM,这是正常的。您可以通过编辑 my.cnf 文件并调整 MySQL 配置文件的各种变量来减少该值。
此外,您还应该努力优化 Apache,以保持较低的 RAM 消耗。Apache 和 PHP 是否消耗大量 RAM 在很大程度上取决于您的 PHP 应用程序。
此外,您还应该创建一个 SWAP 文件,以便在内存已满时为您提供帮助。
答案2
apache 日志显示正常重启,这可能是由于日志轮换造成的:每天的时间都是同一时间吗?
然后重新启动会遇到段错误或类似问题,这可能是由于库不匹配造成的。PHP 是独立于 apache 安装的吗?这个问题是否仅在 cpanel 升级后才出现(可能升级了某个库)?
尝试停止并启动 apache:这个错误总是发生吗?如果禁用 php 或其他模块会怎样?
如果它与您首先询问的内存使用无关,您应该考虑将其作为一个新问题。