Nginx

PHP FPM 狀態正在完成但從未完成

  • April 15, 2016

我們正在使用 Nginx 和 PHP-FPM 在 Ubuntu 14.04 上執行 Symfony 應用程序

問題是個別 PHP FPM 偶爾會掛在我們的生產伺服器上。

我有狀態頁面的輸出:

pid:                  13416
state:                Finishing
start time:           08/Sep/2014:12:35:29 +1000
start since:          10548
requests:             3
request duration:     158138427297
request method:       GET
request URI:          /app.php?searchText=Search+term&page=2
content length:       0
user:                 -
script:               /var/projects/site_path/app.php
last request cpu:     0.00
last request memory:  0

我無法弄清楚為什麼這個過程會掛起。

如果我跟踪這個過程,它只是在循環:

# strace -p 13416
gettimeofday({1410154710, 385743}, NULL) = 0

我檢查了 Nginx 訪問日誌並匹配了請求,請求很好,它返回 200 並且不能使用 url 複製錯誤)。

任何幫助將不勝感激

訪問日誌:

172.30.12.110 - - [08/Sep/2014:12:35:29 +1000] "GET /search?searchText=Search+term&page=2 HTTP/1.1" 200 11174 "/search?searchText=Search+term" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MATPJS; rv:11.0) like Gecko"
172.30.12.110 - - [08/Sep/2014:12:35:32 +1000] "GET /search?searchText=Search+term&page=2 HTTP/1.1" 200 11174 "-" "Mediapartners-Google"
172.30.12.110 - - [08/Sep/2014:12:35:34 +1000] "GET /search?searchText=Search+term&page=2 HTTP/1.1" 200 11169 "-" "Mediapartners-Google"
172.30.12.110 - - [08/Sep/2014:12:35:51 +1000] "GET /search?searchText=OSearch+term&page=3 HTTP/1.1" 200 11158 "/search?searchText=Oven+baked+duck+and+shitake+rissotto&page=2" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MATPJS; rv:11.0) like Gecko"
172.30.12.110 - - [08/Sep/2014:12:36:50 +1000] "GET /profile/ HTTP/1.1" 200 8108 "/search?searchText=Oven+baked+duck+and+shitake+rissotto&page=4" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MATPJS; rv:11.0) like Gecko

事實證明,我們在某些​​情況下使用了無效的 Memcached 鍵。這導致 Memcached 沒有錯誤地死掉,而 PHP 程序仍然活著。

在我們的例子中,我們使用 Unix 域套接字和連接重用 (enablereuse=on) 配置了 mod_proxy_fastcgi,但是正如 lkraav 在https://github.com/icing/mod_h2/issues/62的評論中所述:

# UDS does not currently support connection reuse

這就是導致 FPM 子程序堆積在完成狀態的原因。去掉連接重用解決了這個問題,大大穩定了系統。

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