php进程SIGBUS,SIGSEGV错误
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
| 本文通過 OscPress 同步至oschina,最新版本請查看原文: https://www.cellmean.com/?p=1048 |
最近 在OSX 開發(fā)Wordpress,nginx偶爾會出現(xiàn)502錯誤,查看日志發(fā)現(xiàn):
2016/07/15 12:44:28 [error] 239#0: *5670 upstream prematurely closed connection while reading response header from upstream, client: 127.0.0.1, server: dev.cellmean.com, request: “GET /%e6%b5%8b%e8%af%95%e6%a0%87%e9%a2%98/ HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: “dev.cellmean.com”, referrer: “http://dev.cellmean.com/%e6%b5%8b%e8%af%95%e6%96%87%e7%ab%a0%e5%90%8c%e6%ad%a5%e5%88%b0-osc/”
…
似乎跟上游的php-fpm有關(guān),查看php-fpm.log:
[15-Jul-2016 12:44:28] WARNING: [pool www] child 79191 exited on signal 11 (SIGSEGV) after 18.827492 seconds from start
[15-Jul-2016 12:44:28] NOTICE: [pool www] child 79349 started
…
可以看到出現(xiàn)的時間跟nginx的時間是一致的,php進程池遇到(SIGSEGV)錯誤, 重啟了。關(guān)閉了對nginx請求的處理。
在日志的其他地方還能看到另一個信號(SIGBUS) :
[15-Jul-2016 20:41:58] NOTICE: [pool www] child 86825 started
[15-Jul-2016 20:44:59] WARNING: [pool www] child 79193 exited on signal 10 (SIGBUS) after 14402.816372 seconds from start
…
關(guān)于這兩個信號的說明:http://blog.csdn.net/haogaoming123/article/details/42082483
涉及共享內(nèi)存的管理就不能不提到訪問共享內(nèi)存對象。談到訪問共享內(nèi)存對象就要留神“SIGSEGV和SIGBUS”這兩個信號。系統(tǒng)分配內(nèi)存頁來承載內(nèi)存映射區(qū),由于內(nèi)存頁大小是固定的,所以存在多余的頁空間空閑,比如待映射文件大小為5000 bytes,內(nèi)存映射區(qū)大小也為5000 bytes。而一個內(nèi)存頁大小4096,系統(tǒng)勢必要分配兩頁來承載,這時空閑的有效空間為從5000-8191,如果進程訪問這段地址空間也不會發(fā)生錯誤。但是要超出8191,就會收到SIGSEGV信號,導(dǎo)致程序停止。 關(guān)于SIGBUS信號的來歷,這里也舉例說明:若待映射文件大小為5000 bytes,我們在mmap時指定內(nèi)存映射區(qū)size = 15000 > 5000,頁承載大小16384,而內(nèi)核真正的共享區(qū)承載體大小只有8192(能包容映射文件大小即可),此時在[0,8191]內(nèi)訪問均沒問題,但在[8192, 16383]之間會得到SIGBUS信號;超出16384訪問時會觸發(fā)SIGSEGV信號。
?
to be continue…
感謝閱讀本文,歡迎訪問 微言 獲取更多內(nèi)容或 查看原文
轉(zhuǎn)載于:https://my.oschina.net/falcon10086/blog/712804
總結(jié)
以上是生活随笔為你收集整理的php进程SIGBUS,SIGSEGV错误的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员的3年之痒改变的不止薪水(转载)
- 下一篇: php ...