tcp/ip 连接错误

tcp/ip 连接错误

我们有一个基于 Ubuntu 16.04 的 Web 服务器,主内存 128GB,32 个 vCPU。它运行 nginx、php-fpm、postgresql、mysql 和 beanstalkd 应用程序。

当 Web 服务器的吞吐量很高时,它会从不同的应用程序发出一些连接错误。在正常情况下,一切都正常。

PostgreSQL的:

 [PDOException]
  SQLSTATE[08006] [7] could not connect to server: Connection timed out
        Is the server running on host "127.0.0.1" and accepting
        TCP/IP connections on port 5432?

Mysql:

 [PDOException]
  SQLSTATE[HY000] [2002] Connection timed out

Beanstalkd:

fwrite(): send of 8192 bytes failed with errno=32 Broken pipe

服务器的哪些设置(可能是 sysctl.conf)会影响这些限制?如何增加这些限制以避免错误?

答案1

嗨,如果您有大量连接到此服务器的连接,您可能需要开始监视主机服务器的连接数。如果超出 Linux 内核内置的连接数限制,您可能会在高峰时段看到连接失败。在内核日志中,您可能会看到以下行

nf_conntrack: table full, dropping packet

查看连接数限制:

sysctl net.ipv4.netfilter.ip_conntrack_max

查看当前连接数

wc -l /proc/net/ip_conntrack

如果您发现当前连接数已达到限制,则问题就解决了。您可以尝试通过以下命令增加限制,但内核通常会根据其运行的硬件选择一个数字,如果限制超过硬件可以处理的范围,则在分配新连接时也会导致已建立的连接中断。

增加此限制(重启后不保留)

sysctl -w net.ipv4.netfilter.ip_conntrack_max=12000

或者,将以下行添加到 /etc/sysctl.conf 文件以在重启后保留此设置:

net.ipv4.netfilter.ip_conntrack_max=12000

我推荐使用http://conntrack-tools.netfilter.org/

sudo apt-get install conntrack 

该工具将让你查看连接列表(-L)、计数器(-C)和包括丢弃的数据包在内的统计数据(-S)

有用链接: https://www.cyberciti.biz/faq/ip_conntrack-table-ful-dropping-packet-error/

相关内容