http:接受错误:接受tcp [::]:9000:accept4:打开文件太多;在1s重试

问题描述 投票:0回答:1

这个过程的pid是1996291。

/proc/1996291/fd中有65534个fds,大多数fds是套接字,如下所示:

lrwx------ 1 root root 64 Dec 30 13:59 10000 -> socket:[952574733]
lrwx------ 1 root root 64 Dec 30 13:59 10001 -> socket:[952566188]

我知道括号中的数字是套接字的inode。每个插座都应该在/proc/net/tcp中有一个相同的inode。但是,可以找到一些inode,但有些不能:

cat /proc/net/tcp | grep 952574733

如果我找到了inode,输出如下:

  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
 336: 4114C80A:271A 1914C80A:0CEA 01 00000000:00000000 02:0000BE1B 00000000     0        0 962759319 2 ffff88035a20cb00 20 4 30 10 16

这是一个真正的联系。

我使用netstat -tnp来显示连接并获得很多TIME_WAIT连接。我不知道他们是否与我的问题有关系。

我使用lsof -p 1996291,输出是这样的,很多插座:

app    1996291 root *520u     sock       0,8      0t0 953021420 protocol: TCP
app    1996291 root *521u     sock       0,8      0t0 953027193 protocol: TCP
app    1996291 root *522u     sock       0,8      0t0 953021422 protocol: TCP
app    1996291 root *523u     sock       0,8      0t0 953038715 protocol: TCP

有三个核心选项已设置为1:

net.ipv4.tcp_tw_reuse
net.ipv4.tcp_tw_recycle
net.ipv4.tcp_syncookies

我好几天都解决不了这个问题,有人可以帮帮我吗?

sockets go tcp netstat lsof
1个回答
0
投票

对于计算机上的每个套接字,都有一个文件描述符。当您有太多打开的连接时,将打开太多文件并且它将崩溃。

您可以尝试通过同时限制打开的连接数量或通过关闭返回的响应的正文来正确关闭fd来防止这种情况发生。快速回收插座也可能有所帮助。

另一个hacky方法是通过以下方式提高打开文件的限制:

ulimit -n [new limit]
© www.soinside.com 2019 - 2024. All rights reserved.