我们有 nginx 代理到 apache w/mod wsgi,服务器负载非常高,如何追查原因?

我们有 nginx 代理到 apache w/mod wsgi,服务器负载非常高,如何追查原因?

我们在 apache 2 前面有一个 nginx 实例(nginx 处理静态资源,动态内容请求代理到 apache),它主要使用 mod_wsgi 来为各种 python/django 应用程序提供服务。

我们突然发现服务器负载很高(稳步攀升至 50 以上,通常低于 1),并且正在寻找查明原因的最佳方法。

有没有办法查看哪些虚拟主机负责 apache 进程?

我们也欢迎一些诊断服务器负载过高原因的一般技巧。

编辑:感谢大家的帮助,原来这是由代码错误引起的,不需要重新配置服务器。不过,提供的提示将来会很有用。

答案1

mod_statusApache 中的模块将显示特定进程正在处理哪个虚拟主机/请求,但这仅在请求持续时间较长时才有用。添加执行时间处理时间 (%D对您的 ApacheLogFormat也很有用。

更重要的是追踪瓶颈。为此,您需要调查(通常默认安装)以及一个可爱的新工具,它将两者结合起来并添加了更多功能iostatvmstatdstat

答案2

如果您在运行 vmstat 时看到“cpu”下的“wa”列中有很多操作(即花费大量时间等待输入/输出),那么我怀疑问题实际上是 nginx,而不是 Apache。它可能执行了太多 I/O,因为它的缓冲区不够大,无法处理代理内容。

尝试将其添加到 nginx.conf:

proxy_buffers  32 4k;

根据需要增加。

相关内容