在承担上一家公司的运维、优化和扩展工作期间,我们团队面临了各种规模不同、性能极差的系统和基础设备(主要是大型系统,如CNN或世界银行的系统)。特别是在修复时间紧迫、技术平台奇葩、信息和文档缺乏的情况下,这一过程往往充满挑战,让我们留下了深刻的印象。
遇到服务器故障时,很少能立即找到问题根源。我们通常从以下步骤开始:一、尽可能了解问题的起因和结果,不要着急直接去处理服务器,而是需要先搞清楚关于该服务器的已知信息以及故障的具体表现。否则,你可能会东猜西想,一事无成。需要搞清楚的问题包括:1.故障表现是什么?无响应?报错?2.故障何时发生?3.故障是否可复现?4.是否存在规律性(如每小时出现一次)?5.最近一次对整个平台的更新内容是什么(代码、服务器等)?6.故障影响的特定用户群体是什么(已登录用户、退出用户、特定地域的用户等)?7.基础架构(物理、逻辑)的文档是否可用?8.是否可用监控平台(如Munin、Zabbix、Nagios、NewRelic等)?9.是否有可查看的日志(如Loggly、Airbrake、Graylog等)?
二、确定在场人员。用以下两个命令查看当前在线用户以及访问情况。这不是关键步骤,但最好不要在其他用户正在使用系统时进行调试。一个坏事不会引起第二个嘛。
三、回顾之前的事件。查看之前在服务器上执行过的命令。结合先前查看的登录信息,可能会有所帮助。作为管理员要注意,不要滥用权限侵犯他人隐私。在此提醒,可能需要更新HISTTIMEFORMAT环境变量以显示命令执行时间,否则只看到一堆命令而不知何时执行也会令人沮丧。
四、查看正在运行的进程。使用$pstree -a$和$ps aux$命令查看当前进程。ps aux的结果比较混乱,而pstree -a的结果更清晰,可以看到正在运行的进程及相关用户。
五、检查网络服务监听。逐一运行$netstat -ntlp$、$netstat -nulp$和$netstat -nxlp$命令,而非一次性列出所有服务,尽管netstat -nalp也可行。发现所有正在运行的服务,检查其是否正常运行,并查看各监听端口。netstat显示的服务列表中的PID与ps aux进程列表中的相同。如果服务器上有多个Java或Erlang等进程同时运行,按PID分辨每个进程至关重要。通常建议每台服务器运行较少服务,必要时可增加服务器。若发现一台服务器开着三四十个监听端口,最好记录下来,然后在有空时进行清理和重新组织。
六、监控CPU和内存使用情况。使用$free -m$、$uptime$、$top$、$htop$查看内存和CPU使用情况。关注问题点包括:1.是否有剩余内存?服务器是否在进行内存与硬盘之间的swap?2.是否有剩余CPU?服务器是几核的?是否有某些CPU核负载过高?3.服务器的最大负载来自何处?平均负载是多少?
八、检查IO性能。使用$iostat -kx 2$、$vmstat 2 10$、$mpstat 2 10$、$dstat --top-io --top-bio$等命令,检查后端性能。检查硬盘使用情况,确保服务器硬盘未满。这些命令在诊断后端性能问题上非常有用。
标签: 服务器架构、 服务器、本文地址: https://yihaiquanyi.com/article/ad70fc98eb2e059405c4.html
上一篇:揭秘苏州服务器机房高电机柜租用费用的构成...