我们在 apache 2 前面有一个 nginx 实例(nginx 处理静态资源,动态内容请求代理到 apache),它主要使用 mod_wsgi 来为各种 python/django 应用程序提供服务。
我们突然发现服务器负载很高(稳步攀升至 50 以上,通常低于 1),并且正在寻找查明原因的最佳方法。
有没有办法查看哪些虚拟主机负责 apache 进程?
我们也欢迎一些诊断服务器负载过高原因的一般技巧。
编辑:感谢大家的帮助,原来这是由代码错误引起的,不需要重新配置服务器。不过,提供的提示将来会很有用。
答案1
这mod_status
Apache 中的模块将显示特定进程正在处理哪个虚拟主机/请求,但这仅在请求持续时间较长时才有用。添加执行时间处理时间 (%D
)对您的 ApacheLogFormat
也很有用。
更重要的是追踪瓶颈。为此,您需要调查(通常默认安装)以及一个可爱的新工具,它将两者结合起来并添加了更多功能iostat
,vmstat
dstat
。
答案2
如果您在运行 vmstat 时看到“cpu”下的“wa”列中有很多操作(即花费大量时间等待输入/输出),那么我怀疑问题实际上是 nginx,而不是 Apache。它可能执行了太多 I/O,因为它的缓冲区不够大,无法处理代理内容。
尝试将其添加到 nginx.conf:
proxy_buffers 32 4k;
根据需要增加。