什么是Apache 2中的PHP apache_child_terminate等价物?

时间:2013-11-19 20:04:20

标签: php apache2

我真的需要能够做我认为apache_child_terminate做的事情,但显然它在使用Apache2时不起作用(这就是我正在使用的......在prefork模式下的Apache 2)。

在完成当前请求后,是否有相同的方法可以“摆脱”或终止当前正在执行的Apache进程?

背景:

  • 有一种特殊类型的请求,我每秒都会超过100次。返回一个非常小的消息(只有几个字符),但是Apache会使进程保持4秒钟,以允许后续请求由同一个Apache进程处理。我无法降低4秒保持活力,因为它会影响具有大量内容和请求的所有其他PHP页面的性能。所以我的想法是,只有那种类型的请求,我不希望这个过程停留4秒钟。

提前感谢任何建议!

1 个答案:

答案 0 :(得分:1)

好的,所以这段代码基本上为Apache 2做了apache_child_terminate()等效的方法,在完成请求后很好地告诉Apache进程死掉:

<?php

// Terminate Apache 2 child process after request has been
// completed by sending a "friendly" SIGWINCH POSIX signal (28).
function kill_on_exit() {
 posix_kill( getmypid(), 28 );
}

register_shutdown_function( 'kill_on_exit' );

?>

然而,这并没有解决我的问题。我最终通过完全关闭Apache KeepAlive来获得最佳性能。我把它添加到我的apache2.conf文件中:

KeepAlive Off

现在,我在特定页面上获得的每秒数百个请求不会占用资源4秒钟。它们完成得非常快,并且该过程可以重复用于另一个连接。我从具有大量内容的普通页面获得的性能实际上非常好,即使每个请求都通过与服务器上不同进程的不同连接。

相关问题