Asterisk nevytvoří další socket

Strasidlo

Asterisk nevytvoří další socket
« kdy: 25. 03. 2011, 19:52:26 »
Dobrý den,

mám server s Asteriskem, který momentálně testuji. Nemohu vytvořit více, než 1023 hovorů, při generování zátěže dojdu k tomuto počtu hovorů, bez transkódování, s cca 30-40% využitím procesoru a NIC je vytížena 88 Mbps z 1000 Mbps. Prostoru na blokovém zařízení je dostatek, a operační paměť je více než z 80% volná. Generátor je připojený do Gbps přepínače, server taktéž. Každému hovoru, který je více, než 1023. se nevytvoří další socket a Asterisk se pak pochlubí touto hláškou:

Kód: [Vybrat]
[Mar 22 15:36:10] WARNING[1020]: chan_sip.c:3587 __sip_xmit: sip_xmit of 0x7f746                          d358340 (len 480) to 172.16.100.153:5060 returned -1: No buffer space available
[Mar 22 15:36:10] WARNING[1020]: acl.c:495 ast_ouraddrfor: Cannot connect

Pro skupinu asterisk je nastaveno vyšší limit file deskriptorů v /etc/security/limits.conf (píši zpaměti, ale nějak tak to je):
asterisk hard nofile 65535
asterisk soft nofile 65535

A taktéž v init skriptu Asterisku je toto navýšeno (volá se tam ulimit -n $parametr).

Volných prostředků je dostatek, poradili byste mi, jak navýšit počet otevřených UDP socketů, abych mohl propojit mezi sebou více uživatelů? S transkódováním u zdrojových kodeků je změna u využití RAM minimální, u procesoru je výraznější, ale i tak je mým limitem 1023 hovorů. Potřeboval bych ten server dostat z hlediska zatížení opravdu "na kolena".
« Poslední změna: 27. 03. 2011, 20:35:51 od Petr Krčmář »


martin

Re: Nevytvoří se další socket - Asterisk
« Odpověď #1 kdy: 26. 03. 2011, 04:45:27 »
Můžeš poslat aktuální výstup příkazu ulimit -aH?

Strasidlo

Re: Nevytvoří se další socket - Asterisk
« Odpověď #2 kdy: 26. 03. 2011, 09:41:36 »
Výstup po bootu je tento:

Kód: [Vybrat]
root@debian:~# ulimit -aH
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

V init scriptu asterisku se mi nereflektuje do "open files" ulimit -n 65536, musím ho tedy zadávat ručně, ale nevidím, že by to mělo nějaký efekt.

martin

Re: Nevytvoří se další socket - Asterisk
« Odpověď #3 kdy: 26. 03. 2011, 11:06:56 »
Zatim jsem se s timto problemem nepotykal, ale podle toho co jsem četl tak limits.conf je kongigurak pro pam_limit.

Prikaz "ulimit -aH" ti pak ukazuje harlimity na urovni kernelu (nastavitelny v /proc filesystemu).

Tzn. cokoliv nastavujes nema smysl, protoze kernel ma limity viz vyse a pres ne nejede vlak :-) (open file = 1024).

Nemam odkouzeseno ale zkus mrknout na tuto hodnotu v /proc:

cat /proc/sys/fs/file-max

Predpokladam, ze tam budes mit prave vyse uvedenych "1024". Mela by to byt hodnota,
podle ktere kernel nastavuje svuj hard limit.

Takze "echo 2048 > /proc/sys/fs/file-max" by mela zmenit hardlimit na 2048. A pak bys mel mit moznost nastavit limit pro usera az do 2048 atd.

Dej vedet jestli to vali :-).

Strasidlo

Re: Nevytvoří se další socket - Asterisk
« Odpověď #4 kdy: 26. 03. 2011, 13:52:33 »
Zkusím to a ozvu se - teď musím vyřešit problém s generátorem, občas odmítá generovat hovory ;-).


Strasidlo

Re: Nevytvoří se další socket - Asterisk
« Odpověď #5 kdy: 26. 03. 2011, 15:09:57 »
Hodnota, která tam byla a stále je:
Kód: [Vybrat]
root@debian:~# cat /proc/sys/fs/file-max
817845

Jediné, co se blíží k hodnotě 1022 je open files (ulimit -n). A ani když nastavím "open files" na více, než 1024, tak se nic nezmění, generátor si generuje více, ale na 1022 to končí na straně asterisku.

martin

Re: Nevytvoří se další socket - Asterisk
« Odpověď #6 kdy: 27. 03. 2011, 07:49:08 »
Tak tim padem asi neni problem na urovni kernelu. Podle toho co jsem cetl, tak ulimit nastavi dany limit ji v kontextu daneho skriptu. Jak jsi nastavil limit v asterisku?


Strasidlo

Re: Nevytvoří se další socket - Asterisk
« Odpověď #7 kdy: 27. 03. 2011, 07:58:20 »
Asterisk je momentálně bez jakéhokoli limitu a spoléhá se na omezení systémem (podle toho, jak chápu konfigurační soubory, tak limit na celkový počet hovorů není záležitostí asterisku). Vypadá to, že asi více hovorů neutáhne.

martin

Re: Nevytvoří se další socket - Asterisk
« Odpověď #8 kdy: 27. 03. 2011, 08:15:48 »
asi jsi uz cetl ale jen pro jistotu: http://www.voip-info.org/wiki/view/Asterisk+dimensioning

mam na ustredne jen 5 uzivatelu, tak se mi v tom ted moc nechce rypat :-(

Strasidlo

Re: Nevytvoří se další socket - Asterisk
« Odpověď #9 kdy: 27. 03. 2011, 09:06:13 »
Četl jsem, dva 4 jádrové procesory E5300 (4 roky staré Core 2) zvládnou 1500 hovorů. Já jsem na 1022 hovorech u nového Core i7 na 4 jádrech s HT na virtuálním stroji (přiděleny pouze 4 jádra).

Zkoušel jsem navýšit počet RTP portů, ale taktéž bez výsledku. Kroky podle toho článku "asterisk dimensioning" jsem provedl již v prvním kroce, a nic. 1023 je finální počet kanálů, jestli nenajdu něco jiného, tak je to asi konečná.