在短暂而强烈的“流量浪潮”之后,Apache 没有响应并且没有任何记录

Pio*_*ler 5 not-responding apache-2.2

我的 apache 以 0.05 的服务器负载持续提供大约 300 个请求/秒(2 兆字节/秒)的服务。

问题是,我的服务架构导致在特定时刻获得巨大流量(例如 300-500 人在几秒钟内被重定向到某个使用 JavaScript 的页面)。

在如此短的流量跳跃之后,apache 变得无响应(在 firefox 中大约 30 秒后连接重置)而没有记录任何内容。Apache 被冻结,直到 apache2 重新启动程序。

冻结时,它甚至无法在没有 PHP 或 SQL 连接的情况下提供简单的 HTML 文件(但存在 apache2 进程)

我尝试了不同的 prefork 设置,从 50 到近 1000 个空闲工人,最大客户端限制为 10000,但没有任何帮助。

除了不记录任何内容之外的另一个症状是,在冻结前的那一刻,apache 状态模块显示(在它变得无响应之前的最后一次)几乎每个进程都在等待连接:

__R_R_______R__RR______R___R________________RR_______R______R___
_________R__________R_________________________R________CR___R___
___________R__________________________C__WR__R________________R_
Run Code Online (Sandbox Code Playgroud)

但在正常的、不那么繁重的工作中,它显示:

C___R___K_C___C___C_____KK______R___C_C_R______C__K___C________K
____C__KR_RR__C___K___KK_C__R__K__C_CK__RC___CR___R__K__C__R____
___KR____C_____R______R______K__R_______KC__C_K__R____C_______R_
Run Code Online (Sandbox Code Playgroud)

syslog 也没有给出任何内容。我的机器有 64GB 内存,从不超过 0.1 的负载

3mo*_*olo 1

您可以附加到正在运行的无响应进程并看看会发生什么吗?如果你运行 prefork 可能会更容易。

使用跟踪附加到进程

strace -p <pid> -o /tmp/somefile
Run Code Online (Sandbox Code Playgroud)

你可能想玩 -s

-s strsize Specify the maximum string size to print (the default is 32). Note that filenames are not considered strings and are always printed in full.