Debian 上的 Apache2 在一段时间后冻结

Debian 上的 Apache2 在一段时间后冻结

我在 Debian VPS 上使用 Apache 服务器时遇到了问题。运行一段时间(几个小时)后,它就卡住了,无法处理任何请求(服务器允许连接,但什么也没返回)。

# apache2 -v  
 Server version: Apache/2.2.22 (Debian)
 Server built:   Dec 23 2014 22:48:29


# apache2 -l
Compiled in modules:
  core.c
  mod_log_config.c
  mod_logio.c
  mod_version.c
  prefork.c
  http_core.c
  mod_so.c

<IfModule mpm_prefork_module>
    StartServers          1
    MinSpareServers       1
    MaxSpareServers      19
    MaxClients          19
    MaxRequestsPerChild   20
</IfModule>

此配置经过一些测试后,较低的 MaxRequestsPerChild 似乎有帮助,但没有,服务器仍然冻结。

当服务器冻结时,它会卡在poll系统调用中:

# strace -p 30145
Process 30145 attached - interrupt to quit
restart_syscall(<... resuming interrupted call ...>) = 0
poll([{fd=25, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
poll([{fd=25, events=POLLIN|POLLERR|POLLHUP}], 1, 10000
[......]

并且这种情况继续。gdb 的回溯结果如下:

#0  0x00007eff42499d13 in poll () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007eff3f35bf50 in ?? () from /usr/lib/apache2/modules/libphp5.so
#2  0x00007eff3f16a5b2 in ?? () from /usr/lib/apache2/modules/libphp5.so
#3  0x00007eff3f34fa65 in _php_stream_fill_read_buffer () from /usr/lib/apache2/modules/libphp5.so
#4  0x00007eff3f34fba7 in _php_stream_read () from /usr/lib/apache2/modules/libphp5.so
#5  0x00007eff3f2cc14a in zif_fread () from /usr/lib/apache2/modules/libphp5.so
#6  0x00007eff3f4411c1 in ?? () from /usr/lib/apache2/modules/libphp5.so
#7  0x00007eff3f3fab77 in execute () from /usr/lib/apache2/modules/libphp5.so
#8  0x00007eff3f399a1c in zend_execute_scripts () from /usr/lib/apache2/modules/libphp5.so
#9  0x00007eff3f339393 in php_execute_script () from /usr/lib/apache2/modules/libphp5.so
#10 0x00007eff3f4438ba in ?? () from /usr/lib/apache2/modules/libphp5.so
#11 0x00007eff4326bdc0 in ap_run_handler ()
#12 0x00007eff4326c20b in ap_invoke_handler ()
#13 0x00007eff4327c448 in ap_process_request ()
#14 0x00007eff432792c8 in ?? ()
#15 0x00007eff43272780 in ap_run_process_connection ()
#16 0x00007eff432811ee in ?? ()
#17 0x00007eff43281942 in ?? ()
#18 0x00007eff432824a6 in ap_mpm_run ()
#19 0x00007eff432568e6 in main ()

看起来它被卡在了 PHP 中:

# php -v
PHP 5.4.36-0+deb7u3 (cli) (built: Jan  9 2015 08:07:06) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

有什么提示吗?配置和代码基本没有变化,只应用了对包和 Wordpress 的更新(此站点运行一些小型 Wordpress 实例和静态站点。当 VPS 具有 1G RAM 时,内存使用量约为 800 MB。CPU 处于空闲状态...

相关内容