我最近推出了一个Web应用程序,不断与100%的CPU挂钩。 我的服务器是一个512 MB的Linode,nginx坐在Apache(MPM Worker)前面,为Django应用程序提供服务。 这个应用程序是不寻常的,它必须做大量的数据库处理<5%的时间(约2-5K查询/请求)。 我目前只有less量的用户(一天50个,在任何时候约5-10个)。 现在我明白做了几千个查询是顶部,我正在寻求优化,但我不明白为什么Apache进程去100%,并留在那里,即使没有人正在访问重载页面。
这是我的Apacheconfiguration的一部分:
<IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule>
这是我从“顶部”的前几行:
10257 www-data 20 0 370m 143m 4052 S 100 29.0 16:19.47 apache2 1 root 20 0 2728 224 24 S 0 0.0 0:01.34 init 2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd
任何帮助将非常感激!
这原来不是一个服务器问题。 有一个特别的代码path非常耗费CPU(在最坏的情况下是O(n ^ 2)操作)。 我通过与发现问题的特定testing用户联系,并将他们的数据复制到登台服务器并进行testing来追踪问题。 我能够重现它并从那里修复它。
我仍然想知道为什么Apache的请求会继续处理请求时,用户已经停止了他们的连接。