linux+php5.3版本出現錯誤死鎖解決
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 來解決,意思是當發生超時就索性把程式殺死,以便讓系統回收這類鎖資源,避免死鎖。
表現為 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
相關文章
- SQ死鎖及死鎖的解決
- 面試:什麼是死鎖,如何避免或解決死鎖;MySQL中的死鎖現象,MySQL死鎖如何解決面試MySql
- MySQL 死鎖解決MySql
- MySQL解決死鎖MySql
- scp出現錯誤的解決辦法
- 編譯EJB出現錯誤的解決編譯
- ontape出現段錯誤(未解決篇)
- nginx出現403錯誤的解決方法Nginx
- exchange出現1025錯誤!(未解決)
- ant構建時出現錯誤解決方案
- Mysql出現連線錯誤解決辦法MySql
- Oracle跨版本匯出EXP-00003錯誤的解決()Oracle
- Java多執行緒-死鎖的出現和解決Java執行緒
- 死鎖檢測及解決
- 連線MySQL出現2013錯誤解決MySql
- PostgreSQL 跟蹤checkpointer出現死鎖SQL
- 解決Centos7 yum 出現could not retrieve mirrorlist 錯誤CentOS
- Nginx出現413 Request Entity Too Large錯誤解決方法Nginx
- 隨身碟出現防寫錯誤的解決方法
- apache出現 403 permission 和404 not fund錯誤(解決方法)Apache
- exp/imp出現錯誤通過expdp/impdp來解決
- MySQL死鎖分析與解決之路MySql
- 解決Oracle死鎖的快捷方法Oracle
- oracle死鎖測試與解決Oracle
- 解決Oracle資料庫死鎖Oracle資料庫
- 死鎖問題排查過程-間隙鎖的復現以及解決
- sql出現結果集錯誤以及出現ora-600或者ora-7445錯誤的解決方法思路SQL
- 真機除錯出現 application installation failed 錯誤 解決方案除錯APPAI
- 什麼是死鎖?如何解決死鎖?
- git add .出現錯誤LF will be replaced by CRLF in 解決辦法Git
- Python: 安裝 sklearn 包出現錯誤的解決方法Python
- rman duplicate出現PLS-00201錯誤解決
- ubuntu安裝軟體出現Unable to locate package錯誤解決UbuntuPackage
- php抓取https網址出現錯誤的解決方法PHPHTTP
- 【MySql】複製出現Slave_SQL_Running: No 錯誤解決MySql
- 伺服器出現 HTTP 錯誤程式碼,及解決方法伺服器HTTP
- 解決Oracle死鎖問題步驟Oracle
- ORACLE ERP解決死鎖的方案Oracle