`
san_yun
  • 浏览: 2594693 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

故障排除的第一个五分钟

 
阅读更多

原文:http://junqili.com/linux/troubleshooting-5minutes/

 

故障排除的第一个五分钟

在处理日常运维、优化和扩展性问题的时候,经常碰到了各种不同规模的性能很差的系 统和基础设施(通常是大规模的,比如 CNN 或者世界银行的系统)。再加上修复时间紧迫、 奇葩的技术平台、缺少信息和文档,基本上这过程都会惨痛到让我们留下深刻的记忆。

造成故障的原因大多数情况是不明显的:这里有一些我们通常开始做的事情。


获取上下文信息

不要急于去服务器操作,需要搞清楚对服务器和这个特定故障到底了解多少。你不希望 浪费你的时间在黑暗中排除(故障)。 一些“必须了解”的问题:

  • 问题的确切表现是什么?没有反应?出现错误?
  • 问题什么时间开始被注意到?
  • 问题是否可重现?
  • 有无任何规律(比如每小时发生一次)?
  • 平台最近一次改变是什么(code, servers, stack)?
  • 问题是否会影响特定用户段(登录,登出,定位...)?
  • 有没有任何关于这个体系结构(物理或逻辑)的相关文档?
  • 是否有相关监控平台?Munin,Zabbix,Nagios, New Relic...或任何其他监控平台
  • 有没有任何(集中化)日志?Loggly, Airbrake, Graylog...

最后两点是最便利的信息来源,但是别期望太多:它们通常也是那些会失去的东西。虽 然没有这些信息,但是要做个纪录并让其恢复且继续运行。

补充说明:

    1. 对于监控工具Zabbix,Nagios大家可能比较熟悉,简单介绍下MuninNewRelic
    2. +Munin是一款网络化资源监控工具,能够帮助分析资源的趋势和刚刚发生了什么导致性能降低这些问题。它的设计特点是即插即用,有句话这样评价MuninPlugin而亮。默认安装已经提供了大量画图。Munin是一个 server-nodes 结构,一个 server 对应多台 node,每台 node 都是被监控节点,server 是统计 node 的数据并进行绘图生成 html 的节点。
    3. +NewRelic是一款基于SaaS的云端应用监测与管理平台,NewRelic供服务包括终端用户行为监控、应用监控、数据库监控、基础底层监控甚至单个平台的监控,能为应用的健康提供实时的可预见性。支持用RubyPHPJava、.NET 以及Python等语言写的应用以及Android IOS 平台移动应用监控。
    4. 三个日志工具简单介绍。
    5. + loggly 提供日志即服务(logging as a service)。它支持日志管理并允许用户很容易检索和导航日志。采用Syslog和提供 REST API 进行日志收集,loggly 很容易安装并且提供对应用程序中心化视图,这意味着不需 SSH 到机器上进行Tail日志。loggly 也提供作为衡量应用程序性能的日志分析。
    6. +Airbrake提供错误管理即服务(error mangagement as a service),收集其他应用程序产生的错误并进行结果聚合用以回顾。使用Airbrake,可以实时查看并追踪错误,从而快速修复这些问题。这种方式避免了直接查看日志进行错误管理。同时它也支持 REST API
    7. +Graylog是开源 syslog 实现并将日志存储在MongoDB中,它由两部分组成:采用 java 编写的服务端通过 TCP 或者 UDP 接收 syslog messages 存储在数据库中;采用 ROR 实现的 WEB 界面允许你查看日志消息。

有哪些用户

    1. $ w
    2. $ last

不是最关键的,但是你最好别在一台其他人测试的机器上进行故障排除,就像一个 人在厨房做饭就足够了。

补充说明

    1. w 执行这项指令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行 w 命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。

w command

    1. lastlastb都是列出目前和过去登录的用户信息,这两个命令对于追踪一般账号者的使用行为很有帮助。
    2. +last查找文件/var/log/wtmp 并列出自从文件创建时登录和登出的用户列表,列表显示用户名或 tty 名称。文件/var/log/wtmp 记录正确登录系统者的用户信息,包括每个用户登录、注销及系统的启动、停机的时间。
    3. + lastb 命令与last类似,只是默认它显示的文件/var/log/btmp,该文件记录错误登录时所使用账户信息。必须指出无论是读 btmp 还是 wtmp。都只是默认行为。last(lastb)可以通过-f 参数指定文件。比如last-f var/log/btmp 行为与 lastb 一样。
    4. 与用户登录相关的日志文件(这些文件都可以作为last[lastb]的参数)
    5. +/var/log/btmp 记录所有失败登录信息
    6. +/var/log/lastlog 记录所有用户的最近信息
    7. +/var/log/wtmp 或/var/log/utmp 包含登录信息。使用 wtmp 可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等。
    8. +/var/log/faillog 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。

刚刚执行了什么

    1. $ history

查看历史通常是很好的;结合上一步知道的哪些用户在这台机器的信息。 简单思考过后,你可能会想更新环境变量 HISTTIMEFORMAT 来追踪这些命令执行的时间。没有什么比调查一段过时的命令列表让人更沮丧...

补充说明

    1. 教训:个人有两次误删数据都是从历史命令中查出问题的
    2. 两个与 history 相关的环境变量:$HISTSIZE $HISTTIMEFORMAT,设置后者可以解决默认历史命令不显示时间的问题

正在运行什么

    1. $ pstree -a
    2. $ ps aux

虽然 ps aux 的信息可能会很冗长,pstree -aup 却给你很好的浓缩的关于正在运行 的进程和调用进程的用户信息,可以纵览整个进程树结构。

补充说明

    1. PS 查看进程常见命令
    2. 内存使用排序 ps -e -o "%C : %p : %z : %a"|sort -k5 -nr
    3. CPU 使用排序 ps-e -o"%C :%p:%z:%a"|sort -nr
    4. 清除僵死进程 ps -eal | awk '{ if ($2 == "Z") {print $4}}'| kill -9

监听的服务

    1. $ netstat -ntlp
    2. $ netstat -nulp
    3. $ netstat -nxlp

虽然 netstat -nalp 能做所有的事情,我倾向于单独执行它们,主要是因为不想同时 查看所有的服务。

识别正在运行的服务并确定它们是否是期望运行的。查看不同的监听端口,你可以始终 将 PID 与 ps aux 的输出进行匹配;这会非常有用特别是当你杀掉同时在运行的多个 Java 或 Erlang 进程。

我们通常偏向于在每台机器上运行着较少数量的服务,必要时可以通过增加机器。如果 你看到很多监听端口你或许应该去思考并做进一步调查,看看有哪些可以清理或者重组。

补充说明

    1. netstat 常见统计
    2. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'
    3. netstat -an -t | grep ":80"| grep ESTABLISHED | awk '{printf"%s %s\n",$5,$6}'| sort
    4. ss ip 取代 netstat【想要知道原因的请查看 http://roclinux.cn/?p=2420】
    5. man netstat 时会看到这句话This program is obsolete.替代 netstat 的是 ss 命令。替代 netstat -r 的是 ip route。替代 netstat -i 的是 ip -s link。替代 netstat -g 的是 ip maddr。具体对应关系如下图所示。

ss ip command


CPU和RAM

    1. $ free -m
    2. $ uptime
    3. $ top
    4. $ htop

这应该能回答一些问题:

  • 是否有任何可用内存?是交换内存吗?
  • 是否有 CPU 剩余可用?服务器上有多少 CPU 核可用?是否有 CPU 核过载?
  • 什么导致最多负载?平均负载是多少?

补充说明

    1. load average 可以理解为每秒钟 CPU 等待运行的进程个数.Linux系统中, sar -quptimewtop 等命令都会有系统平均负载 load average 的输出,那么什么是系统平均负载呢?系统平均负载被定义为在特定时间间隔内运行队列中的平均任务数。如果一个进程满足以下条件则其就会位于运行队列中:
    2. +它没有在等待 I/O 操作的结果
    3. +它没有主动进入等待状态(也就是没有调用'wait')
    4. +没有被停止(例如:等待终止)
    5. htop 是一个交互式动态进程查看器。与Linux传统的 top 相比,htop 更加人性化。它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作,杀进程也不需要进程号

htop command


硬件

    1. $ lspci
    2. $ dmidecode
    3. $ ethtool

依然有很多裸机服务器,这可以帮你回答以下问题:

  • 识别 RAID 卡(以及是否有 BBU 备用电池?),CPU,以及可用的内存槽位。这可能给 你一些在潜在的问题追踪或性能提升方面的提示。
  • 网卡是否正确设置?是否运行在半双工模式?网速是 10MBps?任何发送/接收错 误?

补充说明

    1. dmidecode 这款软件允许你在Linux系统下获取有关硬件方面的信息。 dmidecode 遵循 SMBIOS/DMI 标准,其输出的信息包括 BIOS、系统、主板、处理器、内存、缓存等等。CMDB/监控系统获取机器硬件等基础信息比如 SN 号使用。
    2. ethtool 用于查询及设置网卡参数的命令
    3. + ethtool ethX //查询 ethX 网口基本设置
    4. + ethtool h //显示 ethtool 的命令帮助(help)
    5. + ethtool i ethX //查询 ethX 网口的相关信息
    6. + ethtool d ethX //查询 ethX 网口注册性信息
    7. + ethtool r ethX //重置 ethX 网口到自适应模式
    8. + ethtool S ethX //查询 ethX 网口收发包统计
    9. + ethtool sethX[speed10|100|1000]//设置网口速率10/100/1000M

IO 性能

    1. $ iostat -kx 2
    2. $ vmstat 210
    3. $ mpstat 210
    4. $ dstat --top-io --top-bio

这些命令对于分析后端性能非常有用。

  • 查看磁盘使用:盒子是否有文件系统/磁盘的磁盘使用率达到 100%
  • 交换分区目前是否在使用(si/so)?
  • 什么最占用 CPU:system?user?stolen(vm)?
  • dstat 是我的最爱。什么进程在使用 IO?是 MySQL 在吸收资源呢还是 PHP 进程?

补充说明

    1. dstat 使用简便记法:dstat 命令很强大,但是命令选项比较多很难记。但是对于做运维的却很好记忆只需要记住【-lamps】即可。

dstat command

    1. vmstat/iostat/mpstat
    2. + vmstat监视内存使用情况:vmstatVirtualMeomoryStatistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU 活动进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。
    3. + iostat 监视 I/O 子系统情况:iostat I/O statistics(输入/输出统计)的缩写,iostat 工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU 使用情况。同 vmstat 一样,iostat 也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
    4. + mpstat MultiprocessorStatistics的缩写,是实时系统监控工具。其报告与 CPU 的一些统计信息,这些信息存放在/proc/stat 文件中。在多CPUs系统里,其不但能查看所有 CPU 的平均状况信息,而且能够查看特定 CPU 的信息。使用 mpstat -P ALL 可查看所有核。

挂载点和文件系统

    1. $ mount
    2. $ cat /etc/fstab
    3. $ vgs
    4. $ pvs
    5. $ lvs
    6. $ df -h
    7. $ lsof +D //* beware not to kill your box */
  • 有多少文件系统被挂载?

  • 是否存在某些服务有专用挂载点(可能是 MySQL...)?

  • 文件系统的挂载选项:noatime?default?是否有文件系统被重新挂载为只读?

  • 磁盘是否有剩余空间?

  • 是否有任何大文件(删除文件)没有被刷新?

  • 如果磁盘空间成为问题是否有剩余空间用以扩展分区?

补充说明

    1. 常见设备 mount 操作
    2. + USB 设备:mkdir /mnt/usb;mount -t vfat /dev/sda /mnt/usb
    3. +光盘设备:mkdir /mnt/cdrom;mount -t iso9660 /dev/cdrom /mnt/cdrom
    4. + ISO 文件:mount -o loop pes6.iso /mnt/cdrom
    5. LVM 逻辑卷的创建,使用,删除
    6. +创建逻辑卷
    7. + pvcreate 将物理硬盘格式化成 PV(物理卷)
    8. + vgcreate 创建 VG(卷组),并将 PV 加入到卷组
    9. + lvcreate 基于 VG(卷组)创建 LV(逻辑卷)
    10. +使用逻辑卷:格式化【如 mkfs.ext4】后再 mount
    11. +删除逻辑卷: umount -> lvremove -> vgremove -> pvremove

内核,中断和网络

    1. $ sysctl -a | grep ...
    2. $ cat /proc/interrupts
    3. $ cat /proc/net/ip_conntrack /* may take some time on busy servers */
    4. $ netstat
    5. $ ss -s
  • 中断请求是否在 CPU 之间均衡负载?或者是否某个核因为网络中断,RAID 卡等造成 过载?

  • SWAP 设置多少?对于工作站 60 就够了,但是对于服务器这通常是一个坏主意:你 不希望你的服务器总是在交换。否则当数据在读写在进行磁盘读写时你的交换进程 将会被锁住。

  • conntrack_max 是否设置得足够高以处理网络流量?

  • TCP 连接不同状态花费多长时间(TIME_WAIT,...)?

  • netstat 在显示所有存在得连接时可能很慢,你可能会使用 ss 来获取一个概况。

查看Linux TCP Tuning以获取更多 信息作为如何优化网络栈指南。

关于中断亲和力以及线程化我之前有篇博客谈到过。


系统日志和内核消息

    1. $ dmesg
    2. $ less /var/log/messages
    3. $ less /var/log/secure
    4. $ less /var/log/auth
  • 查看任何错误或警告消息;它是否分解了关于你的 conntrack 连接数设置过高的问 题?

  • 是否看见硬件错误或者文件系统错误?

  • 能否关联这些事件的事件和之前获取到的信息?

补充说明

    1. /var/log/messages 包括整体系统信息,其中也包含系统启动期间的日志。此外, mail,cron,daemon,kern auth 等内容也记录在var/log/messages 日志中。几乎系统发生的所有错误信息(或者重要信息)都会记录在这个文件里,这几乎是系统发生莫名错误必查的文件。
    2. /var/log/dmesg 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用 dmesg 查看它们。
    3. /var/log/secure 包含验证和授权方面信息。例如,sshd 会将所有信息记录(其中包括失败登录)在这里。基本上,只要涉及到需要输入账号密码的软件,那么当登录时(无论正确错误)都会记录到这个文件。包括系统的 login 程序,图形界面登录所使用的 gdm 程序,su, sudo 等程序还有网络连接的 ssh,telnet 等程序。
    4. /var/log/auth 包含系统授权信息,包括用户登录和使用的权限机制等。

定时任务

    1. $ ls /etc/cron*+ cat
    2. $ for user in $(cat /etc/passwd | cut -f1 -d:);do crontab -l u $user;done
  • 是否有定时任务执行太过频繁?

  • 是否存在某些用户的定时任务被隐藏?

  • 在出现问题时是否有一些备份在运行?

补充说明

    1. /var/log/cron 每当 cron 进程开始一个工作时,就会将相关信息记录在这个文件中。
    2. 在/etc/cron.d/目录下建立的 cron 文件如果一个文件里有多条 cron,且最后通过2>&1重定向输出,换行必须是 unix 格式的,如果是 dos 格式换行,bash 报错,cron 是无法正常执行的。
    3. [Cron串行化](http://lilinux.tk/blog/2013/05/cron-sequential/)

应用程序日志

这里有很多可以分析的地方,但是它可能却是你开始不肯花时间的地方,你关注的是前面提 到的那些。就 LAMP 为例:

  • Apache & Nginx;追溯 access log 和 error log,查找 5XX 错误和可能的 limit_zone 错误。

  • MySQL; 查看 mysql.log 中的错误,追踪损坏的数据库表,同时 innodb 启动恢复 进程。

  • PHP-FPM;如果启用 php-slow log,深挖日志并尽量找到错误 (php,mysql,memcache...)。如果没有,那就启用。

  • Varnish; 在 varnishlog 和 varnishstat 中,检查 hit/miss 比率。是否有配置 中的规则未命中而导致最终用户回源。

  • HA-Proxy;后端的状态是什么?健康检查是否成功?是否达到前端或者后端最大队 列大小?


总结

经过这开始的 5 分钟你应该能够更好的了解到:

  • 正在运行什么

  • 问题是否与 IO/硬件/网络或配置(不好的代码,内核优化...)相关

  • 是否注意到某个现象:例如滥用数据库索引,或者太多 apache 工作进程

你甚至可能发现问题确切的最根本的原因。如果没有,在你了解了上面提到的这些信息之后, 也应该具有作为继续深挖的条件。

分享到:
评论

相关推荐

    计算机网络故障诊断与排除课件(11讲)

    TCPIP故障诊断与排除【】第6讲:计算机网络故障诊断与排除 广域网络故障诊断与排除【】第5讲:计算机网络故障诊断与排除 以太网络故障 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    路由协议故障排除(V2[1].0)

    路由协议故障排除(V2[1].0),RIP故障排除,课程设计

    Linux系统故障诊断与排除

    全书共分15章:第1章介绍系统引导、启动和关闭问题,这是所有Linux用户都会碰到的基本问题;第2章介绍系统运行中可能出现的错误;第3章、第4章介绍性能与性能相关的工具;第5章至第7章介绍主要存储硬件及其故障诊断...

    网络故障诊断与排除(H3CTE教程).rar

    第1章故障排除概述 第2章物理层及以太网故障排除 第3章广域网故障排除 第4章TCP-IP故障排除 第5章路由协议故障排除 第6章安全及拨号业务故障排除 第7章中低端Lanswitch故障排除(修改后)

    计算机网络故障诊断与排除(第2版)PPT

    3.5.1 故障排除实例一 79 3.5.2 故障排除实例二 80 3.5.3 故障排除实例三 80 3.5.4 故障排除实例四 81 3.5.5 故障排除实例五 81 3.5.6 ADSL兼容性掉线问题 81 3.5.7 VLAN问题 82 3.5.8 VLAN故障 84 3.5.9 装完...

    第1课:VLAN 故障排除 .pka

    网络安全运维拓扑图

    ABB IRC5系列机器人控制器故障排除手册第一部分.pdf

    ABB IRC5系列机器人控制器故障排除手册第一部分pdf,ABB IRC5系列机器人控制器故障排除手册第一部分

    H3C故障排除资料.zip

    第1章故障排除概述,pdf 第2章设备启动、以太网及广域网接口故障排除,pdf 第3章数据链路层故障排除pdf 第4章路由协议故障排除pdf 第5章网络应用故障排除,pdf 第6章安全vPN故障排除pdf 第7章故障排除模拟测试pdf

    网管必读-故障排除(第2版)

    本书是《网管员世界》杂志社推出的《网管员必读—故障排除》一书的升级版本,《网管员必读—故障排除》是《网管员世界》杂志社推出的一本集知识性和实用性于一体的网络管理技术书籍,书中收集了《网管员世界》杂志自...

    第8课:企业网络故障排除 1.rar

    网络安全运维拓扑图

    监控系统故障排除方法.docx

    监控系统故障排除方法全文共4页,当前为第1页。监控系统故障排除方法全文共4页,当前为第1页。监控系统常见故障排除方法 监控系统故障排除方法全文共4页,当前为第1页。 监控系统故障排除方法全文共4页,当前为第1页...

    H3CIE-RS+学习指导书【合并版】.rar

    网络故障诊断与排除_第1章_故障排除概述_v3 网络故障诊断与排除_第2章_设备启动、广域网接口及以太网故障排除_v3 网络故障诊断与排除_第3章_数据链路层故障排除_v3 网络故障诊断与排除_第4章_路由协议故障排除_v3...

    电脑硬件常见故障分析排除手册全集

    第一章CPU的典型故障剖析  常见的CPU故障大致有以下几种:散热故障、重启故障、黑屏故障及超频故障。由于CPU本身出现故障的几率非常小,所以大部分故障都是因为用户粗心大意造成的。  案例一:CPU针脚接触不良,...

    第04讲_1_以太网组网及故障排除1.ppt让你更好了解

    第04讲_1_以太网组网及故障排除1.ppt让你更好了解

    华为公司排错专家--第3章 广域网故障排除.ppt

    华为网络产品应用越来越普及,网络设备的日常维护和故障管理成为网络维护人员必须具备的一种能力。 掌握网络故障排除一般步骤 掌握常用故障诊断工具 掌握华为网络产品故障排除常用方法

    华为公司排错专家--第4章 TCP/IP故障排除.ppt

    华为网络产品应用越来越普及,网络设备的日常维护和故障管理成为网络维护人员必须具备的一种能力。 掌握网络故障排除一般步骤 掌握常用故障诊断工具 掌握华为网络产品故障排除常用方法

    服务器设备故障排除内容(服务器设备维保资料).doc

    1 服务器设备故障排除 保修合同生效后,系统发生故障后每次服务流程如下: 报修 系统发生故障,客户可在第一时间内与我公司项目经理(责任工程师)取得联系,说明 客户单位、故障机型,尽可能说明故障现象以及可能的...

    《笔记本电脑故障应急速查万用全书》第五章_笔记本电脑外设与数码设备故障的诊断与排除

    围绕着笔记本电脑而诞生的外设可谓种类繁多,外接光驱、网 卡、键盘鼠标等,都属于笔记本电脑的外设。...如何解决这些故障,成了一个难题。本 章就为大家介绍笔记本电脑外设常见故障的诊断与排除。

    华为公司排错专家--第5章 路由协议故障排除.ppt

    华为网络产品应用越来越普及,网络设备的日常维护和故障管理成为网络维护人员必须具备的一种能力。 掌握网络故障排除一般步骤 掌握常用故障诊断工具 掌握华为网络产品故障排除常用方法

Global site tag (gtag.js) - Google Analytics