Pagina 1 di 1

dubbio su ulimit

Inviato: mer 17 ott 2007, 23:59
da syaochan
Ciao a tutti, mi è venuto un dubbio su ulimit. Se limito la resident set size in una shell e poi da questa lancio due processi, il limite sarà per ogni processo oppure per tutti insieme?
Cioè se il limite è 100 ogni processo potrà occupare 100 oppure tutti i figli di quella shell potranno occupare 100, sommando le rispettive quote?
Se dovrebbe funzionare come nel secondo caso, allora ho qualcosa che non va :?
Infatti con ulimit -m 300000 ho due processi che occupano 97484 e 231620
Se il funzionamento corretto fosse il primo, come faccio ad ottenere quello che speravo che fosse (cioè il secondo)?
Grazie!
Ciao
C.

Inviato: gio 18 ott 2007, 12:29
da masalapianta
devi limitare anche la virtual memory (ulimit -v), altrimenti il limite impostato viene superato spostando pagine nella partizione di swap:
$ ulimit -m 50144
$ ./malloc
ale 3217 48.3 79.6 410020 397900 pts/6 D+ 12:20 0:01 ./malloc
$ ulimit -v 50144
$ ./malloc
ale 3298 61.5 9.7 50056 48916 pts/6 R+ 12:26 0:01 ./malloc

Inviato: gio 18 ott 2007, 19:13
da syaochan
Grazie per la risposta. Purtroppo ho scoperto che non posso limitare la virtual memory per un problema di wine (che non è proprio di wine però, i dettagli qui)... qualche altra idea per evitare di trovarmi di tanto in tanto il PC piantato per scarsità di memoria?
Ciao
C.

Inviato: ven 19 ott 2007, 1:33
da masalapianta
syaochan ha scritto:Grazie per la risposta. Purtroppo ho scoperto che non posso limitare la virtual memory per un problema di wine (che non è proprio di wine però, i dettagli qui)... qualche altra idea per evitare di trovarmi di tanto in tanto il PC piantato per scarsità di memoria?
linux per limitare le risorse dei processi mette a disposizione setrlimit() (man 2 setrlimit), se non vuoi usarla (via ulimit o in qualsiasi altro modo) puoi usare altre implementazioni di resource limiting (in giro mi pare d'aver visto qualche kernel patch), ma non cambierebbe nulla, in quanto, da quel che leggo nel link da te postato (non conosco e non ho mai usato wine, quindi prendo per buono quel che si dice in quella pagina web), il problema e' che wine alloca subito tutta la ram che potrebbe servirgli e poi se la gestisce lui, quindi ti ritorna quell'errore se non riesce subito ad allocarla; ovviamente questo ti sega le gambe perche' e' irrilevante quale sistema di resource limiting usi, visto che il fatto stesso di limitargli la memoria allocabile (e non come viene limitata) causa il problema.
Detto questo le possibilita' son due:
1) compri altra ram
2) sostituisci con qualche soluzione nativa i software win32 che usi con wine