系统管理员入门:排除故障


系统管理员入门:排除故障

文章插图
 
“我的网站很慢!”
-- Erik Ljungstrom(作者)
我通常会严格保持此博客的技术性,将观察、意见等内容保持在最低限度 。但是,这篇和接下来的几篇文章将介绍刚进入系统管理/SRE/系统工程师/sysops/devops-ops(无论你想称自己是什么)角色的常见的基础知识 。
请跟我来!
“我的网站很慢!”
我只是随机选择了本文的问题类型,这也可以应用于任何与系统管理员相关的故障排除 。我并不是要炫耀那些可以发现最多的信息的最聪明的“金句” 。它也不是一个详尽的、一步步指导的、并在最后一个方框中导向“利润”一词的“流程图” 。
我会通过一些例子展示常规的方法 。
示例场景仅用于说明本文目的 。它们有时会做一些不适用于所有情况的假设,而且肯定会有很多读者在某些时候说“哦,但我觉得你会发现……” 。
但那可能会让我们错失重点 。
十多年来,我一直在从事于支持工作,或在支持机构工作,有一件事让我一次又一次地感到震惊,这促使我写下了这篇文章 。
有许多技术人员在遇到问题时的本能反应,就是不管三七二十一去尝试可能的解决方案 。
“我的网站很慢,所以”,
  • 我将尝试增大 MaxClients/MaxRequestWorkers/worker_connections
  • 我将尝试提升 innodb_buffer_pool_size/effective_cache_size
  • 我打算尝试启用 mod_gzip(遗憾的是,这是真实的故事)
“我曾经看过这个问题,它是因为某种原因造成的 —— 所以我估计还是这个原因,它应该能解决这个问题 。”
这浪费了很多时间,并会让你在黑暗中盲目乱撞,胡乱鼓捣 。
你的 InnoDB 的缓冲池也许达到 100% 的利用率,但这可能只是因为有人运行了一段时间的一次性大型报告导致的 。如果没有排除这种情况,那你就是在浪费时间 。
开始之前在这里,我应该说明一下,虽然这些建议同样适用于许多角色,但我是从一般的支持系统管理员的角度来撰写的 。在一个成熟的内部组织中,或与规模较大的、规范管理的或“企业级”客户合作时,你通常会对一切都进行检测、测量、绘制、整理(甚至不是文字),并发出警报 。那么你的方法也往往会有所不同 。让我们在这里先忽略这种情况 。
如果你没有这种东西,那就随意了 。
澄清问题首先确定实际上是什么问题 。“慢”可以是多种形式的 。是收到第一个字节的时间吗?从糟糕的 JAVAscript 加载和每页加载要拉取 15 MB 的静态内容,这是一个完全不同类型的问题 。是慢,还是比通常慢?这是两个非常不同的解决方案!
在你着手做某事之前,确保你知道实际报告和遇到的问题 。找到问题的根源通常很困难,但即便找不到也必须找到问题本身 。
否则,这相当于系统管理员带着一把刀去参加枪战 。
唾手可得首次登录可疑服务器时,你可以查找一些常见的嫌疑对象 。事实上,你应该这样做!每当我登录到服务器时,我都会发出一些命令来快速检查一些事情:我们是否发生了页交换(free / vmstat),磁盘是否繁忙(top / IOStat / iotop),是否有丢包(netstat / proc/net/dev),是否处于连接数过多的状态(netstat),有什么东西占用了 CPU(top),谁在这个服务器上(w / who),syslog 和 dmesg 中是否有引人注目的消息?
如果你从 RAID 控制器得到 2000 条抱怨直写式缓存没有生效的消息,那么继续进行是没有意义的 。
这用不了半分钟 。如果什么都没有引起你的注意 —— 那么继续 。
重现问题如果某处确实存在问题,并且找不到唾手可得的信息 。
那么采取所有步骤来尝试重现问题 。当你可以重现该问题时,你就可以观察它 。当你能观察到时,你就可以解决 。如果在第一步中尚未显现出或覆盖了问题所在,询问报告问题的人需要采取哪些确切步骤来重现问题 。
对于由太阳耀斑或只能运行在 OS/2 上的客户端引起的问题,重现并不总是可行的 。但你的第一个停靠港应该是至少尝试一下!在一开始,你所知道的是“某人认为他们的网站很慢” 。对于那些人,他们可能还在用他们的 GPRS 手机,也可能正在安装 windows 更新 。你在这里挖掘得再深也是浪费时间 。
尝试重现!
检查日志我对于有必要包括这一点感到很难过 。但是我曾经看到有人在运行 tail /var/log/... 之后几分钟就不看了 。大多数 *NIX 工具都特别喜欢记录日志 。任何明显的错误都会在大多数应用程序日志中显得非常突出 。检查一下 。


推荐阅读