Apache进程永远挂起

时间:2018-08-12 09:10:51

标签: apache

我在服务器上安装了apache并用作反向代理

Server Version: Apache/2.4.18 (Ubuntu) OpenSSL/1.0.2g
Server MPM: event
Server Built: 2018-04-18T14:53:04

我的配置是: -将所有http调用重定向到https -从本地目录提供一些静态文件 -根据URI将所有https代理到不同的目标 -根据URI将所有Websocket连接代理到目标

已安装的模块: core.c,event.c,http_core.c,mod_access_compat.c,mod_alias.c,mod_auth_basic.c,mod_auth_form.c,mod_authn_core.c,mod_authn_dbd.c,mod_authn_file.c,mod_authz_core.c,mod_authz_host.c,mod_authz_host.c。 c,mod_autoindex.c,mod_dbd.c,mod_deflate.c,mod_dir.c,mod_env.c,mod_filter.c,mod_headers.c,mod_info.c,mod_log_config.c,mod_logio.c,mod_mime.c,mod_negotiation.c, mod_proxy.c,mod_proxy_html.c,mod_proxy_http.c,mod_proxy_wstunnel.c,mod_request.c,mod_rewrite.c,mod_session.c,mod_session_cookie.c,mod_session_crypto.c,mod_session_dbd.c,mod_setenviff.c,mod_so.c,mod_so.c c,mod_ssl.c,mod_status.c,mod_unixd.c,mod_version.c,mod_watchdog.c,mod_xml2enc.c

MPM配置如下:

ServerLimit           40
StartServers           2
MaxClients          1000
MinSpareThreads       25
MaxSpareThreads       75
ThreadsPerChild       25
MaxRequestsPerChild    0

服务器重新启动后,一切正常,但过了一段时间(通常约16小时),某些进程挂起。看起来像:

PID Connections Threads Async connections
total   accepting   busy    idle    writing keep-alive  closing
2186    8   no  0   0   0   0   0
2187    11  no  0   0   0   0   0
2244    8   no  0   0   0   0   0
4618    5   yes 5   20  0   0   0
4623    3   yes 3   22  0   1   0
Sum 35      8   42  0   1   0

GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
GGGGGGGGGGG_____W___W_____WWW__________W______WW_____________...
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
........................................

我将gdb附加到PID 2186并获得堆栈跟踪,但未找到有用的信息:

(gdb) bt
#0  0x00007fce5de1298d in pthread_join (threadid=140523855595264, thread_return=0x7ffc1ca1bef0) at pthread_join.c:90
#1  0x00007fce5e04cf6b in apr_thread_join () from /usr/lib/x86_64-linux-gnu/libapr-1.so.0
#2  0x00007fce5a750f7d in ?? () from /usr/lib/apache2/modules/mod_mpm_event.so
#3  0x00007fce5a7513a8 in ?? () from /usr/lib/apache2/modules/mod_mpm_event.so
#4  0x00007fce5a7561f5 in ?? () from /usr/lib/apache2/modules/mod_mpm_event.so
#5  0x00007fce5a75628c in ?? () from /usr/lib/apache2/modules/mod_mpm_event.so
#6  0x00007fce5a756ecd in ?? () from /usr/lib/apache2/modules/mod_mpm_event.so
#7  0x000056118d42379e in ap_run_mpm ()
#8  0x000056118d41c690 in main ()

有一个奇怪的细节:如果进程挂起并长时间保持该状态,则在附加gdb并使用bt命令获取回溯之后,它将立即关闭并使用另一个PID重新启动。反之亦然,该过程仍会持续无限时间(当然会消耗内存)。

问题是:这是什么?接下来我要怎么做才能摆脱它?

更新。我不确定回溯后是否完成流程。可能是巧合。

更新。 Apache可以通过取消“挂起”进程并重新启动来解决此问题。处理后通常会在状态“ G”中执行10-20小时。因此,对我来说,有40个进程是一个修复程序,可以使服务器正常工作,而无需3-4个“挂起”的进程,这些进程将由Apache更新。但是情况看起来并不好。这种行为可能与使用WebSockets并使连接保持太长时间(天)有关吗?

0 个答案:

没有答案