1. 云栖社区>
  2. PHP教程>
  3. 正文

php进程SIGBUS,SIGSEGV错误

作者:用户 来源:互联网 时间:2017-12-01 14:18:30

php进程错误SIGBUSSIGSEGV

php进程SIGBUS,SIGSEGV错误 - 摘要: 本文讲的是php进程SIGBUS,SIGSEGV错误, 本文通过OscPress同步至oschina,最新版本请查看原文: https://www.cellmean.com/?p=1048 最近 在OSX 开发Wordpress,nginx偶尔会出现502错误,查看日志发现: 2016


php进程SIGBUS,SIGSEGV错误
本文通过OscPress同步至oschina,最新版本请查看原文: https://www.cellmean.com/?p=1048

最近 在OSX 开发Wordpress,nginx偶尔会出现502错误,查看日志发现:



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有关,查看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




可以看到出现的时间跟nginx的时间是一致的,php进程池遇到(SIGSEGV)错误, 重启了。关闭了对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




关于这两个信号的说明:http://blog.csdn.net/haogaoming123/article/details/42082483


涉及共享内存的管理就不能不提到访问共享内存对象。谈到访问共享内存对象就要留神“SIGSEGV和SIGBUS”这两个信号。
系统分配内存页来承载内存映射区,由于内存页大小是固定的,所以存在多余的页空间空闲,比如待映射文件大小为5000 bytes,内存映射区大小也为5000 bytes。而一个内存页大小4096,系统势必要分配两页来承载,这时空闲的有效空间为从5000-8191,如果进程访问这段地址空间也不会发生错误。但是要超出8191,就会收到SIGSEGV信号,导致程序停止。
关于SIGBUS信号的来历,这里也举例说明:若待映射文件大小为5000 bytes,我们在mmap时指定内存映射区size = 15000 > 5000,页承载大小16384,而内核真正的共享区承载体大小只有8192(能包容映射文件大小即可),此时在[0,8191]内访问均没问题,但在[8192, 16383]之间会得到SIGBUS信号;超出16384访问时会触发SIGSEGV信号。

to be continue…

感谢阅读本文,欢迎访问 微言 获取更多内容或查看原文



以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php , 进程 , 错误 , SIGBUS SIGSEGV ,以便于您获取更多的相关知识。