Apache由某些脚本(Wp-Cron.php)陷入困境 – 如何自动杀死进程

我有一个服务器正在运行一些WordPress的博客,其中有一些有几百/千个职位。

每两天,由于在Wordpress上运行一个名为WP-cron.php的文件,服务器变慢了。 我的整个Apache进程日志变成这样:

http:// imgur.com/A7K9k.png

那个时代已经不less了。 而服务器不行。

每个进程占用大约1.1%的内存。 而当我们有50人在旅途中。 它变得疯狂。 不是所有的人都来自同一个博客,他们是相当广泛的。 在WHM的Apache进程页面中,它们通常都被设置为“C”的状态,这意味着closures。 但他们可以坐在那里,直到他们崩溃的服务器,他们仍然拥有内存。

只是谷歌“WP – cron.php加载”,你会发现很多人有类似的问题。

无论如何,我们认为这是由用户在wordpress安装中添加一吨死亡“pinglists”造成的。 反过来,wordpress就会无休止地循环着它们。

问题编号1.有没有人有什么会导致Wordpress文件wp-cron.php无休止地循环的其他build议。 我仍然认为这是平息的,因为我们所接触到的所有关于他们的帐户负载高的人都拥有大量的ping列表。

问题2。即使是在WordPress的超级pinglists。 我们不能在服务器上等待它开始产生wp-cron进程的每一个帐户。 它通常在一夜之间发生,我开始在凌晨2点收到有关负载的短信警报。

我已经安装了CSF,如果它们运行了XXX次,显然会结束进程。 但是我被告知,它不会捕获这些进程,因为它们处于“closures”状态(它们在WHM的Apache页面上显示为“C”)。 显然CSF只会杀死那些C不算的“正在运行”的进程。

我已经看到了各种其他脚本,如: http : //dltj.org/article/die-apache-die/ 。 我看了一下/ proc的状态。 但是,我惊奇地发现在这个时间段里划定的部分。 如果有什么办法,我可以把它连接到一个实际的Apache进程,这样我就可以看到哪个文件正在运行(所以只有closures连接到wp-cron.php,状态为“C”)。

总的来说,我知道问题2掩盖了真正的原因。 但是我确实把整个事情都放在了Wordpress中过度的pinglists上。 但是我不能坐在那儿照顾每一个安装24/7。 所以我需要一种方法来保存服务器,当我不可用。

任何帮助将非常感激。

任何时候你可以有一个不同的服务器运行相同的网站,并在那里运行cron? 对于我们的一些较大的网站,这就是我们所做的,我们已经禁用了面向客户的网站上的wp-cron,但是却有一个在内部运行。

添加define('DISABLE_WP_CRON',true); 到wp-config,

看看优秀的stream程观察者/杀手, psmon 。 它只是一个Perl脚本,它将后台进程守护进程并包含一个Apache风格的configuration文件,如果它们消耗了大量的内存,或者它们已经被占用X个CPU时间,就可能终止进程。 只要决定杀死一个进程,PSMon就可以通过系统日志或电子邮件提醒你。

另外,你可能想把wp-cron.php包装在一个shell脚本的周围,这个shell脚本将使用一个lockfile,并确保在任何给定的时间内只有一个wp-cron.php副本运行。

问题是,你的用户会舒适没有wp-cron.php ..是你的博客/插件依赖于他们。 如果没有,你可以使用mod_security或只是简单的Apacheconfiguration从执行博客wp-cron.php。 对于每个博客,WP都会运行自己的wp-config.php实例。