我们在Apache 2.2 mysql5.5上运行Drupal 6.26,PHP 5.3。 Prodnetworking服务器有两个PROD应用服务器运行loadbalancer。 Prodnetworking服务器使用100%的CPU下载了httpd.exe。
下面是崩溃转储的摘录。 这是Apache挂起的线程。
. 0 Id: 126c.c20 Suspend: 0 Teb: 7efdd000 Unfrozen ChildEBP RetAddr 000cfd60 765615e9 ntdll!ZwWaitForMultipleObjects+0x15 000cfdfc 762319fc KERNELBASE!WaitForMultipleObjectsEx+0x100 000cfe44 762341d8 kernel32!WaitForMultipleObjectsExImplementation+0xe0 000cfe60 6ff1dc10 kernel32!WaitForMultipleObjects+0x18 WARNING: Stack unwind information not available. Following frames may be wrong. 000cfe9c 6ff20655 libhttpd!ap_regkey_value_remove+0x710 000cfec4 004017c7 libhttpd!ap_mpm_run+0x1c5 000cff14 00401f73 httpd+0x17c7 000cff88 7623336a httpd+0x1f73 000cff94 776a9f72 kernel32!BaseThreadInitThunk+0xe 000cffd4 776a9f45 ntdll!__RtlUserThreadStart+0x70 000cffec 00000000 ntdll!_RtlUserThreadStart+0x1b
这确实看起来像locking(即locking互斥意义)的代码,但很难真正知道。 正如警告所述,确保获得正确信息的唯一方法是在出现故障时使Apache在debugging器下运行。 同样的方法也将确保您能够获取有关系统状态的其他相关信息。
当然,实际的解决办法可能是简单地把一些猴子丢在一些打字机上,看看你是不是可以跳出这个问题, 而不必像在Windows上跟踪debuggingApache一样痛苦。 例如,您可以尝试WAMP堆栈的不同分配,或者在服务器上切换操作系统(如果这是可行的)。 最终,这是一个非常艰难的任务,因此,寻找和解决这个问题,或者围绕这个问题做最后的尝试都值得充分考虑。
在Linux上,我倾向于发现这些问题在opcache高速caching,优化器和(de)混淆器周围出现的最多。 如果你正在运行这样的代码,例如IonCube,ZendGuard,APC,PHP的Windowscaching扩展等 – 考虑closures一两个小时,看看问题是否消失。