• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

linux-进程跟踪-之phpfpm异常退出重启

php 搞代码 3年前 (2022-03-01) 42次浏览 已收录 0个评论

异样形容

公司一台测试服务器,应用json_decode()办法,php-fpm异样退出报错日志信息如下:

php-fpm child 7970 exited with code 1 after 34534.452342 seconds from start

NGINX日志报错也只是说和php-fpm断开通信.导致502

自我解决思路

刚开始的也是毫无思路,始终认为是json扩大的问题,通过申请phpinfo(),和cli的php -m 发现都有json的扩大,机器的内存也是够用的,发现这就奇了怪了,到底是什么起因呢?
而后也是网上一顿搜.

  • 网上办法1
有说查看/var/log/syslog和/var/log/message 日志.可咱们这台机器,/var/log下并没有这2个文件(零碎是CentOS),也不晓得是不是哪里设置没有关上?
  • 网上办法2
批改www.conf里的参数
解释:起因就是没有pm.start_servers这个参数没有依照上面的这个公式来:
pm.start_servers= min_spare_servers + (max_spare_servers - min_spare_servers) / 2
个别min_spare_servers设置为20

操作之后也并不好使.应用问题不在这.

解决问题

应用strace跟踪php-fpm过程并输入日志到文件.

ps -ef|grep php-fpm|awk '{print " -p " $2" -s 10000 -o /tmp/strace_"$2".log"}'|xargs strace
监控所有的子过程pid,并写入相应的trace.log

查看日志发现是,公司前共事用c封装的一个类型,写入某个文件没有权限导致的.发现问题就好解决了,给该文件加上读写权限即可.至此该bug已解决.

strace罕用参数

-c 统计每一零碎调用的所执行的工夫,次数和出错的次数等.
-d 输入strace对于规范谬误的调试信息.
-f 跟踪由fork调用所产生的子过程.
-ff 如果提供-o filename,则所有过程的跟踪后果输入到相应的filename.pid中,pid是各过程的过程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输入简要的帮忙信息.
-i 输入零碎调用的入口指针.
-q 禁止输入对于脱离的音讯.
-r 打印出绝对工夫对于,,每一个零碎调用.
-t 在输入中的每一行前加上工夫信息.
-tt 在输入中的每一行前加上工夫信息,微秒级.
-ttt 微秒级输入,以秒了示意工夫.
-T 显示每一调用所耗的工夫.
-v 输入所有的零碎调用.一些调用对于环境变量,状态,输入输出等调用因为应用频繁,默认不输入.
-V 输入strace的版本信息.
-x 以十六进制模式输入非标准字符串
-xx 所有字符串以十六进制模式输入.
-a column 设置返回值的输入地位.默认 为40.
-e expr 指定一个表达式,用来管制如何跟踪.格局:[qualifier=][!]value1[,value2]...
qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier是 trace.感叹号是否定符号.例如:-eopen等价于 -e trace=open,示意只跟踪open调用.而-etrace!=open 示意跟踪除了open以外的其余调用.有两个非凡的符号 all 和 none. 留神有些shell应用!来执行历史记录里的命令,所以要应用\\.
-e trace=set 只跟踪指定的零碎 调用.例如:-e trace=open,close,rean,write示意只跟踪这四个零碎调用.默认的为set=all.
-e trace=file 只跟踪无关文件操作的零碎调用.
-e trace=process 只跟踪无关过程管制的零碎调用.
-e trace=network 跟踪与网络无关的所有零碎调用.
-e strace=signal 跟踪所有与零碎信号无关的 零碎调用
-e trace=ipc 跟踪所有与过程通信无关的零碎调用
-e abbrev=set 设定strace输入的零碎调用的后果集.-v 等与 abbrev=none.默认为abbrev=all.
-e raw=set 将指定的零碎调用的参数以十六进制显示.
-e signal=set 指定跟踪的零碎信号.默认为all.如 signal=!SIGIO(或者signal=!io),示意不跟踪SIGIO信号.
-e read=set 输入从指定文件中读出 的数据.例如: -e read=3,5
-e write=set 输入写入到指定文件中的数据.
-o filename 将strace的输入写入文件filename
-p pid 跟踪指定的过程pid.
-s strsize 指定输入的字符串的最大长度.默认为32.文件名始终全副输入.
-u username 以username的UID和GID执行被跟踪的命令

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:linux-进程跟踪-之phpfpm异常退出重启
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址