- Home
- Categorie
- Coding e Sistemistica
- Hosting, Server e Domini
- Limitare l'utilizzi della memoria SWAP o RAM a un programma in esecuzione
-
Ovviamente esiste ed è ulimit http://ss64.com/bash/ulimit.html
C'è anche un metodo più complesso che è quello dei cgroups http://www.kernel.org/doc/Documentation/cgroups/cgroups.txt
-
Non è possibile fare come cpulimit? cioè indico il processo a cui deve limitare l'uso di CPU? ulimit sembra ke lo termini il processo più che limitarlo, e poi non è che lo limita bene perchè si avviano 2 processi quando avvio questo programma, uno lo stoppa e l'altro abusa di memoria per conto suo, che comando devo dargli?
Ho gia provato ulimit -m 50000 (sarebbe 50MB), ma nn ha effetto su tutti e 2 i processi
Oppure la seconda alternativa come posso fare a limitarlo a livello del kernel, ma vorrei che lo faccia solo per determinati processi!
Puoi spiegarmi come fare a livello del kernel sia come consumo di CPU che di RAM?
-
L'unico modo è sfruttare i cgroups. Ho visto che esiste un programma chiamato rlimit ma non so fino a che punto funziona.
-
Come faccio ad usare i cgroups?
Facciamo conto che abbiamo un programma binario avviato come root, come devo settare questi cgroups in modo che questo programma:
- Non superi il 20% di CPU
- Non superi oltre 80 MB di RAM
Come devo fare a settare questi cgroups?
-
Dipende dalla distribuzione. Ti consiglio di dare un'occhiata qui http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html
-
@paolino said:
Dipende dalla distribuzione. Ti consiglio di dare un'occhiata qui http : / / docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/ch01.html
La distribuzione è Debian 5 x64
-
-
Puoi procurarmi uno script che ferma i processi che superano un certo limite di utilizzo della RAM?
Pseudo Linguaggio:
varPROG = "prog.bin"; ciclo{ if(varPROG è in esecuzione) { varPID = PID(varPROG); // estrai PID del programma varMEM = RAM(varPID); // estrai variabile di utilizzo di memoria da parte del PID if (varMEM => "5") { // se maggiore del 5% dell'utilizzo kill - 9 varPID; // ferma il programma con tale PID } } sleep(7); // In pausa per 7 secondi }
-
Non ho trovato nulla di già pronto online. Comunque per conoscere lo stato di un processo, devi leggere /proc/<pid-del-processo>/status
-
Con ulimit posso limitare anche l'utilizzo della CPU?
Per esempio per limitare l'utilizzo della cpu con ulimit a 20% come faccio?
-
ulimit -t XXX
-
Facendo ulimit -t 20, limiterà i processi a un consumo massimo del 20% della CPU?
-
Si