我在 ESXi 上运行虚拟机——Ubuntu 作为 Web 服务器——(使用 nginx 作为代理的 apache2、php、mysql)并且服务一直挂起/冻结,导致整个服务器无响应。无法通过 ssh 连接到它,基本上需要从 vSphere 重新启动才能重新上线。
描述:Ubuntu 10.04.1 LTS 发布:10.04 代号:lucid
在 vSphere 上,当我的服务器无法访问时,我会看到此消息:信息:任务:apache2(或 mysql 或 nginx)阻塞超过 120 秒。“echo 0 > /proc/sys/kernel/hung_task_sys_timeout_secs”可禁用此消息
我认为这种情况很可能发生在我的网站流量很大的时候我该怎么办?!
谢谢
答案1
您遇到了挂起任务超时的情况,而您的系统正在等待某些资源(可能是 I/O 完成)完成,而这些资源目前不可用。我建议首先收集一些数据,检查任何 sar 数据或使用 iostats 和 vmstat 等工具来确定负载和冻结/挂起发生的时间。您可以为此编写一个小型 cron 作业。
例如:sar -A 1 30 > /tmp/sar_-A.out.txt & vmstat 1 30 > /tmp/vmstat.out.txt & iostat -tkx 1 30 > /tmp/iostat_-x.out.txt & ps aufx > /tmp/ps_aux.out.txt &
还可以使用“echo t | sudo tee /proc/sysrq-trigger”获取内核线程转储,因为这在某种程度上有助于确定 apache 进程正在等待什么。
或者你可以获取 configure崩溃转储当您的系统处于挂起状态并获取 vmcore 文件时,如果您更具冒险精神,可以进行转储分析。