Php

具有 512 保證 RAM 的 CentOS VPS 上的記憶體使用率異常高

  • April 8, 2012

我正在開發一個用 PHP 編寫的中型 Web 應用程序,該應用程序在具有 512mb ram 的 VPS 上執行。webapp還沒有正式上線,所以沒有太多流量,只有我和其他幾個人在做。

在 4-5 個其他小型靜態站點中,這台機器上還託管了另一個稍小的 webapp。

我們正在執行 Centos 5 32 位和 cPanel/WHM。

這是執行的結果ps aux,如您所見,它沒有使用 100% 的 RAM。但是,在 hypanel 概覽中,它始終顯示為使用 500MB 左右的記憶體,僅用於執行 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 崩潰之一的日誌。這令人費解。

free -m 表示應該有足夠的空閒 RAM。當一個程序因為可用的 RAM 太少而被殺死時,這被稱為“oom kill”m,其中“oom”代表o ut of m emory 。

當這種情況發生時,您甚至可以告訴 Linux 以什麼順序殺死哪些程序。

除此之外,MySQL 在我們的系統上保留了大量的 RAM,這是正常的。您可以通過編輯 my.cnf 文件並調整 MySQL 配置文件的各種變數來減小該值。

此外,您應該努力優化 Apache 以保持較低的 RAM 消耗。Apache 和 PHP 是否消耗大量 RAM 很大程度上取決於您的 PHP 應用程序。

此外,您應該創建一個 SWAP 文件,以在記憶體已滿時為您提供幫助。

引用自:https://serverfault.com/questions/377517