Linux

即使站點的訪問者很少,交換記憶體也會耗盡伺服器

  • July 12, 2014

我在 32 位 VPS 主機上執行 CentOs 6.5。它只執行 php-fpm、nginx 和 mysql。

我有一個平均每天有 20 名訪問者的網站,但我最近從我的主機提供商那裡收到了這條消息。

這是一個自動通知,通知您名為“name.here”的 VPS 由於交換而在過去一個小時內嚴重減慢了速度。

交換是記憶體不足的結果。如果 VPS 的記憶體被完全填滿,則將部分記憶體寫入硬碟以防止伺服器崩潰。因為硬碟比記憶體慢很多倍,所以伺服器性能會嚴重下降。

我試圖理解這一點。一個只有 20 次訪問的小內容網站怎麼會消耗這麼多記憶體呢?

我不確定這是來自 php、centos …還是其他。但是我在這裡有一些輸出,有人可能會確定問題的核心。

[root@site.name~]# free -m
            total       used       free     shared    buffers     cached
Mem:           498        489          9          0          1         19
-/+ buffers/cache:        469         29
Swap:         1022        180        842

top - 18:33:36 up 65 days, 1 min,  1 user,  load average: 0.00, 0.02, 0.00
Tasks: 109 total,   1 running, 108 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.0%us,  0.3%sy,  0.0%ni, 98.3%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    510868k total,   503092k used,     7776k free,     1904k buffers
Swap:  1047544k total,   185096k used,   862448k free,    20956k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
7435 mysql     20   0  352m 7752 2852 S  1.0  1.5  56:23.52 mysqld
17806 nginx     20   0 50088  12m 2640 S  0.7  2.5  18:13.65 php-fpm
 984 root      20   0  8940  372  272 S  0.3  0.1   0:29.68 sshd
3148 root      20   0  2692 1128  880 R  0.3  0.2   0:00.15 top
   1 root      20   0  2900  416  292 S  0.0  0.1   0:07.29 init

這裡可能是什麼問題?有什麼解決辦法嗎?


更新

@Michael Hampton輸出top>Shift M

top - 14:34:29 up 66 days, 20:02,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 110 total,   1 running, 109 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    510868k total,   504528k used,     6340k free,     3084k buffers
Swap:  1047544k total,   179784k used,   867760k free,    19532k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
19041 nginx     20   0 58672  22m 2660 S  0.0  4.5  24:00.18 php-fpm
17805 nginx     20   0 58672  22m 2688 S  0.0  4.5  16:46.40 php-fpm
19040 nginx     20   0 58776  17m 2684 S  0.0  3.6  24:27.53 php-fpm
19046 nginx     20   0 53412  17m 2692 S  0.0  3.5  22:51.54 php-fpm
17796 nginx     20   0 53604  16m 2648 S  0.0  3.3  15:14.62 php-fpm
19042 nginx     20   0 52144  15m 2660 S  0.0  3.0  22:16.40 php-fpm
17186 nginx     20   0 52208  15m 2656 S  0.0  3.0  25:22.13 php-fpm
24580 nginx     20   0 50600  14m 2660 S  0.0  3.0  13:23.23 php-fpm
19014 nginx     20   0 52084  14m 2692 S  0.0  3.0  22:16.57 php-fpm
19007 nginx     20   0 58724  14m 2724 S  0.0  3.0  25:09.20 php-fpm
19032 nginx     20   0 50156  14m 2692 S  0.0  3.0  24:25.53 php-fpm
17830 nginx     20   0 50088  14m 2696 S  0.0  2.9  16:37.53 php-fpm
17816 nginx     20   0 49996  14m 2768 S  0.0  2.9  18:57.37 php-fpm
19043 nginx     20   0 50140  14m 2648 S  0.0  2.9  23:30.66 php-fpm
17806 nginx     20   0 50088  14m 2656 S  0.0  2.9  19:38.99 php-fpm
17188 nginx     20   0 50100  14m 2656 S  0.0  2.9  22:46.46 php-fpm
17817 nginx     20   0 49836  14m 2660 S  0.0  2.9  18:29.45 php-fpm
17820 nginx     20   0 48892  13m 2972 S  0.0  2.8  18:01.07 php-fpm
19030 nginx     20   0 58824  13m 2652 S  0.0  2.8  23:40.90 php-fpm
17798 nginx     20   0 48780  13m 2696 S  0.0  2.7  17:09.82 php-fpm
17187 nginx     20   0 58672  13m 2716 S  0.0  2.7  23:04.46 php-fpm
17807 nginx     20   0 52076  13m 2660 S  0.0  2.6  16:45.52 php-fpm
19029 nginx     20   0 58924  12m 2688 S  0.0  2.6  24:00.66 php-fpm
17808 nginx     20   0 58676  12m 2688 S  0.0  2.6  17:31.33 php-fpm
17799 nginx     20   0 50088  12m 2660 S  0.0  2.6  17:41.13 php-fpm
19015 nginx     20   0 58680  12m 2656 S  0.0  2.6  21:59.83 php-fpm
18295 nginx     20   0 48512  12m 2692 S  0.0  2.6  16:57.08 php-fpm
19027 nginx     20   0 48368  12m 2656 S  0.0  2.6  24:40.65 php-fpm
17819 nginx     20   0 48208  12m 2656 S  0.0  2.5  16:43.87 php-fpm
19031 nginx     20   0 49960  12m 2648 S  0.0  2.5  23:28.34 php-fpm
17832 nginx     20   0 47884  12m 2660 S  0.0  2.5  16:04.87 php-fpm
17818 nginx     20   0 47884  12m 2660 S  0.0  2.5  16:03.53 php-fpm
17831 nginx     20   0 47864  12m 2696 S  0.0  2.5  16:43.48 php-fpm
18249 nginx     20   0 47884  12m 2664 S  0.0  2.5  16:27.29 php-fpm
7435 mysql     20   0  352m 7780 2872 S  0.3  1.5  62:00.00 mysqld
19033 nginx     20   0 42540 7368 2676 S  0.0  1.4  24:04.93 php-fpm
31015 root      20   0 12028 3708 2940 S  0.0  0.7   0:00.17 sshd
30826 postfix   20   0 13628 2260 1640 S  0.0  0.4   0:00.00 pickup
30995 root      20   0  5252 1704 1412 S  0.0  0.3   0:00.03 bash
31020 root      20   0  5256 1704 1416 S  0.0  0.3   0:00.03 bash
19028 nginx     20   0 58668 1648 1528 S  0.0  0.3   9:11.84 php-fpm

我們可以從您更新的輸出中看到,您有 34 個 PHP 工作人員正在執行(不包括主程序),所有這些工作人員都在佔用記憶體並且完全處於空閒狀態。這意味著您已將 php-fpm 調整為在容量大得多的機器上執行,其流量遠遠超過您實際獲得的流量。或者,也許,根本沒有調整它。

目前,這些程序佔用了超過 3/4 的 VM 記憶體,並且絕對沒有給您帶來任何好處。

因此,請檢查 php-fpm 池配置中的調整,例如預設的/etc/php-fpm.d/www.conf. 對於像這樣的小型 VPS,我可能會從某個地方開始:

pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 5

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