Puncte:9

Cum pot limita utilizarea CPU și RAM pentru un proces?

drapel in

Sunt pe un Ubuntu VPS cu SFTP și o consolă. Am nevoie de un proces specific pentru a folosi doar 60% din CPU și 2048 MB de RAM.

De asemenea, am nevoie ca un alt proces să folosească doar 30% din CPU și 1024MB de RAM.

Cum pot limita utilizarea CPU și RAM a unui proces?

muru avatar
drapel us
Răspunde asta la întrebarea ta? [Cum se limitează utilizarea resurselor pentru un anumit proces?](https://askubuntu.com/questions/1045076/how-to-limit-resource-usage-for-a-given-process)
Puncte:13
drapel in

Fii avertizat: Aici sunt dragoni.

Când începeți să mergeți pe calea controlului specific al resurselor aplicațiilor / proceselor / firelor de execuție în această măsură, începeți să deschideți o cutie de probleme a Pandorei literală când vine timpul să depanați o problemă pe care limitarea ratei dvs. nu a luat-o în considerare.

Acestea fiind spuse, dacă credeți că știți ce faceți, aveți trei opțiuni disponibile: Grozav, cpulimit, și grupurile de control (Cgroups).

Iată un TL;DR pentru aceste trei metode:

Grozav ⢠frumos {proces}

Aceasta este o modalitate foarte simplă de a stabili prioritățile unei sarcini și este destul de eficientă pentru utilizări „o singură dată”, cum ar fi reducerea priorității unei sarcini de lungă durată, costisitoare din punct de vedere computațional, care ar trebui să utilizeze mai mult CPU atunci când mașina nu este utilizată. de alte sarcini (sau oameni).

Limita CPU ⢠cpulimit -l 60 {proces}

Dacă performanța serverului dvs. suferă (a.k.a. se blochează) atunci când utilizarea procesorului depășește o anumită cantitate, atunci cpulimit poate ajuta la reducerea presiunii asupra sistemului.Face acest lucru întrerupând procesul la intervale diferite pentru a-l menține sub un plafon definit prin trimitere SIGSTOP și SIGCONT semnale către proces. cpulimit nu schimbă Grozav valoarea procesului, în schimb monitorizează și controlează utilizarea CPU în lumea reală.

Veți găsi asta cpulimit este util atunci când doriți să vă asigurați că un proces nu folosește mai mult de o anumită porțiune a procesorului, la care face aluzie întrebarea dvs., dar un dezavantaj este că procesul nu poate folosi tot timpul disponibil al procesorului când sistemul este inactiv ( care Grozav permite).

Cgrupuri

sudo cgcreate -g cpu:/restrâns
sudo cgset -r cpu.shares=768 reținut
sudo cgexec -g cpu: restrâns {proces}

Cgroups – grupurile de control – sunt o caracteristică încorporată în nucleul Linux care vă permite să controlați modul în care ar trebui să fie alocate resursele. Cu Cgroups puteți specifica cât de mult CPU, memorie, lățime de bandă, sau combinații ale acestor resurse poate fi folosit de procesele care sunt atribuite unui grup.

Un avantaj cheie al Cgroups față de Grozav sau cpulimit este că limitele sunt aplicate unui set de procese; nu doar unul. Grozav și cpulimit sunt, de asemenea, limitate la limitarea utilizării CPU a unui proces, în timp ce Cgroups pot limita alte resurse de proces.

Dacă te duci în carbura Cgroups, atunci poți hiper-optimiza un sistem pentru un anumit set de sarcini.

drapel mx
și despre limitarea utilizării RAM; poți da exemplu pentru a face asta prin CGroups?
Puncte:10
drapel cn

Atenție: dacă nu doriți să acordați procesului o limită strictă, doar o prioritate, căutați Grozav comanda. Acest răspuns va presupune că doriți o limită strictă.

Limitarea utilizării CPU

Acest răspuns minunat la o altă întrebare explică destul de bine

Instalare cpulimit

sudo apt-get install cpulimit

Oferă diferite metode de limitare a utilizării CPU a unui proces foo a spune, 20%

  • După numele său de proces: sudo cpulimit -e foo -l 20.

  • După numele său absolut de cale: sudo cpulimit -P /usr/bin/foo -l 20

  • După PID-ul său:

  1. Găsiți PID-ul procesului: pidof foo. (să zicem, scoate 1881)
  2. sudo cpulimit -p 1881 -l 20

Limitarea utilizării memoriei

Pentru mai multe opțiuni, vezi acest post despre cum să limitați utilizarea RAM.

De exemplu, pentru a limita utilizarea procesului de la 12345 la 2048 MB de RAM, puteți utiliza prlimit comanda

$ prlimit --pid 12345 --as=2048000000
drapel mx
Rețineți că „limitarea spațiului de adresă” **nu este același** cu „limitarea utilizării RAM”. Numirea „limită memorie virtuală (RAM+swap)” este doar puțin mai bună, dar totuși incorectă.Se poate avea cu ușurință un program care necesită 3 GB sau spațiu de adresă, folosind doar 100 MB de RAM și 0 MB de swap, de exemplu (vezi `mmap(2)` & friends, matrice rare etc).
cocomac avatar
drapel cn
@MatijaNalis Dacă știți o modalitate mai bună, atunci postați un răspuns. Sau editați unul dintre răspunsurile existente.
Peter Cordes avatar
drapel fr
@MatijaNalis: Tradiționalul ulimit `-m ` (în KiB) funcționează? Ar trebui să limiteze dimensiunea setului rezident, conform `ulimit --help`. (Există un ulimit separat „-v memorie virtuală” (în KiB)). Pentru timpul CPU există și tradiționalul `ulimit -t `, despre care presupun că doar nucleul oprește un proces care îl depășește.
drapel mx
@PeterCordes, din păcate, nu cred (deși ResidentSetSize este exact ceea ce @newalvaro9 vrea să limiteze) - oricum nu în niciun nucleu non-arhaic. `strace bash` dezvăluie că `ulimit -m` apelează `prlimit64(0, RLIMIT_RSS, ...` și pagina de manual `prlimit64(2)` spune (printre altele) că limita `RLIMIT_RSS [....] are efect numai în Linux 2.4.x, x
Peter Cordes avatar
drapel fr
@MatijaNalis: Asta are sens. Cu supracompunerea memoriei activată în mod implicit, ar fi greu să o faceți utilă. Alocarea paginilor fizice are loc prea târziu pentru ca mmap/malloc să returneze NULL, astfel încât singurele opțiuni ar fi schimbarea altor pagini pentru a face loc (crearea dezbaterii de schimb atunci când un proces nu mai avea RSS) sau uciderea acestuia, niciuna dintre acestea nu este deosebit de de dorit. . Și, probabil, a face contabilitate ar fi nasol pentru performanță pe un sistem multi-core pentru procese cu mai multe fire. Dar, de asemenea, are sens ca opțiunea shell `ulimit -m` să nu dispară, nici câmpurile API/ABI.
Peter Cordes avatar
drapel fr
Ar putea avea sens ca o versiune Linux a `bash` să imprime `(fără efect în Linux după 2.4.30)` ca parte a rezultatului de ajutor, astfel încât alți oameni să nu-și piardă timpul cu ea, dacă practic există zero șansa ca o viitoare versiune Linux să o facă să facă ceva din nou.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.