某一天看见线上502突然陡增,然后就就开始了几天的故障发现之旅。

 

一、刚开始怀疑是不是负载均衡和后端的服务器之间的tcp连接超时,导致服务器断开了tcp连接。

后通过tcpdump抓包分析取消了这个怀疑。

1 tcpdump -i eth0 host 1.1.1.1 and tcp port 80 -w  /tmp/4.pca

线上502故障分析

用户明确将post请求上传到服务器了,然后服务才开始tcp fin结束tcp连接,所以服务器已经执行了该请求,但是由于某种原因执行失败了。

 

二、打开apache的错误日志分析一下哟

1 在apache主配置文件中
2 vim ./conf/httpd.conf
3 ErrorLog "logs/error_log"

线上502故障分析

根据这个日志毛毛球都发现不了,然后我们打开apache的coredump

2.1)首先要开启核心转储

1)查看core文件是否打开:
ulimit -c  # 如果为 0 表示coredump开关处于关闭状态

2)打开core文件生成: 
ulimit -c 1024         # 1024个blocks,一般1block=512bytes
ulimit -c unlimited    # 取消大小限制

3)检查core文件的选项是否打开:
ulimit -a  # 显示当前所有limit信息

永久更改这种操作不适合老夫,所以我就不写了。

2.2)core文件的存储位置和文件名:

1、临时修改
1)core文件保存在/var/apache_dump目录下
echo "/var/apache_dump/%e.core.%s.%p.%h.%t" > /proc/sys/kernel/core_pattern
2)生成的core文件名将会变成core.pid
echo 1 > /proc/sys/kernel/core_uses_pid

2、永久修改 
1)在配置最后增加2行
cat /etc/sysctl.conf
kernel.core_pattern = /var/apache_dump/%e.core.%s.%p.%h.%t
kernel.core_uses_pid = 1
2)永久生效
sysctl -p

2.3)创建core文件存储位置并且为授权,修改apache

mkdir -p /var/apache_dump
chow www.www /var/apache_dump

在apache主配置文件中,最底下一行新增
vim conf/httpd.conf
CoreDumpDirectory /var/apache_dump

2.4)重启生效,切记一定要先stop,然后在start,否则不生效,具体为啥不生效,研究一下?

2.5)此时的apapche的错误日志就变成了如下(文件名跟我上面不一样不要介意,过了几天才写的博客):

线上502故障分析

 

三、接下来就开始分析coredump文件

这个文件也是异常的傻逼,需要安装gdb,debug-info等等,可以自己研究一下,这个httpd一定要注意,要不然都是坑。

gdb /httpd/bin/httpd httpd.core.7.12107.hostname.1583911530

线上502故障分析

看见这个时候整个人都蒙了,这他妈毛毛球都看不出来啊,然后去研究了一下gdb的用法,发现有个叫bt full的命令,详细展示。

线上502故障分析

然后往下翻,慢慢找,太多了,找了一会找到了代码相关的信息,然后线上测试一下,确认问题,问题解决,舒服了。

 

参考的各位大佬:

https://blog.51cto.com/7938217/1671716
https://cwiki.apache.org/confluence/display/HTTPD/CoreDump
https://www.cnblogs.com/dongzhiquan/archive/2012/01/20/2328355.html
https://www.cnblogs.com/chenpingzhao/archive/2016/06/06/5563605.html
https://www.cnblogs.com/Robotke1/archive/2013/04/23/3039108.html
https://blog.csdn.net/lcli2009/article/details/84027059
https://httpd.apache.org/dev/debugging.html
https://blog.csdn.net/f_srion/article/details/69967781
https://bugs.php.net/bug.php?id=73588&thanks=6
https://bugs.php.net/bugs-generating-backtrace.php

 

分类:

技术点:

相关文章: