Linux上的最大套接字数


12

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

这是配置

~# 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

有什么想法吗 ?(到目前为止,这个问题是在堆栈溢出时提出的,没有运气)




我确实在发帖之前检查了这些线程,但是没有运气
TheSquad 2010年

Answers:



2

您在这个地方找错了;您没有遇到用户限制,而是遇到了系统限制,通常是32位系统上2的15次幂,这就是我猜测的系统。校验:

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

但是你也可以改变它。在32位计算机上,绝对上限为2 ** 22,因此:

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

我想知道你的情况。


pid_max已经在999999
TheSquad 2010年

1

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


ip_local_port_range已经在1024 65535
TheSquad

0

我很抱歉,如果在线程中说了类似的话,但我现在没有时间阅读它们:

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

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

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


不,不是这样:#ps -ef | grep
-c'root

那是在受控环境下吗?你可以做些检查吗?例如,每个请求创建多少个进程?另外,服务器的优先级是多少?如果您不介意,它会有所改变吗?如果没有,那么我几乎可以确定您达到了进程限制或进程内部的线程限制:>
Nikolaidis Fotis 2010年
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.