所以,有一段时间,我看到在萤火虫,一个请求超过15甚至60秒的反应,有时从来没有。 这是我排除的:
这里是mysql的转储信息:
Traffic ø per hour Received 18 MiB 29 MiB Sent 134 MiB 221 MiB Total 151 MiB 251 MiB Connections ø per hour % max. concurrent connections 5 --- --- Failed attempts 0 0.00 0.00% Aborted 0 0.00 0.00% Total 9,418 15.59 k 100.00%
好的,我想我已经知道了这个问题。 Apache中的MaxClients数量被设置为8,这个值太低了。 我增加了,现在看起来好多了。
尝试运行ps -faux ,然后看看你的过程。 请特别注意STATS列。 如果你看到“Ss”,那么你的脚本被阻止。
如果数据库连接确保在MySQL中有wait_timeout (对于那里的ya PostSQL用户,则为statement_timeout),否则在运行数据库查询时,您可能会阻塞而不是返回。
你也可以运行strace -p <process id>来查看你的进程正在运行什么系统调用。 希望你擅长C 🙂
我会将日志logging添加到您的脚本中,以查明什么阻止了1%的时间。 祝你好运。
如果你的数据库有性能问题,可能是你没有closures你的连接。 您可以打开连接池以消除这种情况。 您也可以打开输出caching以确保查询快速返回。
你的服务器是动力不足的。 每秒150个请求是很多要发送到正在运行一个完整的LAMP堆栈的虚拟机。
你看到的行为是Apache被8个并发请求完全占用,因此拒绝了9个。
你已经回答说,你增加了MaxClients到8,并解决了这个问题。 但是,现在您很可能会在负载下进行交换,导致整个服务器出现故障。 我在这里回答了很多关于正确configurationLAMP堆栈的细节。
用你提供的数字,你根本无法处理150 rps的负载。 150 rps,每次执行需要50ms,处理这150个请求需要7.5秒。 这意味着要求最小的并发度为8.然而,只有在你的150个请求或多或less均匀分布的情况下,8才是最小的 。 如果你在10毫秒的时间内爆发了50个请求,那么你将丢掉42个请求。
您需要增加您的MaxClients,以便能够舒适地维持您期望的任何负载峰值。 但是,在256M服务器上实际上没有这个空间。 我猜你的平均httpd进程大小是从10MB到20MB的任何地方。 你不能在不转换的情况下旋转其中的15个。