Linux
即使站點的訪問者很少,交換記憶體也會耗盡伺服器
我在 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