我有一个在 Ubuntu Natty/11.04 上运行 LAMP 的 Amazon EC2 实例。在过去几个月内的三个不同场合,其中两个在过去两周内,服务器刚刚……停止了。它变得无响应并停止响应连接尝试(SSH 或其他方式),但 EC2 控制面板仍将其报告为正在运行。每次我不得不通过控制台重启实例,随之而来的数据丢失。
所以,现在我正在尝试诊断这个问题,但我却是一片空白,我需要关于要检查什么的建议。Syslog 不包含任何可疑内容——每次发生的最后一件事都是 munin 运行其常规的 5 分钟 cronjob,尽管由于我不知道机器何时停止工作,我不能说 cron 日志有多接近到冻结的地步。在那之后,就好像机器在重新启动之前根本没有运行,在此之后 syslog 包含在我看来像正常 dmesg 输出的内容。
交通量和这些冻结的时间之间似乎没有相关性。每个场合都远离高峰交通时间。
我还可以查看什么来尝试找出导致这些问题的原因?可能是什么问题?
附录:服务器在任何情况下停机时都没有承受过重的负载。CPU 和内存使用都在限制范围内,而且安全无虞。有足够的可用磁盘空间(数十 GB)。Apache 或 MySQL 日志也没有什么奇怪的,它们只是在那时停止运行。这是一个中/高 CPU 实例。
我们在 Ubuntu 9.10 x64 xlarge Amazon EC2 实例上运行 LAMP+memcached。这个服务器每秒处理几百个请求,其中大约 60% 是静态的,其余的都以某种方式与 mysql 和/或 memcached 交互。此服务器一直存在两个可能相关且已证明难以诊断的性能问题。除非另有说明,否则以下所有统计数据都是使用 CloudWatch、munin 或 vmstat/iostat/top 收集的。
第一个问题是每隔几分钟重复出现高 iowait 的定期峰值,在此期间,大多数 apache 进程同时 iowait 大约 10-30 秒,然后所有未挂起。在此期间没有增加磁盘或网络负载,磁盘队列保持低位,没有进行交换等。
更严重的是,在高峰时段,服务器有时会突然体验到性能的急剧下降,将服务请求降低到之前的大约 1/3。一旦开始,这种性能下降可能会持续 2 到 8 小时,然后突然再次恢复到完全性能。当这种情况发生时,就好像系统停止做任何事情一样。CPU 利用率、磁盘负载和网络负载(由 CloudWatch 报告)同时按比例下降,但没有磁盘争用。磁盘队列和吞吐量都下降并且始终远低于最大值,尤其是在这些下降期间。编辑:此问题已解决。 Apache 的工作进程用完了,出于某种原因决定这是一个完全崩溃性能的好理由,即使对于那些工作正常的进程也是如此。
例外是网络读取,它仍然像以前一样高,表明服务器仍然像以前一样被大量访问。如果我们在发生这种情况时尝试自己联系服务器,服务器会非常慢,并且通常只是在请求得到服务之前断开连接。需要注意的是,无论是内存使用率还是 CPU 使用率在任何时候都不是特别高,无论当前性能是否下降:CPU% 很少超过 10%,磁盘未满或拥塞。我们还无法收集这些下跌期间掉期表现的数据,但正在尝试这样做。
事实上,我们对可能导致这些神秘问题的原因的想法很少,并且越来越担心这可能是 EC2 本身的问题(或错误功能)。事实上,当我们的流量达到峰值时,似乎总是会出现大幅下降(尽管这并不意味着服务器即将用尽其可用资源),这不能简单地是巧合。
所有 MySQL 数据库和日志都托管在 EBS 卷上,所有静态内容都托管在单独的不同 EBS 卷上。Apache 每秒服务 160-240 个请求,MySQL 每秒服务 180-200 个查询,其中约 0% 的慢查询和来自 memcached 的约 90% 的命中率。平均负载往往徘徊在 3 左右。禁用 Apache 访问日志记录以最小化磁盘访问。