一次生产环境web服务迁移故障总结【摘自老男孩培训内部BBS平台】本文是老男孩老师亲自参与帮助学生解决的一个生产案例,值得博友们学习和借鉴。
1)紧急问题发生时的排错思路借鉴。<=该生非常有心,观察的如此细致,难得一也。
2)学生解决问题后的解决总结与反思习惯。<=该生能够始终贯彻总结习惯,难得二也。这两条正是老男孩linux培训的核心思想6重中的三重啊,重思路,重习惯,重总结。该生能够总结并和其他师兄师弟们分享自己的经历经验,感恩和分享之心,难得三也。这三个难得,都是成就个人的不可或缺的关键,如果具备了,就算做别的职业,也必然是优秀的。
故障缘由:
公司服务器要整改,准备用一台新服务器安装LAMP环境,承担现在的WEB服务器,然后将现有的服务器重新规划整理;
故障现象:
当把代码用rsync同步到新服务器上,开启apache服务,做好DNS解析后,刚开始访问的时候是OK的!但是在不到一分钟的时候,网站就打开的非常慢,主页打开时间有时到了几分钟(几乎相当于访问不了),查看Apache报错日志,没有明显的错误异常日志;
解决过程:
1、首先老男!孩老师让先把DNS切换到新服务器上去,把流量引过来(因为当时不是访问高峰期,网站临时的波动是允许的);
2、老男孩老师让安装上firbug等工具,查看网站访问慢的时候是哪一部分的加载比较慢;
3、一分钟后,网站访问开始变慢,根据第二点,查看网站首页加载时间的时候,发现首页加载的第一个页面项时间就超过了20s;
4、老男,孩老师在本机使用wget访问,然后在机房同局域网的其他服务器上wget 内网地址,结果一样还是特变的慢(此时几乎就已经排除是网络原因了!)
5、老男孩老师让在网站根目录下面创建一个静态页,去访问(结果一样,打开时间非常慢),也几乎排除了数据库链接慢的原因,问题大约定在是apache的问题;
6、此时老-男孩老师先将Apache stop,然后start,这样发现网站访问速度没有任何变化;
7、 老男孩老师这时先将网站stop,然后使用killall命令将所有httpd进程杀死,再start,此时发现访问速度突然快了,并且一分钟后访问又是很慢;
8、 对比第六步跟第七步发现多了一个杀死httpd所有进程,访问速度就能复原,分析一下得出这两步做的区别就是第六步会保留已经建立链接的访问,而第七步是直接全部访问链接都没有了(此时,老男孩老师就说很有可能是访问连接数过多);
9、 查看此时的并发连接数,大约在600左右,然后询问我是什么模式(当时apache是跑在perfork模式下的);
10、 打开apache配置文件,找到perfork模块的参数设置:
<IfModule mpm_prefork_module>
StartServers10
MinSpareServers20
MaxSpareServers30
ServerLimit5000
MaxClients5000
MaxRequestsPerChild 10000
</IfModule>
但看参数的设置,是没有什么问题的,此时老男孩老师打开apache错误日志,查看错误信息的时候发现有一条信息记录的是类似连接数的隐蔽问题;(当时的记录已经清空了,这里是翻译过来的意思)
11、看到这里老男-孩老师就确定是perfork模式的参数设置有问题,根本就没生效,而导致采用默认的256,但是现在的链接并发数已经大于256了,所以后面的访问用户就处在等待的状态,也就出现了一分钟后就访问特别慢的情况;
12、老男0孩老师根据之前规范的文档,看见ServerLimit的位置在文档中配置的是第一行,而现在服务器上的是配置在第四行的,将ServerLimit参数行放到第一行,然后将apache关掉重启;
13、这个时候再次访问的时候,网站一切正常,问题解决!!!!!
根据上面老男孩老师解决这个问题的过程。我总结了一下老男孩老师在结果这个问题时的思路:
1、出现问题,先分析故障故障,定义问题出现的大范围(这次故障,在服务器压力并不大的时候就出现访问很慢,老男孩老师就确定了是服务配置问题,跟服务器硬件关系不大!)
2、定位问题之后逐一排查缩,把问题的出现原因逐渐缩小(服务器硬件、网络因素、服务配置):
2、1通过服务器TOP命令--à得出不是服务器硬件;
2、2通过内网访问---à排除是网络的因素
2、3通过创建静态页--à排除apache以外其他服务配置问题
2、4通过查看apache配置文件--à找出问题所在,解决问题
PS:此次老|男孩老师的故障排查过程我亲眼目睹,老男孩老师在做每一步的时候,都十分有目的性,并且在一步衔接一步的去发现、排除问题;之前老男孩老师一直跟我们说思想往往比你学到一些东西知识更重要,以前的时候没有体会到,但是这次看着老男孩老师解决故障的过程,除了羡慕之外,更深深的体会到了做一件事情思想的重要性!!有了思想,站在一个宏观的位置去考虑问题,一切故障问题的解决思路、解决步骤都会清晰无比!!