linux+php5.3版本出現錯誤死鎖解決

weixin_33766168發表於2017-11-12
 PHP-fpm/cgi 搭配 APC或xcache碰到死鎖的解決辦法。
一臺機器一直跑 PHP 5.3.x (fpm或fastcgi方式),常常不定時發生死鎖現象。

表現為 FCGI 服務連不上,NGINX報告 502 bad gateway,這時系統裡的 php 程式其實都還在,但都卡在 futex() 這一系統呼叫上,很明顯發生死鎖了。

查了一些資料,發現這個BUG早在2年前就有人提交過了,至今似乎沒有妥善的解決辦法,原因在於鎖住資源時如果發生指令碼超時,則時PHP內部通過 longjmp 跳轉來關閉請求,導致鎖無法正確釋放。參見:http://pecl.php.net/bugs/bug.php?id=17589 和 http://bugs.php.net/bug.php?id=46025

目前在PHP5.3可以在 php.ini 中增加 exit_on_timeout = On 來解決,意思是當發生超時就索性把程式殺死,以便讓系統回收這類鎖資源,避免死鎖。

本文轉自 liang3391 51CTO部落格,原文連結:http://blog.51cto.com/liang3391/664354

相關文章