Apache-2.2

PHP 殭屍程序太多

  • August 6, 2019

我今天重新啟動了我的 apache 守護程序以重新載入配置文件,但在此之後我開始在系統上看到許多 php 殭屍程序。數量從 10 到 30 不等,它們在死亡時都會佔用一點 CPU。我應該從哪裡開始調試這個問題?

我所做的修改是將每個孩子的最大請求數從 0(大量記憶體洩漏)減少到 1000。我認為 php 程序來自從“啞”設備接收數據的腳本,即。他們發送帶有 GET 參數的請求,而不關心結果。

一些數據:

unname -a

# uname -a
Linux <hostname> 2.6.32-71.29.1.el6.x86_64 #1 SMP Mon Jun 27 19:49:27 BST 2011 x86_64 x86_64 x86_64 GNU/Linux

ps-輔助 | grep php

# ps aux | grep php
user1     5709  1.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5717  1.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5721  1.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5722  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5723  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5724  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5725  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5729  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5731  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5737  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5760  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5778  1.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5793  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5798  1.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5800  1.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5833  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5850  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5870  3.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5875  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5876  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5877  2.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5886  0.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5926  0.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5939  0.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5941  0.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5961  0.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5962  0.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5973  0.0  0.0      0     0 ?        Z    12:15   0:00 [php] <defunct>
user1     5977  0.0  0.2 106836  8680 ?        R    12:15   0:00 /usr/bin/php /home/user1/public_html/<script>.php
root      5981  0.0  0.0 103228   836 pts/0    S+   12:15   0:00 grep php

自由

# free -m
            total       used       free     shared    buffers     cached
Mem:          3831       3173        658          0        183       2502
-/+ buffers/cache:        487       3344
Swap:         4031          7       4024

正常執行時間

# uptime
12:18:10 up 105 days, 23:21,  1 user,  load average: 0.23, 0.20, 0.18

還有什麼需要幫助我調試的嗎?

這算不上問題。Zombies 不會佔用 CPU、記憶體或程序表插槽以外的任何東西。你說過,殭屍並沒有逗留很長時間,所以發生的所有事情都是 Apache 主程序正在做的事情不是等待子程序退出,所以有時需要一段時間才能終止孩子們得到收穫。

殭屍程序只是一個父程序已經死亡/被殺死,並且還沒有被清理的程序。

如果在服務重啟期間發生這種情況,則完全正常。您應該閱讀 linux 程序狀態,這裡有粗略的資訊:

  1. 執行:這是一個程序處於執行或準備執行的狀態。
  2. 可中斷:此狀態是程序的阻塞狀態,等待來自另一個程序的事件或信號
  3. 不間斷:也是阻塞狀態。在等待硬體狀態並且無法處理信號的特定條件下,程序被迫停止。
  4. 停止:一旦過程完成,就會出現這種狀態。這個過程可以重新開始
  5. Zombie:在這種狀態下,程序將被終止,並且程序表中的資訊仍然可用。

但是,如果它在您的網路伺服器的正常使用期間發生(我們畢竟在談論 php 程序),您可以通過每分鐘執行一次 apache 優雅重啟(service apache2 reload)的 cronjob 臨時解決此問題,但這並不能解決潛在的問題。可用插槽。

在第二種情況下,您需要辨別是哪個主機導致了殭屍,並且必須修復應用程序。99% 的此類殭屍是由程式不當的網站造成的。

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