Linux 上的最大套接字数量

Linux 上的最大套接字数量

看来服务器限制在 ~32720 个套接字...我尝试了所有已知的变量更改来提高此限制。但服务器仍然限制在 32720 个打开的套接字,即使仍有 4Go 的可用内存和 80% 的空闲 CPU...

配置如下

~# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 63931
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 798621
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 2048
cpu time               (seconds, -t) unlimited
max user processes              (-u) 63931
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

net.netfilter.nf_conntrack_max = 999999
net.ipv4.netfilter.ip_conntrack_max = 999999
net.nf_conntrack_max = 999999

有什么想法吗?(这个问题在 stackoverflow 上被问过,但到目前为止还没有结果)

答案1

我发现了限制一切的因素:

max_map_count

感谢所有回答的人!

答案2

您找错地方了;您遇到的不是用户限制,而是系统限制,在 32 位系统上,系统限制通常是 2 的 15 次方,我猜您的系统也是这样。检查:

 % cat /proc/sys/kernel/pid_max 
 32768
 %

但是你也改变它;在 32 位机器上,2**22 是绝对上限,因此:

% sudo bash -c 'echo 4194303 > /proc/sys/kernel/pid_max'
%

我很想知道你的情况。

答案3

如果您实际上想查看可以打开连接的最大套接字数,您可以尝试查看 cat /proc/sys/net/ipv4/ip_local_port_range ;这是内核将用于出站套接字的端口范围,并且根据您的发行版有不同的默认值。将其设置为“1024 65535”之类的值是您可以获得的最大范围;看看这是否有帮助。

答案4

如果帖子中讨论了类似的事情,我很抱歉,但我现在没有时间阅读它们 :<

乍一看,我发现您提到的套接字数量大约是最大用户进程数的一半。我猜想每个套接字都有一个单独的进程(可能您运行的是服务器或类似的东西)

您可以做的是在下次达到套接字的限制时检查进程的数量。

只是一个想法,我不知道是否有帮助。

相关内容