2012-11-16 31 views
2

我在EC2上運行Ubuntu Server 12.04實例,並安裝了IRCD-hybrid 7.2。現在,我試圖通過在連接上創建一堆並查看服務器可以處理多少來加載測試服務器。我有一個連接到房間的腳本。IRCD-hybrid Connections Limited在4026

我的問題是,我可以在服務器上獲得最多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雜交設置此設置?當我嘗試與普通客戶端連接並且我已經有4026個連接時,終端窗口顯示「服務器已滿」。

回答

2

ulimit有兩種類型,硬和軟。對特定資源的限制可能會增加到過程的硬限制。但它可能沒有進一步列出。

在我的箱子(Ubuntu的12.04),軟文件descrption是1024),但硬限制是4096

 
$ulimit -n 
1024 
[email protected]:~/tmp 20:26:04 0 
$ulimit -n -H 
4096 
[email protected]:~/tmp 20:26:16 0 
$ulimit -n -S 
1024 

這是完全合理的,你的IRC服務器提高到這個硬限制。

一個可怕的黑客來增加你的ulimit臨時工作是這樣的。

 
sudo su 
ulimit -n 10000 
su USERNAME 

長期來說,您需要增加系統範圍的限制,或者最好是增加運行過程中的限制。對於守護進程,我通常使用upstart配置文件中的ulimit指令來執行此操作。

一般strace的在調試這樣的問題很有用(這有可能會在較早呼籲增加文件的ulimit)

+0

在Ubuntu中,你可以調整在'/ etc/security/limits中的限制。 conf'。 – caf