2

EC2 で Ubuntu Server 12.04 インスタンスを実行しており、IRCD ハイブリッド 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には、ハードとソフトの2種類があります。特定のリソースの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ユーザー名

長期的には、制限システム全体を増やす必要があります。できれば、実行しているプロセスだけの制限を増やす必要があります。デーモンの場合、私は通常、upstart構成ファイルのulimit命令を使用してこれを行います。

一般に、 straceは、このような問題のデバッグに役立ちます(これにより、ファイルのulimitを増やすための以前の呼び出しが表示される可能性があります)

于 2012-12-10T19:30:05.947 に答える