Linux下系统或服务排障的最佳实践

Linux下系统或服务排障的最佳实践
 

一、故障表现。首先一个应用或系统不正常,会表现在:1、前端应用/网页显示不正常,出错5XX,4XX或其他错误信息或慢或出不来;2、当前端端...
一、故障表现。首先一个应用或系统不正常,会表现在:
1、  前端应用/网页显示不正常,出错5XX,4XX或其他错误信息或慢或出不来;
2、  当前端端应用/网页暂时显示正常,但监控系统报警:如负载过高,CPU繁忙,系统占用比率过高;内存缺少,OOM(Out Of Memory),Swap使用过多等;磁盘空间不足,IO利用率过高;进程数过多,死锁;数据库慢查询过多,session\processes过多;流量过高,异常增减,断开;系统日志(dmesg或/var/log/message)报错;应用日志报错(各种错误,如4XX,5XX;或原来正常的接口现在无法访问;无法解析;响应时间过长….);。。。。
3、系统时而正常,时而不正常,或者之前正确结果,但突然不正确,或者某地用户出问题,但本地正常。

\  


二、主要的原因:
1、  各类新版本发布、变更配置引起。如新版本配置不正确;iptables; DNS设置;接口调用发生变化等。【所有变更务必进行记录,以供查询】
2、  用户行为变化(如进行商业推广,接口加载变化),请求量大增。系统容量不足,如内核参数设置过小,资源过少。带宽不够;数据库慢。
3、  应用程序的BUG。
4、  运维人为错误的修改、配置。如修改密码,增加定时任务,脚本。
5、  网络或硬件故障。如交换机故障,网线故障(千兆变百兆),网卡驱动;磁盘故障、主板故障等。
6、 所依赖的接口或服务挂起(如DNS,后端接口).
7、  攻击或安全漏洞。
8、 ....
 
三、排查、分析及解决问题的办法【需要综合很多经验,故障要区别对待(P0~P4),大面积重要或核心功能受损最优先P0;个别用户外围功能受损:P4;每个级别承诺不同的响应时间】:
1、  仔细看报障提供的故障信息:包括但不限于故障方的环境【网络-电信还是网通,客户机IP地址,DNS地址,浏览器,操作系统等】,报障内容(截图)。自己看问题能否重现。如能重现,比较好办:依据经验,可能可快速判断问题所在;若不能,可进行抓包,常用工具:HttpWatch,HttpAnalyser,FireFox里的插件,wireshark等等。若不能重现,则继续:
2、  查看网络状态:ping 服务器及服务器上反ping用户IP或traceroute/tracert。同时看监控系统是否有监测到相关报警,确认无外围的硬件与网络问题。
3、  组织人手,让业务运维最直接的人参与进来,排查。确认是否最近有变更。
4、  着手自己排查:找到相关架构(前端所有机器Nginx,Squid等),应用服务器(PHP or Resin),缓存层Memcache,数据库(Mysql,Oracle),清楚地知道为该应用提供服务所有机器。
5、  查看前端机器的资源情况【负载,CPU,内存,磁盘,进程,定进任务等】:top, w, sar, dmesg(/var/log/messages), ps, df, free, vmstat, iostat, netstat, telnet, curl, wget, lsof, cat等等。如负载过高,CPU繁忙,系统占用比率过高;内存缺少,OOM(Out Of Memory),Swap使用过多等;磁盘空间不足,IO利用率过高;进程数过多,死锁;数据库慢查询过多,session\processes过多;流量过高,异常增减,断开;系统日志(dmesg或/var/log/message)报错;应用日志报错(各种错误,如4XX,5XX;或原来正常的接口现在无法访问;无法解析;响应时间过长….);。。。。
dmesg
vi /var/log/messages
netstat –na|grep LISTEN
netstat –nlp –ip
iptables –nL
sysctl -a
cat /etc/rc.local
cat /etc/resolv.conf
ps –ef|grep java
ps –ef|grep php
ps –ef|grep mysql
ps –ef|grep nginx
df –h
fdisk –l
mount
crontab –l
sar –f /var/log/sa/sar* 将sar改为分钟级别记录,同时分析对比一段时间的变化,以Excel画图
分析日志(nginx等)的变化,请求数,错误率,做一段时间的对比,以Excel画图(不同机器横比,不同时间纵比)。
 
下面是一些技巧:
对比查看PHP服务器的PHP查询慢日志条数(slow query log count): wc –l /tmp/clientweb/log/slow_~day.log
将多台服务器上sar的相应值拿出来,将在excel中画图对比(不同机器横比,不同时间纵比) :
for file in `ls –tl /var/log/sa/ `
do
sar –f $file|awk ‘{print 100-$7}’
done
 
在Linux下以主机头信息查看某个IP的服务是否正常:
curl –H “Host:  www.5iops.com” http://202.96.159.234:80/index.php
curl –Iv –H “Host:  www.5iops.com” http://202.96.159.234:8080/index.php
 
demsg中有这个报错:ip_conntrack: table full, dropping packet.查看系统内核配置及当前使用状态:
 
[root@166-208 ~]# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max 
81920
[root@166-208 ~]# cat /proc/net/ip_conntrack|wc -l
45899
 
查找/目录下大于100M的文件:find / -size +100000k -exec ls -hl {} \;
[root@166-88 /]# find / -size +100000k -exec ls -hl {} \;
-rw-r--r-- 1 root root 526M 12-03 20:29 /usr/local/nginx/logs/error.log
-rw-r--r-- 1 root root 291M 2010-07-15 /usr/local/resource.tar.gz
-rw-r--r-- 1 root root 454M 12-03 20:29 /usr/local/resin/logs/access.log
-rw------- 1 root root 362M 12-03 20:25 /var/log/messages
-rw-r--r-- 1 root root 8.2G 12-02 23:59 /home/adlogs/adrequest.log.2011-12-02
-rw-r--r-- 1 root root 7.6G 12-03 20:29 /home/adlogs/adrequest.log
-rw-r--r-- 1 root root 8.1G 12-01 23:59 /home/adlogs/adrequest.log.2011-12-01
-rw-r--r-- 1 root root 405M 12-02 00:10 /home/adlogs_backup/adrequest.log.2011-12-01.tar.gz
-rw-r--r-- 1 root root 406M 12-03 00:09 /home/adlogs_backup/adrequest.log.2011-12-02.tar.gz








一、故障表现。首先一个应用或系统不正常,会表现在:1、前端应用/网页显示不正常,出错5XX,4XX或其他错误信息或慢或出不来;2、当前端端...
Lsof 看open file 被删除的: 13g 的日志放在/usr/local/nginx/logs下面; 在/ 上;
 
[root@166-88 /]# lsof |grep -i del
。。。
nginx      5219      root  DEL       REG                0,9             18446744073202310822 /dev/zero
nginx      5219      root    3w      REG              253,0 13127866257              2719794 /usr/local/nginx/logs/error.log (deleted)
nginx     24661      root    3w      REG              253,0 13127866257              2719794 /usr/local/nginx/logs/error.log (deleted)
         可以看到open file ,被删除了,但是空间没有释放;
         重启nginx
[root@SZT-AD-AFV-166-88 /]# service nginx stop; service nginx start
Stopping nginx...
 
查看某个应用软件打开的日志:如查看mq打开的日志,ps –ef|grep mq,找出pid为18787,然后 lsof –p 18787|grep log
[root@DB-241 bin]# ps -ef|grep mq
root     10686 10441  0 16:14 pts/1    00:00:00 grep mq
root     18787     1  0 Oct20 ?        00:13:07 /usr/local/jdk/bin/java -Xms2048M -Xmx2048M -Dorg.apache.activemq.UseDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties -Dcom.sun.management.jmxremote -Dactivemq.classpath=/usr/local/activemq-5.4.1/conf; -Dactivemq.home=/usr/local/activemq-5.4.1 -Dactivemq.base=/usr/local/activemq-5.4.1 -jar /usr/local/activemq-5.4.1/bin/run.jar start
[root@DB-241 bin]# lsof –p 18787|grep log
 
verify:--10次循环(每个挂载点写入100M的文件100次)
verify:
for i in 0 1 2 3 4 5 6 7 8 9 10
do
dd if=/dev/zero of=/home/service/$i/test.log bs=1048576 count=100
done
 
 
查看并升级DELL R510的Broadcom网卡驱动(网卡驱动有缺陷):
#!/bin/sh
#Checking network interface driver.
 
DRIVER_VER=`modinfo bnx2 | grep '\bversion' | awk '{print $2}'`
KERNEL=`modinfo bnx2 | grep filename | awk -F'/' '{print $4}'`
 
if [ $DRIVER_VER == "2.0.8e" ]
        then
                depmod -a && modprobe bnx2
                echo "Network interface driver was installed. It works well now." >> /root/check_net_driver.log
        else
            if [ $KERNEL == "2.6.18-164.el5" ]
                then
                    rpm -Uvh http://www.5iops.com/rhel_5.4_repo/5iops/netxtreme2-5.2.55-2.x86_64.rpm
                    depmod -a && modprobe bnx2 && echo "netxtreme2 installed"
            fi
            if [ $KERNEL == "2.6.18-164.el5 xen" ]
                then
                    rpm -Uvh http://www.5iops.com/rhel_5.4_repo/5iops/netxtreme2- xen-5.2.55-2.x86_64.rpm
                    depmod -a && modprobe bnx2 && echo "netxtreme2-xen installed"
            fi
fi
 
查一系列文件中的行数:如查看所有rpc_error*.log文件中的错误数
for file in `ls rpc_error*.log`; do echo $file; grep -c recommend $file; done
rpc_error_20111122.log          91190
rpc_error_20111123.log          88909
rpc_error_20111124.log          110018
rpc_error_20111125.log          134591
rpc_error_20111126.log          221625
rpc_error_20111127.log          237515
rpc_error_20111128.log          156007
rpc_error_20111129.log          192667
rpc_error_20111130.log          182664
rpc_error_20111201.log          117474
rpc_error_20111202.log          170258
 
 
调试进程:
strace –p pid
 
pstree|grep net
grep ^read abc.log
一、故障表现。首先一个应用或系统不正常,会表现在:1、前端应用/网页显示不正常,出错5XX,4XX或其他错误信息或慢或出不来;2、当前端端...
四、长期而坚持要做的:
1、  好用的运维平台。完善的运维 架构及说明文档;
2、  全面、及时、准确的监控系统或平台。最好有专门的运维工具开发团队(2-3人),专门负责小工具开发。
3、  变更管理。每一次修改及变更都有记录,操作步骤在执行前有人REVIEW(评估、复查);
4、  故障管理。每一次问题或故障都要设法找到根本原因。如果短时间找不到,要启用及时发现该问题的能力并绕过(如设定健康检测脚本重启服务)。故障与BUG均需要分级管理【P0~P4】。
5、  备份体系。不仅要有本地备份(应用与数据),而且还要有异地备份。任何情况下要做到即使系统全部破坏,我们还可以重建出来。
6、  容量规划。及时发现潜在或即将到来的瓶颈。
7、   架构设计并持续优化。设法排除单点,多机布署及负载均衡。架构的优化是长期的结果,也是最可以省成本的地方。
8、  人员的管理与培训。分享无时无处不在。




 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值