我正在EC2上运行Ubuntu Server 12.04实例,并在其上安装了IRCD-hybrid 7.2。现在,我正在尝试通过在连接上建立一堆并查看服务器可以处理多少来加载测试服务器。我有一个连接到房间的脚本。
我的问题是我最多可以在服务器中获得4026个连接。我的其他套接字连接似乎不起作用。我将最大客户端设置为100k只是为了安全,每个ip最大数量为50k。
当我跑步时
sysctl fs.file-nr -> fs.file-nr = 4576 0 1513750
此外,我的ulimits已设置:
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个连接。
答案 0 :(得分:2)
有两种类型的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)