15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți
12.12.2023

Înfometarea proceselor în sistemele de operare: cauze, mecanisme și soluții de nivel producție

Înfometarea proceselor apare atunci când un proces este refuzat pe termen nelimitat de timpul CPU, memoria sau lățimea de bandă I/O de care are nevoie pentru a progresa — nu pentru că resursele nu există, ci pentru că politica de planificare favorizează în mod constant alte procese. Spre deosebire de deadlock, unde toate procesele concurente sunt blocate, înfometarea permite sistemului să pară funcțional în timp ce degradează sau oprește silențios anumite sarcini de lucru.

Această distincție contează operațional: un proces înfometat nu produce erori la nivelul kernelului, nu generează dump-uri de blocare și poate să nu declanșeze pragurile standard de alertare — făcându-l una dintre cele mai insidioase patologii de performanță în mediile server multi-tenant și cu concurență ridicată.

Ce Înseamnă cu Adevărat Înfometarea la Nivelul Kernelului

Termenul este împrumutat din ecologia resurselor: un proces „înfometează” atunci când este perpetuu depășit în competiție pentru o resursă finită. În sistemele de operare moderne, Linux Completely Fair Scheduler (CFS), cozile de priorități Windows NT și planificatorul BSD ULE implementează mecanisme pentru a preveni înfometarea — totuși aceasta apare în producție în condiții specifice.

La nivelul kernelului, înfometarea se manifestă ca un proces al cărui runtime virtual (în terminologia CFS) sau timp de așteptare crește nelimitat fără a fi vreodată selectat pentru execuție. Procesul rămâne în starea TASK_RUNNING — este pregătit și eligibil — dar planificatorul nu îi acordă niciodată o felie de CPU deoarece sarcinile cu prioritate mai mare sau mai frecvent rulabile îl preemptează întotdeauna.

Distincție tehnică cheie:

  • Deadlock: Două sau mai multe procese sunt blocate reciproc, fiecare așteptând o resursă deținută de celălalt. Sistemul nu face niciun progres pe acele sarcini.
  • Înfometare: Unul sau mai multe procese sunt perpetuu ocolite de planificator. Alte procese continuă să ruleze normal.
  • Livelock: Procesele nu sunt blocate, dar își schimbă continuu starea ca răspuns unul la altul fără a face progres real.

Cauzele Principale ale Înfometării Proceselor

Înțelegerea înfometării necesită examinarea mecanismelor specifice care o produc, nu doar listarea „resurselor limitate” ca o cauză.

1. Inversarea Priorității Statice Fără Îmbătrânire

Majoritatea planificatoarelor bazate pe priorități atribuie o prioritate fixă sau semi-fixă fiecărui proces. Dacă un proces cu prioritate scăzută este întotdeauna preemptat de un flux de sarcini cu prioritate medie și ridicată, acesta nu se execută niciodată. Modul critic de eșec aici este absența îmbătrânirii — o tehnică prin care prioritatea efectivă a unui proces este crescută incremental cu cât așteaptă mai mult. Fără îmbătrânire, un job de fundal cu prioritate scăzută pe un server aglomerat poate aștepta la nesfârșit.

Pe Linux, intervalul de valori nice (-20 la +19) și prioritățile în timp real (SCHED_FIFO, SCHED_RR) creează exact acest risc. Un proces care rulează sub SCHED_FIFO la prioritatea 99 va preempta fiecare proces SCHED_OTHER pe același nucleu CPU până când cedează voluntar sau se blochează.

2. Cozi Inechitabile în Planificatoarele I/O

Înfometarea CPU este bine documentată, dar înfometarea I/O este la fel de distructivă și adesea trecută cu vederea. Planificatorul I/O Linux (istoric CFQ, acum BFQ sau mq-deadline în funcție de versiunea kernelului și tipul de stocare) gestionează ordinea în care sunt servite cererile dispozitivelor bloc. Sub sarcini de scriere secvențială intensă — comune în serverele de baze de date și aplicațiile intensive în jurnalizare — planificatorul I/O poate deprioritiza cererile de citire aleatorie de la alte procese, privându-le efectiv de accesul la disc.

Aceasta este o problemă frecventă în mediile de VPS Hosting unde mai mulți chiriași partajează infrastructura de stocare subiacentă și contența I/O este o preocupare operațională reală.

3. Presiunea Memoriei și OOM Killer

Când RAM-ul fizic este epuizat, OOM (Out-Of-Memory) killer-ul kernelului Linux selectează un proces pentru terminare pe baza unui oom_score. Deși aceasta este tehnic o terminare mai degrabă decât o înfometare, starea precursoare — în care un proces este în mod repetat mutat pe disc și nu i se acordă niciodată suficientă memorie rezidentă pentru a se executa eficient — constituie înfometare de memorie. Procesul rulează tehnic, dar face progrese neglijabile din cauza defectelor de pagini constante și I/O-ului de swap.

4. Contența de Blocare și Înfometarea Mutex

În aplicațiile multi-thread, înfometarea apare la nivelul primitivelor de sincronizare. Dacă un mutex sau semafor folosește o politică de achiziție non-echitabilă (last-in-first-out sau selecție aleatorie printre firele de execuție în așteptare), un fir specific poate fi perpetuu ocolit chiar dacă blocarea este frecvent eliberată. Aceasta este distinctă de planificarea la nivelul OS și apare în întregime în spațiul utilizator sau subsistemul de sincronizare al kernelului.

5. Înfometarea Lățimii de Bandă de Rețea

În mediile containerizate și virtualizate, un proces sau container care consumă toată lățimea de bandă de rețea disponibilă poate înfometa alte procese de I/O de rețea. Fără modelarea traficului prin tc (traffic control) și cgroups, un singur proces scăpat de sub control poate monopoliza debitul NIC.

Înfometare vs. Deadlock vs. Livelock: Comparație Tehnică

ProprietateÎnfometareDeadlockLivelock
Progresul sistemuluiDa (alte procese rulează)Nu (procesele blocate se opresc)Aparent (niciun progres real)
Stare blocatăNu (procesul este rulabil)Da (procesul așteaptă resursa)Nu (procesul este activ)
Resursă deținutăNuDa (hold-and-wait circular)Nu
Auto-rezolvareUneori (cu îmbătrânire)Niciodată (necesită intervenție)Rar
Dificultatea detectăriiRidicată (nicio eroare explicită)Medie (detectarea ciclurilor)Ridicată (apare ca activitate)
Cauza principalăPolitică de planificare inechitabilăDependență circulară de resurseBucle reactive de schimbare a stării
Semnal kernel LinuxNiciunulNiciunul (soft lockup posibil)Niciunul

Cum Abordează Planificatoarele Moderne Înfometarea

Linux Completely Fair Scheduler (CFS)

CFS, introdus în kernelul Linux 2.6.23, abordează înfometarea prin urmărirea runtime-ului virtual (vruntime) pentru fiecare proces. Planificatorul selectează întotdeauna procesul cu cel mai mic vruntime — adică procesele care au primit mai puțin timp CPU sunt sistematic prioritizate. Acest design face ca înfometarea pură a CPU să fie aproape imposibilă sub CFS pentru procesele SCHED_OTHER.

Cu toate acestea, CFS nu protejează împotriva înfometării de la procesele în timp real. Orice proces planificat sub SCHED_FIFO sau SCHED_RR preemptează toate sarcinile SCHED_OTHER. Parametrul kernelului /proc/sys/kernel/sched_rt_runtime_us (implicit: 950.000 microsecunde pe secundă) rezervă 5% din timpul CPU pentru sarcinile non-timp-real tocmai pentru a preveni acest lucru.

Îmbătrânirea Priorității

Algoritmii clasici de îmbătrânire incrementează prioritatea efectivă a unui proces cu o cantitate fixă pentru fiecare ciclu de planificare petrecut în așteptare. Odată ce prioritatea efectivă atinge cel mai înalt nivel, procesului i se garantează execuția. După ce rulează, prioritatea sa se resetează la valoarea de bază. Aceasta este soluția din manual pentru înfometarea bazată pe priorități și este implementată în diverse forme în Windows NT, Solaris și planificatoarele Linux mai vechi.

Cozi Echitabile și Weighted Fair Queuing (WFQ)

Pentru resursele de rețea și I/O, Weighted Fair Queuing atribuie fiecărui flux sau proces o cotă de lățime de bandă proporțională cu greutatea sa. Chiar dacă un flux cu greutate mare generează mai mult trafic, fluxurilor cu greutate mică li se garantează o rată minimă de serviciu. Linux implementează aceasta prin disciplinele Hierarchical Token Bucket (HTB) și Stochastic Fair Queuing (SFQ) în subsistemul tc.

Diagnosticarea Înfometării în Sistemele Linux de Producție

Identificarea înfometării necesită corelarea simultană a mai multor surse de date.

Analiza Planificării CPU

# Check per-process CPU wait time and scheduling statistics
cat /proc/<PID>/schedstat

# Monitor scheduler latency with perf
perf sched latency --sort max

# Identify processes with high voluntary/involuntary context switches
pidstat -w 1 10

# Check real-time process priorities that may be starving others
ps -eo pid,comm,cls,pri,ni --sort=-pri | head -20

Ieșirea schedstat furnizează timpul cumulativ pe care procesul l-a petrecut așteptând în coada de rulare (run_delay în nanosecunde) — o măsură directă a înfometării planificării.

Indicatori ai Înfometării de Memorie

# Check swap activity — high si/so values indicate memory starvation
vmstat 1 10

# Identify processes with high major page fault rates
pidstat -r 1 10

# Check OOM kill history
dmesg | grep -i "oom|killed process"

# Inspect per-process memory pressure
cat /proc/<PID>/status | grep -E "VmRSS|VmSwap|VmPeak"

Detectarea Înfometării I/O

# Per-process I/O wait statistics
iotop -b -n 5

# Block device queue depth and wait times
iostat -x 1 5

# Check I/O scheduler in use for each block device
cat /sys/block/sda/queue/scheduler

# Identify processes blocked on I/O
ps aux | awk '$8 ~ /D/ {print}'

Procesele în starea D (sleep neîntreruptibil) sunt blocate pe I/O. O populație persistentă de procese în starea D este un indicator puternic al înfometării I/O sau al saturației subsistemului de stocare.

Soluții de Nivel Producție și Strategii de Atenuare

Implementați cgroups v2 pentru Izolarea Resurselor

Control Groups (cgroups v2) oferă cel mai robust mecanism pentru prevenirea înfometării în mediile multi-proces și containerizate. Prin atribuirea de cote explicite de CPU, memorie și I/O grupurilor de procese, garantați alocări minime de resurse indiferent de încărcarea sistemului.

# Create a cgroup with CPU weight (higher weight = more CPU share)
mkdir /sys/fs/cgroup/my_service
echo "100" > /sys/fs/cgroup/my_service/cpu.weight

# Set memory limit to prevent memory starvation of other groups
echo "2G" > /sys/fs/cgroup/my_service/memory.max

# Assign process to cgroup
echo <PID> > /sys/fs/cgroup/my_service/cgroup.procs

Greutatea CPU în cgroups v2 folosește un interval de 1–10000, unde implicit este 100. Un grup de procese cu greutatea 200 primește de două ori cota CPU față de unul cu greutatea 100 în condiții de contență.

Ajustați Planificatorul Linux pentru Sarcina Dvs. de Lucru

# Increase scheduler migration cost to reduce cache thrashing (latency-sensitive workloads)
echo 500000 > /proc/sys/kernel/sched_migration_cost_ns

# Reduce scheduler granularity for more frequent preemption (throughput workloads)
echo 1000000 > /proc/sys/kernel/sched_min_granularity_ns

# Ensure real-time tasks cannot starve normal tasks
echo 950000 > /proc/sys/kernel/sched_rt_runtime_us

Aplicați Politici de Planificare Adecvate Per Proces

# Set a process to batch scheduling (explicitly low-priority, won't starve interactive tasks)
chrt -b -p 0 <PID>

# Set a CPU-intensive background job to idle scheduling class
chrt -i -p 0 <PID>

# Adjust nice value for a running process
renice -n 10 -p <PID>

# Run a new command with reduced priority
nice -n 15 ./my_background_script.sh

Clasa SCHED_IDLE (chrt -i) este instrumentul corect pentru sarcinile cu adevărat de fundal — rulează doar când nu există niciun alt proces rulabil, eliminând complet capacitatea sa de a înfometa alte sarcini de lucru.

Selectarea Planificatorului I/O

# For NVMe SSDs (low-latency, no rotational penalty): use none or mq-deadline
echo "mq-deadline" > /sys/block/nvme0n1/queue/scheduler

# For HDDs with mixed workloads: use bfq for fairness
echo "bfq" > /sys/block/sda/queue/scheduler

# Make persistent across reboots (add to /etc/udev/rules.d/)
echo 'ACTION=="add|change", KERNEL=="sda", ATTR{queue/scheduler}="bfq"' 
  > /etc/udev/rules.d/60-scheduler.rules

BFQ (Budget Fair Queuing) este conceput special pentru a preveni înfometarea I/O prin garantarea fiecărui proces a unei cote proporționale din lățimea de bandă a discului. Este planificatorul recomandat pentru mediile de hosting partajat și serverele de baze de date.

Controlul Lățimii de Bandă de Rețea cu tc

# Create a root HTB qdisc on the primary interface
tc qdisc add dev eth0 root handle 1: htb default 30

# Add a parent class with total bandwidth
tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbit

# Add child classes with guaranteed minimums (prevents starvation)
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 100mbit ceil 1gbit
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 100mbit ceil 1gbit

# Add SFQ leaf to each class for per-flow fairness
tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10

Această configurație garantează fiecărei clase un minim de 100 Mbps permițând în același timp utilizarea în rafală până la capacitatea completă a legăturii de 1 Gbps când lățimea de bandă este disponibilă.

Ajustarea Supraangajării Memoriei și a Swap-ului

# Reduce swappiness to minimize swap-induced memory starvation
echo 10 > /proc/sys/vm/swappiness

# Enable memory overcommit accounting (prevents OOM from surprising processes)
echo 2 > /proc/sys/vm/overcommit_memory

# Set overcommit ratio (total allocatable = RAM * ratio + swap)
echo 80 > /proc/sys/vm/overcommit_ratio

Setarea vm.swappiness=10 instruiește kernelul să prefere recuperarea cache-ului de pagini față de schimbarea memoriei proceselor, reducând semnificativ probabilitatea înfometării memoriei sub sarcină moderată.

Înfometarea în Mediile Virtualizate și Containerizate

Pe Servere Dedicate care rulează hipervizori (KVM, VMware ESXi, Hyper-V), înfometarea poate apărea la două niveluri distincte:

Înfometarea la nivelul hipervizorului: O mașină virtuală este refuzată de ciclurile CPU de către planificatorul hipervizorului. KVM folosește CFS-ul kernelului gazdă pentru planificarea vCPU, ceea ce înseamnă că o VM cu o greutate mai mică a cotei CPU poate fi înfometată de VM-uri cu greutăți mai mari în condiții de contență. DRS (Distributed Resource Scheduler) al VMware folosește cote, rezervări și limite pentru a controla acest lucru.

Înfometarea la nivelul OS-ului oaspete: În interiorul VM-ului însuși, se aplică aceleași dinamici de planificare la nivel OS. O sarcină de lucru containerizată care rulează sub Docker sau Kubernetes fără limite explicite de resurse poate monopoliza CPU-ul și memoria OS-ului oaspete, înfometând containerele co-localizate.

Pentru mediile Kubernetes, definiți întotdeauna atât requests cât și limits în specificațiile pod-urilor:

resources:
  requests:
    cpu: "250m"
    memory: "512Mi"
  limits:
    cpu: "1000m"
    memory: "1Gi"

Valoarea requests determină plasarea planificării și greutatea cotei CPU a cgroup-ului. Fără aceasta, planificatorul Kubernetes nu are nicio bază pentru plasarea echitabilă, iar runtime-ul containerului atribuie greutăți implicite (egale) — care permit totuși înfometarea dacă un container saturează în mod constant limita sa CPU.

Înfometarea în Serverele de Baze de Date și Aplicații

Motoarele de baze de date implementează propriile planificatoare interne care sunt independente de planificatorul OS. PostgreSQL folosește un model proces-per-conexiune unde fiecare proces backend concurează pentru resursele OS în mod normal, dar contența de blocare în cadrul bazei de date (blocări la nivel de rând, blocări consultative) poate cauza înfometare la nivel de aplicație unde interogări specifice așteaptă la nesfârșit achiziția blocării.

MySQL/InnoDB folosește un pool de fire cu limite de concurență configurabile (innodb_thread_concurrency). Setarea acestei valori prea mică cauzează înfometarea interogărilor pe măsură ce firele se aliniază așteptând sloturile de execuție. Setarea prea mare cauzează thrashing CPU. Valoarea de pornire recomandată este 2 × number of CPU cores.

Pentru serverele web, Nginx și Apache au profiluri distincte de înfometare. Modelul event-driven al Nginx este în mod inerent rezistent la înfometarea worker-ilor, dar epuizarea pool-ului de conexiuni upstream (de exemplu, către PHP-FPM sau un API backend) creează înfometare la nivel de aplicație. MPM-ul prefork al Apache poate epuiza limita sa MaxRequestWorkers, cauzând cozi de conexiuni noi la nesfârșit — o formă de înfometare a conexiunilor.

Aceste considerații sunt direct relevante la configurarea unui VPS cu cPanel pentru sarcini de lucru de hosting web partajat, unde mai multe site-uri concurează pentru pool-urile de worker PHP-FPM și limitele de conexiuni MySQL.

Infrastructura de Monitorizare pentru Prevenirea Înfometării

Diagnosticarea reactivă este insuficientă pentru sistemele de producție. Un stack de monitorizare proactiv ar trebui să includă:

Metrici Prometheus + Node Exporter de urmărit:

  • node_schedstat_waiting_seconds_total — timp cumulativ de așteptare în coada de rulare CPU per CPU
  • node_vmstat_pgmajfault — defecte majore de pagini indicând presiunea memoriei
  • node_disk_io_time_weighted_seconds_total — saturația cozii I/O
  • node_pressure_cpu_waiting_seconds_total — presiunea CPU Linux PSI (Pressure Stall Information)
  • node_pressure_memory_full_seconds_total — timp de blocare completă PSI memorie

Linux PSI (disponibil din kernelul 4.20) este cel mai direct indicator de înfometare disponibil în kernel. Raportează procentul de timp în care sarcinile au fost blocate așteptând resurse CPU, memorie sau I/O:

# Real-time PSI monitoring
cat /proc/pressure/cpu
cat /proc/pressure/memory
cat /proc/pressure/io

Formatul ieșirii: some avg10=X.XX avg60=X.XX avg300=X.XX total=NNNN unde some indică că cel puțin o sarcină a fost blocată. Valorile peste 10–15% pe avg60 justifică investigații imediate.

Pentru echipele care gestionează Panouri de Control VPS sau stacks de servere personalizate, integrarea metricilor PSI în dashboard-urile Grafana oferă avertizare timpurie înainte ca înfometarea să degradeze performanța orientată către utilizator.

Matricea de Decizie Practică: Alegerea Mecanismului Anti-Înfometare Potrivit

SimptomTipul ResurseiInstrument RecomandatȚinta Configurației
Job-urile de fundal nu se finalizează niciodatăCPUSCHED_IDLE sau nice +19Eliminați competiția CPU de fundal
Creșteri de latență interactivă sub sarcinăCPUAjustare CFS + greutate CPU cgroups v2Garantați cota procesului interactiv
Interogările bazei de date expirăCPU + Blocareinnodb_thread_concurrency, timeout blocareLimitați timpul de așteptare a blocării
Job-urile intensive pe disc blochează servirea webI/OPlanificator BFQ + cgroups v2 io.weightAlocare I/O proporțională
OOM kills container sub sarcinăMemoriecgroups v2 memory.min + vm.swappinessGarantați memoria rezidentă minimă
Procesul intensiv în rețea înfometează alteleRețeaHTB + SFQ prin tcGaranție lățime de bandă per clasă
VM înfometat de hipervizorvCPURezervări/cote CPU hipervizorRezervați cicluri minime vCPU

Concluzii Tehnice Cheie

  • Nu vă bazați niciodată pe planificarea implicită pentru serverele cu sarcini de lucru mixte. Clasificați explicit procesele folosind chrt, nice și cgroups v2 pe baza sensibilității lor la latență și a priorității de afaceri.
  • Activați monitorizarea PSI (/proc/pressure/*) pe toate sistemele Linux de producție. Este cel mai precis indicator de înfometare în timp real din kernel și are un overhead aproape zero.
  • Folosiți BFQ pentru discurile rotative și orice dispozitiv NVMe care servește sarcini de lucru mixte aleatorie/secvențiale în medii multi-tenant. Garanțiile de echitate merită overhead-ul marginal de debit.
  • Setați cererile de resurse Kubernetes fără excepție. Un requests.cpu nesetat nu înseamnă „nelimitat” — este o responsabilitate de planificare care permite înfometarea CPU la nivel de container.
  • Distingeți înfometarea de deadlock înainte de a interveni. Oprirea și repornirea unui proces înfometat nu rezolvă dezechilibrul de planificare subiacent; elimină doar temporar simptomul.
  • Auditați atribuirile de priorități în timp real (SCHED_FIFO/SCHED_RR) pe orice sistem unde sunt utilizate. Un singur proces în timp real configurat greșit poate înfometa toate sarcinile de lucru cu prioritate normală pe un nucleu CPU la nesfârșit.
  • Pentru mediile de Hosting Web Partajat, impuneți cote CPU și I/O per cont la nivelul cgroup mai degrabă decât să vă bazați exclusiv pe limitarea ratei la nivelul aplicației.

Întrebări Frecvente

Care este diferența dintre înfometare și deadlock într-un sistem de operare?

Deadlock apare când două sau mai multe procese sunt blocate permanent, fiecare deținând o resursă de care celălalt are nevoie — niciun proces nu face progres. Înfometarea apare când un proces este perpetuu ocolit de planificator deși este rulabil; alte procese continuă să se execute normal. Deadlock necesită ruperea unei dependențe circulare; înfometarea necesită corectarea politicii de planificare, de obicei prin implementarea îmbătrânirii sau a cozilor echitabile.

Cum previne planificatorul Linux CFS înfometarea CPU?

CFS urmărește un runtime virtual (vruntime) pentru fiecare proces și selectează întotdeauna procesul cu cel mai mic vruntime pentru execuție. Aceasta asigură că procesele care primesc mai puțin timp CPU sunt sistematic prioritizate, făcând înfometarea indefinită a CPU a proceselor SCHED_OTHER aproape imposibilă. Cu toate acestea, procesele în timp real (SCHED_FIFO, SCHED_RR) ocolesc complet CFS și pot înfometa în continuare procesele normale dacă parametrul sched_rt_runtime_us nu este setat corect.

Cum pot detecta dacă un proces este înfometat pe un server Linux?

Citiți /proc/<PID>/schedstat pentru a verifica timpul cumulativ de așteptare în coada de rulare. Monitorizați /proc/pressure/cpu pentru metricile de blocare PSI. Folosiți perf sched latency --sort max pentru a identifica procesele cu latență de planificare anormal de ridicată. Procesele în stare persistentă D vizibile în ieșirea ps aux indică înfometare I/O mai degrabă decât înfometare CPU.

Afectează înfometarea proceselor mediile VPS și server cloud diferit față de bare metal?

Da. Pe un VPS, înfometarea poate apărea atât la nivelul hipervizorului (planificatorul hipervizorului refuzând timp vCPU VM-ului dvs.) cât și în interiorul OS-ului oaspete. Înfometarea la nivelul hipervizorului este invizibilă pentru instrumentele standard de monitorizare OS și necesită metrici specifice hipervizorului sau timp de furt notabil (%st în ieșirea top). Timp de furt ridicat — de obicei peste 5–10% susținut — indică faptul că hipervizorul nu livrează ciclurile vCPU la care VM-ul dvs. are dreptul.

Care este cel mai rapid mod de a preveni ca un proces specific să înfometeze altele pe un server aglomerat?

Atribuiți-l clasei de planificare SCHED_IDLE cu chrt -i -p 0 <PID>. Această clasă se execută doar când nu există niciun alt proces rulabil, garantând că nu poate înfometa nicio altă sarcină de lucru. Pentru procesele de fundal intensive în I/O, setați suplimentar prioritatea lor I/O la clasa idle: ionice -c 3 -p <PID>. Combinarea ambelor elimină procesul ca sursă de înfometare CPU și I/O cu două comenzi și zero modificări ale aplicației.

15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți