专栏名称: 数据分析与开发
伯乐在线旗下账号,分享数据库相关技术文章、教程和工具,另外还包括数据库相关的工作。偶尔也谈谈程序员人生 :)
目录
相关文章推荐
数据中心运维管理  ·  数据中心2025年的可持续性趋势 ·  昨天  
数据中心运维管理  ·  机房精密空调基础知识 ·  13 小时前  
数据中心运维管理  ·  2025 ... ·  3 天前  
数据中心运维管理  ·  机房搬迁方案 ·  5 天前  
51好读  ›  专栏  ›  数据分析与开发

在服务器上排除问题的头 5 分钟

数据分析与开发  · 公众号  · 数据库  · 2016-10-05 22:57

正文

(点击上方蓝字,快速关注我们)


英文:devo.ps

译者:伯乐在线 - 老码农

链接:http://blog.jobbole.com/36375/


我们团队为上一家公司承担运维、优化和扩展工作的时候,我们碰到了各种不同规模的性能很差的系统和基础设备(大型系统居多,比如CNN或者世界银行的系统)。要是再赶上修复时间紧、奇葩的技术平台、缺少信息和文档,基本上这过程都会惨痛到让我们留下深刻的记忆。


遇到服务器故障,问题出现的原因很少可以一下就想到。我们基本上都会从以下步骤入手:


一、尽可能搞清楚问题的前因后果


不要一下子就扎到服务器前面,你需要先搞明白对这台服务器有多少已知的情况,还有故障的具体情况。不然你很可能就是在无的放矢。


必须搞清楚的问题有:


  • 故障的表现是什么?无响应?报错?


  • 故障是什么时候发现的?


  • 故障是否可重现?


  • 有没有出现的规律(比如每小时出现一次)


  • 最后一次对整个平台进行更新的内容是什么(代码、服务器等)?


  • 故障影响的特定用户群是什么样的(已登录的, 退出的, 某个地域的…)?


  • 基础架构(物理的、逻辑的)的文档是否能找到?


  • 是否有监控平台可用? (比如Munin、Zabbix、 Nagios、 New Relic… 什么都可以)


  • 是否有日志可以查看?. (比如Loggly、Airbrake、 Graylog…)


最后两个是最方便的信息来源,不过别抱太大希望,基本上它们都不会有。只能再继续摸索了。

 

 

二、有谁在?


$ w

$ last


用这两个命令看看都有谁在线,有哪些用户访问过。这不是什么关键步骤,不过最好别在其他用户正干活的时候来调试系统。有道是一山不容二虎嘛。(ne cook in the kitchen is enough.)


三、之前发生了什么?


$ history


查看一下之前服务器上执行过的命令。看一下总是没错的,加上前面看的谁登录过的信息,应该有点用。另外作为admin要注意,不要利用自己的权限去侵犯别人的隐私哦。


到这里先提醒一下,等会你可能会需要更新 HISTTIMEFORMAT 环境变量来显示这些命令被执行的时间。对要不然光看到一堆不知道啥时候执行的命令,同样会令人抓狂的。


四、现在在运行的进程是啥?


$ pstree -a

$ ps aux


这都是查看现有进程的。 ps aux 的结果比较杂乱, pstree -a 的结果比较简单明了,可以看到正在运行的进程及相关用户。


五、监听的网络服务


$ netstat -ntlp

$ netstat -nulp

$ netstat -nxlp


我一般都分开运行这三个命令,不想一下子看到列出一大堆所有的服务。netstat -nalp倒也可以。不过我绝不会用 numeric 选项 (鄙人一点浅薄的看法:IP 地址看起来更方便)。


找到所有正在运行的服务,检查它们是否应该运行。查看各个监听端口。在netstat显示的服务列表中的PID 和 ps aux 进程列表中的是一样的。


如果服务器上有好几个Java或者Erlang什么的进程在同时运行,能够按PID分别找到每个进程就很重要了。


通常我们建议每台服务器上运行的服务少一点,必要时可以增加服务器。如果你看到一台服务器上有三四十个监听端口开着,那还是做个记录,回头有空的时候清理一下,重新组织一下服务器。


六、CPU 和内存


$ free -m

$ uptime

$ top

$ htop


注意以下问题:


 

七、硬件


$ lspci

$ dmidecode

$ ethtool


有很多服务器还是裸机状态,可以看一下:


 

八、IO 性能


$ iostat -kx 2

$ vmstat 2 10

$ mpstat 2 10

$ dstat --top-io --top-bio


这些命令对于调试后端性能非常有用。


 

九、挂载点 和 文件系统


$ mount

$ cat /etc/fstab

$ vgs

$ pvs

$ lvs

$ df -h

$ lsof +D / /* beware not to kill your box */


 

十、内核、中断和网络


$ sysctl -a | grep ...

$ cat /proc/interrupts

$ cat /proc/net/ip_conntrack /* may take some time on busy servers */

$ netstat

$ ss -s



你还可以看一下 Linux TCP tuning 了解网络性能调优的一些要点。

 

十一、系统日志和内核消息


$ dmesg

$ less /var/log/messages

$ less /var/log/secure

$ less /var/log/auth


 

十二、定时任务


$ ls /etc/cron* + cat

$ for user in $(cat /etc/passwd | cut -f1 -d:); do crontab -l -u $user; done


 

十三、应用系统日志


这里边可分析的东西就多了, 不过恐怕你作为运维人员是没功夫去仔细研究它的。关注那些明显的问题,比如在一个典型的LAMP(Linux+Apache+Mysql+Perl)应用环境里:


 

结论


经过这5分钟之后,你应该对如下情况比较清楚了:


 

你甚至有可能找到真正的故障源头。就算还没有找到,搞清楚了上面这些情况之后,你现在也具备了深挖下去的条件。继续努力吧!



关注「数据库开发」

看更多精选技术文章

↓↓↓