异样形容
公司一台测试服务器,应用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执行被跟踪的命令