我正在 EC2 上运行 Ubuntu Server 12.04 实例,并安装了 IRCD-hybrid 7.2。现在,我正在尝试通过建立大量连接来对服务器进行负载测试,并查看服务器可以处理多少内容。我有一个连接到房间的脚本。
我的问题是我可以在服务器中获得最多 4026 个连接。我的其他套接字连接似乎不起作用。为了安全起见,我将最大客户端数设置为 100k,每个 ip 的最大数量设置为 50k。
当我运行
sysctl fs.file-nr -> fs.file-nr = 4576 0 1513750
此外,我的 ulimit 已设置:
ulimit -S -> 65536
我的 ulimit -n 是 1024,但由于我可以获得 4026 个连接,所以我看不出这会如何影响它。
ulimit -n -> 1024
当我遇到这个问题时,内存和 CPU 也远未达到最大值。
我的代码是这样的:
import random
import sys
import socket
import string
import time
n = ''.join(random.choice(string.letters) for i in xrange(40))
HOST="<MYHOST IS HERE>"
PORT=6666
NICK=n
IDENT=n
REALNAME=n
readbuffer=""
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send("NICK %s\r\n" % NICK)
s.send("USER %s %s %s :%s\r\n" % (IDENT, HOST, REALNAME, REALNAME))
s.send('JOIN #foobar\r\n')
while 1:
readbuffer=readbuffer+s.recv(1024)
temp=string.split(readbuffer, "\n")
readbuffer=temp.pop( )
for line in temp:
line=string.rstrip(line)
line=string.split(line)
if 'PRIVMSG' in line:
print line
if(line[0]=="PING"):
s.send("PONG %s\r\n" % line[1])
ircd-hybrid 上是否有设置可以设置此设置?当我尝试与常规客户端连接并且已经有 4026 个连接时,终端窗口显示“服务器已满”。
最佳答案
ulimit 有两种类型:硬 ulimit 和软 ulimit。特定资源上的 ulimit 可能会被进程增加到硬限制。但它可能不再列出。
在我的机器上(ubuntu 12.04),软文件描述是1024,但硬限制是4096
$ulimit -n 1024 moment@moment:~/tmp 20:26:04 0 $ulimit -n -H 4096 moment@moment:~/tmp 20:26:16 0 $ulimit -n -S 1024
您的 irc 服务器增加到这个硬限制是完全合理的。
一个可怕的黑客可以暂时增加你的ulimit,就像这样。
sudo su ulimit -n 10000 su USERNAME
从长远来看,您需要增加系统范围的限制,或者最好仅增加您正在运行的进程的 ulimit。对于守护进程,我通常使用 upstart 配置文件中的 ulimit 指令来执行此操作。
一般来说,strace 对于调试此类问题很有用(这可能会显示先前调用以增加文件 ulimit)
关于networking - IRCD-混合连接有限公司 4026,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13410895/