尝试解决 I/O Wait 瓶颈问题

简要版:

  • 系统在中等负载下因 iowait 导致数分钟几乎瘫痪
  • 当时并未发生显著的磁盘 I/O
  • DigitalOcean 坚称管理程序上并无异常活动

详细版:
目前运行在 DigitalOcean 的 8 核/16 GB Droplet 上,近期从 4 核/8 GB 升级,以应对预期的短期高流量。

当时系统配置为 db_shared_buffers 2 GB,Unicorn 工作进程数为 8。此后我已将两者均调高。

在一次约 2 小时的直播活动中,单一主题帖出现大量发帖,该时段内总用户数约 200,根据 Analytics 数据,任意时刻平均在线用户数约为 70。

系统此前稳定运行超过一小时,负载平均值维持在 4 左右,CPU 使用率约 30%,内存使用率约 35%。无显著磁盘活动,论坛运行正常。

突然间,Analytics 显示的用户数翻倍。我不确定这些是真实用户还是其他问题导致的异常数据。我们并非大型或知名社区,无人链接到我们,突然涌现大量新用户极为反常。

与此同时,iowait 飙升至红色,持续出现 50% 以上的告警。1 分钟负载平均值飙升至 12,5 分钟负载平均值超过 8。整个系统变得极不响应,论坛几乎停滞,并出现大量因高负载导致的临时登出。CPU 使用率从未超过 40%。

此状况持续了 3-4 分钟,随后在接下来的 10 分钟内逐渐恢复正常。根据 DigitalOcean 的图表,整个过程中磁盘 I/O 始终低于 1 MB/s,且主要为写入操作。

这是否可能是论坛或配置问题?DigitalOcean 是否在隐瞒真相,而实际上是硬件问题?如果是前者,有何建议可防止此类情况再次发生(这并非首次出现)?

我即将迎来另一场规模更大、一次性的高流量活动,这对社区至关重要。我无暇通过试错来验证何种方案有效。我只有一次机会,必须一次做对(或做错)。

我不确定这是否与您的问题相关,但最近关于实时活动及其引发的活跃度激增有很多讨论。