2

我在 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 个连接时,终端窗口显示“服务器已满”。

4

1 回答 1

2

ulimit 有两种类型,硬的和软的。进程可以将特定资源的 ulimit 增加到硬限制。但是它可能没有进一步列出。

在我的机器上(ubuntu 12.04),软文件描述是 1024),但硬限制是 4096

$ulimit -n
1024
时刻@时刻:~/tmp 20:26:04 0
$ulimit -n -H
4096
时刻@时刻:~/tmp 20:26:16 0
$ulimit -n -S
1024

您的 irc 服务器增加到这个硬限制是完全合理的。

一个可怕的 hack 可以暂时增加你的 ulimit 像这样工作。

须藤
ulimit -n 10000
苏用户名

从长远来看,您需要在系统范围内增加限制,或者最好只为您正在运行的进程增加 ulimit。对于守护进程,我通常使用 upstart 配置文件中的 ulimit 指令来执行此操作。

一般来说strace可以用于调试这样的问题(这可能会显示早期调用以增加文件 ulimit)

于 2012-12-10T19:30:05.947 回答