一次网站故障处理过程

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:
一次网站故障处理过程
作者:田逸( [email]sery@163.com[/email]  from [url]http://netsecurity.51cto.com/art/200802/65683.htm[/url]
 
春节还没过完就接到同事的电话,说论坛访问速度慢,遭致用户强烈的投诉,要求我马上处理。这个bbs是运行在Redhat AS 5上,由apachemysqlphpdiscuz组成,有129550位注册会员,同时在线的最高人数11128,按照当前的硬件条件,应该满足访问需求(新上线的HP服务器)。在浏览器输入论坛的url, 果然很慢,再联系朋友帮忙测试,打开网络还是很慢。
 
先不管这么多,登录到服务器上去看看再做下一步打算。还好,登录比较顺利。运行命令uptime看系统负载,很低呀,再运行命令top,uptime得出的结论基本吻合,于是得出结论:系统负载不大。
 
是否被恶意攻击呢?基于这个想法,察看系统帐号打开文件 /etc/passwd,没看见任何异常;运行命令 iptables –L –n 发现防火墙规则仍按我当初设定的策略执行,这些迹象表明,系统不存在安全问题。
 
那会不会是mysql的性能问题呢?用mysql客户端连接数据库,察看负载,其情况如下:
mysql> show processlist;
+---------+-----------+-----------+--------+---------+------+-------+------------------+
| Id      | User     | Host   | db    | Command | Time | State | Info           |
+---------+-----------+-----------+--------+---------+------+-------+------------------+
| 1917230 | bbsdiscuz | localhost | discuz | Sleep   |  284 |       | NULL             |
| 1917412 | bbsdiscuz | localhost | discuz | Sleep   |  223 |       | NULL             |
| 1917442 | bbsdiscuz | localhost | discuz | Sleep   |  222 |       | NULL             |
| 1917554 | bbsdiscuz | localhost | discuz | Sleep   |  205 |       | NULL             |
| ………………….. 省略若干 ………………………..
| 1918404 | bbsdiscuz | localhost | discuz | Sleep   |    0 |       | NULL             |
+---------+-----------+-----------+--------+---------+------+-------+------------------+
19 rows in set (0.00 sec)
从输出结果看,连接数和保持时间也在正常范围内。以前曾经有过mysql数据库连接数过多(达到设定的最大连接数)及会话保持时间(Time)过长的事故,从而导致网站访问速度变慢,以至于无法忍受。由此分析,这个故障不是由mysql数据库所引起的。
 
现在还剩下apache了,看来该怀疑一下它了。我们先看看有多少个httpd进程,其过程如下:
[root@web1 ~]# ps aux | grep httpd | grep -v grep | wc -l
256
结果刚好是apache默认设置的最大连接数,再执行 [root@web1 ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  其运行结果如下所示:
LAST_ACK 3
SYN_RECV 628
………… 省略若干 …………
TIME_WAIT 524
这个结果表明请求数比较大但却没有得到适时的响应,再看一下这些请求都是发往那些服务端口,只需运行netstat –anp | grep –v unix ,发现绝大部分请求是针对80端口的。由这个现象基本可以断定是apache引起的麻烦。那好,我就从这里着手。关apache服务再启用,这时察看httpd进程,马上就是256.既然这样,我就在配置文件httpd.conf加入下面的代码块:
<IfModule prefork.c> 
StartServers 10
MinSpareServers 10
MaxSpareServers 15 
MaxClients 1500
ServerLimit 2000
MaxRequestsPerChild 10000 
</IfModule> 
执行apachectl –t ,报错,警告说MaxClients超过256,以至于apache服务不能正常运行,该小一点呢?好,改成150,运行后,查httpd进程数,刚好150。用浏览器访问论坛,还是十分的缓慢。看来得朝大的方向改,否则瞬间apache达到最大连接数,就不再响应新的请求。从前面的操作(把MaxClients的值改大超过256)可以知道,必须重新编译和安装apache才可以达到目的。当时曾经尝试把apache置于worker模式,但在编译时涉及到php,不想再节外生枝,就不再继续。我用的apache版本是httpd- 2.2.6 ,进安装包所在的目录(如我的目录是/root/httpd-2.2.6,即解压httpd-2.2.6.tgz后生成的目录),修改文件 server/mpm/prefork/prefork.c,把第77行的值改成1500,如下图所示:
然后再编译,运行和安装。再使配置文件 httpd.conf MaxClients的值为1500,运行apachectl –t检查语法是否正确,无误后启用apache服务 apachectl start .现在,我们再回过头来察看apache的进程数,基本上在170-400这个范围,并且在不停的变化,隔设定的1500这个值还差得远;另外那些等待的请求值也降低了,这意味apache能正常响应用户的请求。在浏览器输入论坛的url,速度正常,再请其他朋友帮着测试,一切正常。



















本文转自sery51CTO博客,原文链接:http://blog.51cto.com/sery/62376 ,如需转载请自行联系原作者




 
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 监控 网络协议
线上故障如何快速排查?来看这套技巧大全
有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从服务器、Java应用、数据库、Redis、网络和业务六个层面分享线上故障排查的思路和技巧。较长,同学们可收藏后再看。
线上故障如何快速排查?来看这套技巧大全
|
2月前
|
存储 监控 安全
服务器维护是确保服务器稳定运行、数据安全和性能优化的重要过程
【10月更文挑战第4天】服务器维护是确保服务器稳定运行、数据安全和性能优化的重要过程
128 65
|
7月前
|
安全 测试技术 网络架构
【专栏】编写网络设备割接方案的七个步骤,包括明确割接目标、收集信息、制定计划、设计流程、风险评估、准备测试环境和编写文档。
【4月更文挑战第28天】本文介绍了编写网络设备割接方案的七个步骤,包括明确割接目标、收集信息、制定计划、设计流程、风险评估、准备测试环境和编写文档。通过实际案例分析,展示了如何成功完成割接,确保业务连续性和稳定性。遵循这些步骤,可提高割接成功率,为公司的网络性能和安全提供保障。
717 0
|
4月前
|
运维 jenkins Linux
【Jenkins稳定运维】服务器频繁崩溃?资深管理员的应对策略
本文分享了作者作为管理员在面对服务器频繁崩溃时的应对策略,包括使用Shell脚本优化运维工作、学习Jenkins Pipeline插件以及一些运维技能扩展,强调了在运维工作中不断学习和实践的重要性。
57 0
【Jenkins稳定运维】服务器频繁崩溃?资深管理员的应对策略
|
5月前
|
运维 监控 Java
(十)JVM成神路之线上故障排查、性能监控工具分析及各线上问题排错实战
经过前述九章的JVM知识学习后,咱们对于JVM的整体知识体系已经有了全面的认知。但前面的章节中,更多的是停留在理论上进行阐述,而本章节中则更多的会分析JVM的实战操作。
116 1
|
5月前
|
SQL 监控 测试技术
软件交付问题之项目发布后要关注监控的有效性,如何解决
软件交付问题之项目发布后要关注监控的有效性,如何解决
|
域名解析 网络协议 网络安全
网络 | 排错五大步骤,没有解决不了的网络故障准达信息准达信息
网络 | 排错五大步骤,没有解决不了的网络故障准达信息准达信息
107 0
|
Java
【线上问题排查】内存泄漏排查(模拟真实环境)
【线上问题排查】内存泄漏排查(模拟真实环境)
198 0
|
SQL 固态存储 关系型数据库
经典案例:磁盘I/O巨高排查全过程(1)
经典案例:磁盘I/O巨高排查全过程
296 0
经典案例:磁盘I/O巨高排查全过程(1)
|
JSON 运维 网络协议
平稳运行半年的系统宕机了,记录一次排错调优的全过程!
最近发生了一件很让人头疼的事情,已经上线半年且平稳运行半年系统在年后早高峰的使用时发生了濒临宕机的情况。访问速度特别慢,后台查到大量time_wait的连接,从代码层面到架构层面到网络层面排查了几天几夜,总算是有了结果。