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

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

我们突然看到了高服务器负载(稳步攀升到50以上,通常不到1),并正在寻找最好的方法来追查原因。

有没有办法看到哪些虚拟主机负责的Apache进程?

诊断高服务器负载的原因的一些一般技巧也将受到欢迎。

编辑:感谢大家的帮助,原来是由代码错误引起的,没有服务器重新configuration是必要的。 但是,提供的提示将在未来有用。

Apache中的mod_status模块将向您显示特定进程正在处理哪个虚拟主机/请求,但是如果请求长期存在,这只对您有用。 将执行时间( %D )添加到Apache LogFormat也很有用。

更重要的是追踪瓶颈。 为此,您需要调查iostatvmstat (通常默认情况下安装)和一个可爱的新工具,结合这两者,并添加更多的东西, dstat

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

尝试添加到nginx.conf:

 proxy_buffers 32 4k; 

必要时增加。