了解此错误:apr_socket_recv:对等方重置连接(104)


14

因此,如果我使用apache基准测试(ab)进行一些基准测试,那么我会使用大量请求。然后有时在测试过程中出现此错误。

我什至不知道这意味着什么。那么我该如何解决呢?还是如果服务器受到的点击过多,会发生什么?问题是,如果我运行10,000次匹配,它们将完美运行。如果我再次运行它,它将达到4000并得到错误:

apr_socket_recv: Connection reset by peer (104)

关于我的设置的一些信息:我让Nginx接受静态请求并处理动态请求。有问题的文件由nginx从缓存中提供,因此我想这可能与nginx如何处理请求有关?

有想法吗?

Answers:



4

这意味着服务器被大量负载了请求,即所有线程都在忙于服务该请求。解决方案:增加server.xml文件中连接器的maxThread属性计数或增加acceptCount属性值。

acceptcount:当所有可能的请求处理线程都在使用中时,传入连接请求的最大队列长度。队列已满时收到的任何请求都将被拒绝。


0

我有同样的问题,我的服务器版本是:

Server Version: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips mod_fcgid/2.3.9 PHP/5.6.5 mod_perl/2.0.9dev Perl/v5.16.3

我删除了不必要的模块,问题消失了:

Server Version: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips

因此,mod_fcgidmod_phpmod_perl之一引起了问题。如果不使用,可以尝试禁用这些功能。

(旁注;如果您使用的是opcache,也请禁用fast_shutdown。这也引起了问题:opcache.fast_shutdown = 0)


0

除了这里的答案,我还阅读了很多其他答案:

他们都没有帮助。

wrk看到类似的挣扎之后,我想到了转向。

发现问题

问题似乎与外围端口的数量有关。我尝试将其设置为50000至25000,因为这是端口范围。仍然没有运气。然后我得到的印象是它与TIME_WAIT和此博客文章有关。我想我可以确认:

$ netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n

    1 CLOSE_WAIT
    1 established)
    1 Foreign
    4 LISTEN
    8 SYN_SENT
   62 SYN_RECV
  351 ESTABLISHED
13916 TIME_WAIT

我尝试了什么

到目前为止,我还没有修复它:-/

根据sudo sysctl -a | grep net.ipv4.tcp,我有:

net.ipv4.tcp_tw_reuse = 0    # No luck setting only that to 1
net.ipv4.tcp_max_tw_buckets = 32768
net.ipv4.tcp_fin_timeout = 60  # Setting it to 5 didn't help either

-1

此问题是由系统引起的。是否向系统提出高并发请求。操作系统内核将触发SYN泛洪保护。因此,系统将重置链接。您可以在文件中修改OS配置。

#vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 0 # set value is 0
#sysctl -p # read config from the config file.

你可以尝试一下。

通常,该属性net.ipv4.tcp_syncookies用于保护OS以避免巨大的请求攻击。但是,如果要使用此OS进行某些负载测试或性能测试,则应关闭此功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.