[FoLUG] fork() on linux returns ENOMEM

Enrico Placci e.placci@gmail.com
Gio 1 Nov 2012 14:13:12 CET


Ciao,
Come va? Era da troppo tempo che non spammavo la lista , ritorno con un
grattacapo non da poco :-).
Dunque lo scopo finale del mio script e` bombardare un server mysql con
1000, 2000 queries simultaneamente (benchmarks).
Per cominciare ho scritto uno script che forka (?) 1000 o 2000 processi,
poi manda SIGUSR1 a tutti i processi (al gruppo) , i quali stampano il
millisecondo in cui hanno ricevuto il segnale, il numero del processo e il
pid.
Dopo un po' di smanettamento attorno agli user limits nel mio mac sono
riuscito a farlo girare con 2000 forks. Il limite era 700 ed ho potuto
verificare che e` un limite che ha decisamente senso (Core i5 1.7Ghz 4GB
RAM).
Al che sono passato al server linux:
16 Intel(R) Xeon(R) CPU           X7350  @ 2.93GHz
32 GB RAM
free -m
             total       used       free     shared    buffers     cached
Mem:         32235       7142      25093          0         85       4572
-/+ buffers/cache:       2484      29750
Swap:            0          0          0

 ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 20
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) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


Dopo 639 processi ricevo
 ./simulkill.scaled:5:in `fork': Cannot allocate memory - fork(2)
(Errno::ENOMEM)
Allego lo script e il "strace"
Ho letto che ENOMEM puo` essere "ritornato" anche nel caso si esauriscano
risorse che non sono la memoria, qualcuno ha qualche idea su che limite mi
sta bloccando?
Ho provato aumentando open files a 3000 ma non ha aiutato.
Grazie
Ciao
Enrico
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        trace.gz
Tipo:        application/x-gzip
Dimensione:  22926 bytes
Descrizione: non disponibile
URL:         <http://lists.linux.it/pipermail/folug/attachments/20121101/4b9a80d2/attachment-0001.bin>
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        simulkill.scaled
Tipo:        application/octet-stream
Dimensione:  687 bytes
Descrizione: non disponibile
URL:         <http://lists.linux.it/pipermail/folug/attachments/20121101/4b9a80d2/attachment-0001.obj>


Maggiori informazioni sulla lista FoLUG