我通常严格保持此博客的技术性,将观察、意见等保持在最低限度。然而,这篇文章将涵盖那些刚刚进入sysadmin/SRE/systemengineer/sysops/devops-ops(随便你怎么称呼自己)角色的人的通用基础知识。跟我来!“我的网站很慢!”我只是随机选择了本文的问题类型,它也可以应用于任何与系统管理员相关的故障排除。我并不是要炫耀能发现最多信息的最聪明的“金句”。它也不是一个详尽的、一步一步的“流程图”,导致最后一个框中的“利润”一词。我将通过一些示例展示一般方法。示例场景仅用于说明目的。他们有时会做出并不适用于所有情况的假设,而且肯定会有很多读者在某个时候说“哦,但我想你会发现......”。但这可能没有抓住要点。十多年来,我一直在支持或支持机构工作,有一件事一次又一次地打动我,并促使我写这篇文章。许多技术人员在遇到问题时的本能反应是毫不费力地尝试可能的解决方案。“我的网站很慢,所以”,我将尝试增加MaxClients/MaxRequestWorkers/worker_connections我将尝试增加innodb_buffer_pool_size/effective_cache_size我将尝试启用mod_gzip(不幸的是,这是真实的故事)”我已经看到这个问题,它是出于某种原因而存在的-所以我认为这就是原因,它应该可以解决问题。”这浪费了很多时间,让你在黑暗中盲目奔跑和摆弄。您的InnoDB缓冲池可能处于100%的利用率,但这可能只是因为有人已经运行了一段时间的一次性大型报告。如果不排除这种情况,您就是在浪费时间。在开始这里之前,我应该注意虽然这些建议同样适用于许多角色,但我是从一般支持系统管理员的角度写作的。在成熟的内部组织中,或者在与更大的、规范的或“企业级”客户合作时,您通常会对所有内容进行检测、测量、映射、组织(甚至不是文本)和警报。那么你的做法也会趋于不同。让我们暂时忽略这种情况。如果你没有这样的东西,请随意。澄清问题首先要确定问题到底是什么。“慢”可以有多种形式。是第一个字节的时间吗?从可怜的Javascript加载和每次页面加载拉取15MB的静态内容,这是一个完全不同的问题。是慢了,还是比平时慢了?这是两种截然不同的解决方案!在你开始做某件事之前,确保你知道实际报告和遇到的问题是什么。找到问题的根源往往很困难,但即使找不到,也必须找到问题本身。否则,这相当于系统管理员带着刀去枪战。触手可及首次登录可疑服务器时,您可以查找一些常见的可疑对象。事实上,你应该!每当我登录到服务器时,我都会发出一些命令来快速检查一些事情:我们是否正在分页(free/vmstat),磁盘是否繁忙(top/iostat/iotop),是否有任何数据包丢失(netstat/proc/net/dev),它是否处于连接过多的状态(netstat),是否占用了CPU(顶部),此服务器上的用户(w/who),syslog和dmesg中是否有任何引人注目的消息?如果您从RAID控制器收到2000条消息,抱怨直写式高速缓存不工作,则没有继续的意义。不需要半分钟。如果没有什么引起你的注意-然后继续。如果某处确实存在问题并且无法找到现成的信息,请重现问题。然后采取所有步骤尝试重现该问题。当您可以重现问题时,您可以观察它。当你能观察时,你就能解决。如果问题不明显或未在第一步中涵盖,请询问报告问题的人需要采取哪些具体步骤来重现该问题。并非总能重现由太阳耀斑或仅在OS/2上运行的客户端引起的问题。但是您的第一站应该是至少尝试一下!一开始,您所知道的只是“有人认为他们的网站速度很慢”。对于这些人,他们可能仍在使用他们的GPRS电话,或者他们可能正在安装Windows更新。不管你在这里挖多深,都是浪费时间。试图重现!检查日志我对不得不包含这个感到难过。但我见过有人运行tail/var/log/...几分钟,然后就停止寻找了。大多数*NIX工具都特别喜欢日志记录。任何明显的错误都将显着显示在大多数应用程序日志中。查看。缩小范围如果没有明显的问题,但您可以重现所报告的问题,那也很好。所以,您现在知道网站速度很慢。现在您已经将范围缩小到:浏览器的呈现/错误、应用程序代码、DNS基础设施、路由器、防火墙、网卡(所有这些)、以太网电缆、负载平衡器、数据库、缓存层、会话存储、网络服务器软件,应用程序服务器、内存、CPU、RAID卡、磁盘等。根据设置添加一些其他可能的罪魁祸首。它们也可以是SAN,不要忘记硬件WAF!而且......你明白我的意思。如果问题出在第一个字节的时间上,您当然会开始对Web服务器应用已知的修复程序,它的响应速度很慢,您会认为差不多就是这样,对吧?但你错了!您返回并尝试重现该问题。只有这一次,您要尝试尽可能多地消除潜在的问题来源。您可以很容易地消除绝大多数可能的罪魁祸首:您可以从服务器本地重现问题吗?恭喜,您节省了自己尝试修复BGP路由的时间。如果没有,请尝试同一网络上的另一台计算机。如果可以的话,至少你可以将防火墙移到你的可疑列表中,(但要留意那个开关!)是否所有连接都很慢?仅仅因为该服务器是Web服务器并不意味着您不应该尝试使用其他类型的服务重现该问题。netcat在这些场景中非常有用(但你的SSH连接可能一直滞后,这可以作为线索)!如果这也很慢,你至少知道你很可能有网络问题,并且可以忽略整个网络软件及其所有组件的问题。使用这些知识(我不会收取200美元)再次从顶部开始,并由内而外地工作!即使您可以在本地复制-仍然有很多“因素”。让我们排除一些变量。你能用普通文件复制它吗?如果i_am_a_1kb_file.html很慢,您知道这不是数据库、缓存层或操作系统和Web服务器本身以外的任何问题。您能否使用需要解释或执行的hello_world.(py|php|js|rb..)文件重现该问题?如果可以的话,你已经大大缩小了范围,你可以专注于一些事情。如果hello_world立即运行,您仍然学到了很多东西!您知道没有任何明显的资源限制、任何完整的队列或IPC调用卡在任何地方,所以这就是应用程序正在做的事情或它正在谈论的通信问题。所有页面都慢吗?或者只是那些从第三方加载“实时比分数据”的?它归结为:您仍然可以重现问题的最少“因素”是多少?我们的示例是一个慢速站点,但这同样适用于几乎所有问题。邮件派送?可以送货到当地吗?可以发给自己吗?你能把它发给
