Man*_*tto 6 connection reset apache-2.4 debian-stretch
我的服务器有一些奇怪的行为,我只是找不到原因。我到处找。
我将向任何能解决这个问题的人支付价值 200 美元的比特币。
当从 apache 请求任何资源(页面、图片、css、js)时,有时需要很长时间才能响应。大约一半的时间,连接被重置。(在 Chrome 上:net::ERR_CONNECTION_RESET)这种情况很少发生,随机发生并且绝对不可预测。更令人困惑的是,虽然一个请求似乎挂起,但我可以提出其他完美运行的请求。
我在 debian 9 上使用 php7.0 运行 apache2.4 mpm-prefork。apache 模块使用 mod_rewrite 和来自 certbot 的 ssl 证书。在某些情况下,php 调用inkscape 将svgs 呈现为png。
服务器负载非常低 (0.02),除了 apache 之外什么都没有运行。
我继续使用 Wireshark 分析了 tcp 流量,发现了一些可疑的行为。当连接冻结时,会出现一些 TCP 乱序、重传和 ACK 看不见的分段数据包……但我没有必要的低级知识来判断发生了什么。
任何提示将大大appreaciated!
这是 mpm_prefork 配置:
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 10
MaxSpareServers 50
MaxRequestWorkers 300
MaxConnectionsPerChild 0
</IfModule>
Run Code Online (Sandbox Code Playgroud)
我很幸运,当它再次发生时,在服务器和客户端上都运行了一个 tcp 嗅探器。这是 pcap 文件,裁剪到最后大约 30 秒。
如果有知识的人可以快速浏览一下并告诉我发生了什么,我会很激动。
我设法使错误可重现,至少在 KeepAlive 上。当请求完成并提供内容时,tcp 连接将在 5 秒后以 FIN-ACK 关闭。在 FIN-ACK 后 5-12 秒的时间窗口内发出另一个请求时,连接冻结。
然而,随着 KeepAlive 关闭,这种情况不再发生,但在同时加载多个资源时,错误发生的频率更高。但后来它不再可复制了。
小智 1
我会检查服务器和客户端之间传输的 TCP 数据包的大小。如果它们的大小接近 1500,则它们有可能因多种可能性而被丢弃:
如果在数据包上设置了 DNF 位并且数据包在某处被分段,这可能是导致数据包丢失的问题
如果 MTU 设置为 1500 并且数据包正在通过隧道、加密等,这会导致向数据包添加额外的标头,那么这也会导致数据包丢失。尝试将您正在使用的接口两端的 MTU 设置为低于 1500、可能为 1420 甚至更低。
归档时间: |
|
查看次数: |
2940 次 |
最近记录: |