15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
12.12.2023

Kelaparan Proses dalam Sistem Operasi: Penyebab, Mekanisme, dan Solusi Tingkat Produksi

Kelaparan proses terjadi ketika sebuah proses terus-menerus ditolak waktu CPU, memori, atau bandwidth I/O yang dibutuhkan untuk membuat kemajuan — bukan karena sumber daya tidak ada, tetapi karena kebijakan penjadwalan secara konsisten mengutamakan proses lain. Tidak seperti deadlock, di mana semua proses yang bersaing diblokir, kelaparan memungkinkan sistem tampak berfungsi sambil secara diam-diam menurunkan atau menghentikan beban kerja tertentu.

Perbedaan ini penting secara operasional: proses yang kelaparan tidak menghasilkan kesalahan di tingkat kernel, tidak menghasilkan crash dump, dan mungkin tidak memicu ambang peringatan standar — menjadikannya salah satu patologi kinerja paling berbahaya di lingkungan server multi-tenant dan konkurensi tinggi.

Apa yang Sebenarnya Dimaksud Kelaparan di Tingkat Kernel

Istilah ini dipinjam dari ekologi sumber daya: sebuah proses "kelaparan" ketika terus-menerus kalah bersaing untuk mendapatkan sumber daya yang terbatas. Dalam sistem operasi modern, Linux Completely Fair Scheduler (CFS), antrian prioritas Windows NT, dan penjadwal BSD ULE semuanya mengimplementasikan mekanisme untuk mencegah kelaparan — namun tetap muncul dalam produksi dalam kondisi tertentu.

Di tingkat kernel, kelaparan termanifestasi sebagai proses yang runtime virtualnya (dalam terminologi CFS) atau waktu tunggunya tumbuh tanpa batas tanpa pernah dipilih untuk dieksekusi. Proses tetap dalam status TASK_RUNNING — siap dan memenuhi syarat — tetapi penjadwal tidak pernah memberikannya irisan CPU karena tugas berprioritas lebih tinggi atau lebih sering dapat dijalankan selalu mendahuluinya.

Perbedaan teknis utama:

  • Deadlock: Dua atau lebih proses saling diblokir, masing-masing menunggu sumber daya yang dipegang oleh yang lain. Sistem tidak membuat kemajuan sama sekali pada tugas-tugas tersebut.
  • Kelaparan: Satu atau lebih proses terus-menerus dilewati oleh penjadwal. Proses lain terus berjalan secara normal.
  • Livelock: Proses tidak diblokir tetapi terus-menerus mengubah status sebagai respons satu sama lain tanpa membuat kemajuan nyata.

Penyebab Utama Kelaparan Proses

Memahami kelaparan memerlukan pemeriksaan mekanisme spesifik yang menghasilkannya, bukan hanya mencantumkan "sumber daya terbatas" sebagai penyebab.

1. Inversi Prioritas Statis Tanpa Penuaan

Sebagian besar penjadwal berbasis prioritas menetapkan prioritas tetap atau semi-tetap untuk setiap proses. Jika proses berprioritas rendah selalu didahului oleh aliran tugas berprioritas menengah dan tinggi, proses tersebut tidak pernah dieksekusi. Mode kegagalan kritis di sini adalah ketiadaan penuaan — teknik di mana prioritas efektif suatu proses ditingkatkan secara bertahap semakin lama ia menunggu. Tanpa penuaan, pekerjaan latar belakang berprioritas rendah pada server yang sibuk dapat menunggu tanpa batas.

Di Linux, rentang nilai nice (-20 hingga +19) dan prioritas real-time (SCHED_FIFO, SCHED_RR) menciptakan risiko ini. Proses yang berjalan di bawah SCHED_FIFO dengan prioritas 99 akan mendahului setiap proses SCHED_OTHER pada inti CPU yang sama hingga secara sukarela mengalah atau diblokir.

2. Antrian yang Tidak Adil dalam Penjadwal I/O

Kelaparan CPU terdokumentasi dengan baik, tetapi kelaparan I/O sama-sama merusak dan sering diabaikan. Penjadwal I/O Linux (secara historis CFQ, sekarang BFQ atau mq-deadline tergantung pada versi kernel dan jenis penyimpanan) mengelola urutan permintaan perangkat blok yang dilayani. Di bawah beban kerja penulisan sekuensial yang berat — umum di server database dan aplikasi intensif log — penjadwal I/O dapat menurunkan prioritas permintaan baca acak dari proses lain, secara efektif membuat mereka kelaparan akses disk.

Ini adalah masalah yang sering terjadi di lingkungan VPS Hosting di mana beberapa tenant berbagi infrastruktur penyimpanan yang mendasarinya dan persaingan I/O merupakan masalah operasional nyata.

3. Tekanan Memori dan OOM Killer

Ketika RAM fisik habis, Out-Of-Memory (OOM) killer kernel Linux memilih proses untuk dihentikan berdasarkan oom_score. Meskipun ini secara teknis merupakan penghentian daripada kelaparan, kondisi pendahulunya — di mana proses berulang kali ditukar ke disk dan tidak pernah diberi memori residen yang cukup untuk dieksekusi secara efisien — merupakan kelaparan memori. Proses secara teknis berjalan tetapi membuat kemajuan yang dapat diabaikan karena kesalahan halaman yang konstan dan swap I/O.

4. Persaingan Kunci dan Kelaparan Mutex

Dalam aplikasi multi-thread, kelaparan terjadi di tingkat primitif sinkronisasi. Jika mutex atau semaphore menggunakan kebijakan akuisisi yang tidak adil (last-in-first-out atau pemilihan acak di antara thread yang menunggu), thread tertentu dapat terus-menerus dilewati meskipun kunci sering dilepaskan. Ini berbeda dari penjadwalan tingkat OS dan terjadi sepenuhnya dalam userspace atau subsistem sinkronisasi kernel.

5. Kelaparan Bandwidth Jaringan

Dalam lingkungan yang dikontainerisasi dan divirtualisasi, proses atau kontainer yang mengonsumsi seluruh bandwidth jaringan yang tersedia dapat membuat proses lain kelaparan I/O jaringan. Tanpa pembentukan lalu lintas melalui tc (traffic control) dan cgroups, satu proses yang tidak terkendali dapat memonopoli throughput NIC.

Kelaparan vs. Deadlock vs. Livelock: Perbandingan Teknis

PropertiKelaparanDeadlockLivelock
Kemajuan sistemYa (proses lain berjalan)Tidak (proses yang diblokir berhenti)Tampak (tidak ada kemajuan nyata)
Status diblokirTidak (proses dapat dijalankan)Ya (proses menunggu sumber daya)Tidak (proses aktif)
Sumber daya dipegangTidakYa (hold-and-wait melingkar)Tidak
Dapat diselesaikan sendiriKadang-kadang (dengan penuaan)Tidak pernah (memerlukan intervensi)Jarang
Kesulitan deteksiTinggi (tidak ada kesalahan eksplisit)Sedang (deteksi siklus)Tinggi (tampak sebagai aktivitas)
Penyebab utamaKebijakan penjadwalan yang tidak adilKetergantungan sumber daya melingkarLoop perubahan status reaktif
Sinyal kernel LinuxTidak adaTidak ada (soft lockup mungkin terjadi)Tidak ada

Cara Penjadwal Modern Mengatasi Kelaparan

Linux Completely Fair Scheduler (CFS)

CFS, yang diperkenalkan di kernel Linux 2.6.23, mengatasi kelaparan dengan melacak runtime virtual (vruntime) untuk setiap proses. Penjadwal selalu memilih proses dengan vruntime terendah — artinya proses yang menerima lebih sedikit waktu CPU secara sistematis diprioritaskan. Desain ini membuat kelaparan CPU murni hampir tidak mungkin terjadi di bawah CFS untuk proses SCHED_OTHER.

Namun, CFS tidak melindungi terhadap kelaparan dari proses real-time. Setiap proses yang dijadwalkan di bawah SCHED_FIFO atau SCHED_RR mendahului semua tugas SCHED_OTHER. Parameter kernel /proc/sys/kernel/sched_rt_runtime_us (default: 950.000 mikrodetik per detik) menyediakan 5% waktu CPU untuk tugas non-real-time khusus untuk mencegah hal ini.

Penuaan Prioritas

Algoritma penuaan klasik menaikkan prioritas efektif suatu proses dengan jumlah tetap untuk setiap siklus penjadwalan yang dihabiskannya dalam menunggu. Setelah prioritas efektif mencapai level tertinggi, proses dijamin untuk dieksekusi. Setelah berjalan, prioritasnya direset ke nilai dasarnya. Ini adalah solusi buku teks untuk kelaparan berbasis prioritas dan diimplementasikan dalam berbagai bentuk di Windows NT, Solaris, dan penjadwal Linux yang lebih lama.

Antrian Adil dan Weighted Fair Queuing (WFQ)

Untuk sumber daya jaringan dan I/O, Weighted Fair Queuing menetapkan setiap aliran atau proses bagian bandwidth yang proporsional dengan bobotnya. Bahkan jika aliran berbobot tinggi menghasilkan lebih banyak lalu lintas, aliran berbobot rendah dijamin tingkat layanan minimum. Linux mengimplementasikan ini melalui disiplin Hierarchical Token Bucket (HTB) dan Stochastic Fair Queuing (SFQ) dalam subsistem tc.

Mendiagnosis Kelaparan di Sistem Linux Produksi

Mengidentifikasi kelaparan memerlukan korelasi beberapa sumber data secara bersamaan.

Analisis Penjadwalan 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

Output schedstat memberikan waktu kumulatif yang dihabiskan proses menunggu di antrian run (run_delay dalam nanodetik) — ukuran langsung dari kelaparan penjadwalan.

Indikator Kelaparan Memori

# 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"

Deteksi Kelaparan 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}'

Proses dalam status D (tidur tidak dapat diinterupsi) diblokir pada I/O. Populasi proses status D yang persisten adalah indikator kuat kelaparan I/O atau saturasi subsistem penyimpanan.

Solusi Tingkat Produksi dan Strategi Mitigasi

Implementasikan cgroups v2 untuk Isolasi Sumber Daya

Control Groups (cgroups v2) menyediakan mekanisme paling kuat untuk mencegah kelaparan di lingkungan multi-proses dan yang dikontainerisasi. Dengan menetapkan kuota CPU, memori, dan I/O yang eksplisit ke grup proses, Anda menjamin alokasi sumber daya minimum terlepas dari beban sistem.

# 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

Bobot CPU dalam cgroups v2 menggunakan rentang 1–10000, di mana defaultnya adalah 100. Grup proses dengan bobot 200 menerima dua kali bagian CPU dari yang berbobot 100 dalam kondisi persaingan.

Sesuaikan Penjadwal Linux untuk Beban Kerja Anda

# 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

Terapkan Kebijakan Penjadwalan yang Tepat Per Proses

# 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

Kelas SCHED_IDLE (chrt -i) adalah alat yang tepat untuk tugas latar belakang yang benar-benar — hanya berjalan ketika tidak ada proses lain yang dapat dijalankan, sepenuhnya menghilangkan kemampuannya untuk membuat beban kerja lain kelaparan.

Pemilihan Penjadwal 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) dirancang khusus untuk mencegah kelaparan I/O dengan menjamin setiap proses bagian bandwidth disk yang proporsional. Ini adalah penjadwal yang direkomendasikan untuk lingkungan shared hosting dan server database.

Kontrol Bandwidth Jaringan dengan 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

Konfigurasi ini menjamin setiap kelas minimum 100 Mbps sambil memungkinkan penggunaan burst hingga kapasitas tautan penuh 1 Gbps ketika bandwidth tersedia.

Overcommit Memori dan Penyetelan Swap

# 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

Mengatur vm.swappiness=10 menginstruksikan kernel untuk lebih memilih mengklaim kembali cache halaman daripada menukar memori proses, secara signifikan mengurangi kemungkinan kelaparan memori di bawah beban sedang.

Kelaparan di Lingkungan yang Divirtualisasi dan Dikontainerisasi

Pada Dedicated Servers yang menjalankan hypervisor (KVM, VMware ESXi, Hyper-V), kelaparan dapat terjadi di dua lapisan yang berbeda:

Kelaparan tingkat hypervisor: Mesin virtual ditolak siklus CPU oleh penjadwal hypervisor. KVM menggunakan CFS kernel host untuk penjadwalan vCPU, artinya VM dengan bobot berbagi CPU yang lebih rendah dapat dikelaparan oleh VM dengan bobot lebih tinggi dalam kondisi persaingan. DRS (Distributed Resource Scheduler) VMware menggunakan berbagi, reservasi, dan batas untuk mengontrol ini.

Kelaparan tingkat OS tamu: Di dalam VM itu sendiri, dinamika penjadwalan tingkat OS yang sama berlaku. Beban kerja yang dikontainerisasi yang berjalan di bawah Docker atau Kubernetes tanpa batas sumber daya eksplisit dapat memonopoli CPU dan memori OS tamu, membuat kontainer yang berdampingan kelaparan.

Untuk lingkungan Kubernetes, selalu tentukan requests dan limits dalam spesifikasi pod:

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

Nilai requests menentukan penempatan penjadwalan dan bobot berbagi CPU cgroup. Tanpanya, penjadwal Kubernetes tidak memiliki dasar untuk penempatan yang adil, dan runtime kontainer menetapkan bobot default (sama) — yang masih memungkinkan kelaparan jika satu kontainer secara konsisten memenuhi batas CPU-nya.

Kelaparan di Server Database dan Aplikasi

Mesin database mengimplementasikan penjadwal internal mereka sendiri yang independen dari penjadwal OS. PostgreSQL menggunakan model proses-per-koneksi di mana setiap proses backend bersaing untuk sumber daya OS secara normal, tetapi persaingan kunci dalam database (kunci tingkat baris, kunci advisory) dapat menyebabkan kelaparan tingkat aplikasi di mana kueri tertentu menunggu tanpa batas untuk akuisisi kunci.

MySQL/InnoDB menggunakan thread pool dengan batas konkurensi yang dapat dikonfigurasi (innodb_thread_concurrency). Mengatur nilai ini terlalu rendah menyebabkan kelaparan kueri karena thread mengantri menunggu slot eksekusi. Mengaturnya terlalu tinggi menyebabkan thrashing CPU. Nilai awal yang direkomendasikan adalah 2 × number of CPU cores.

Untuk server web, Nginx dan Apache memiliki profil kelaparan yang berbeda. Model berbasis event Nginx secara inheren tahan terhadap kelaparan worker, tetapi kelelahan pool koneksi upstream (misalnya, ke PHP-FPM atau API backend) menciptakan kelaparan tingkat aplikasi. MPM prefork Apache dapat menghabiskan batas MaxRequestWorkers-nya, menyebabkan koneksi baru mengantri tanpa batas — suatu bentuk kelaparan koneksi.

Pertimbangan ini langsung relevan saat mengonfigurasi VPS dengan cPanel untuk beban kerja shared web hosting, di mana beberapa situs bersaing untuk pool worker PHP-FPM dan batas koneksi MySQL.

Infrastruktur Pemantauan untuk Pencegahan Kelaparan

Diagnosis reaktif tidak cukup untuk sistem produksi. Tumpukan pemantauan proaktif harus mencakup:

Metrik Prometheus + Node Exporter yang perlu dipantau:

  • node_schedstat_waiting_seconds_total — waktu tunggu antrian run CPU kumulatif per CPU
  • node_vmstat_pgmajfault — kesalahan halaman utama yang mengindikasikan tekanan memori
  • node_disk_io_time_weighted_seconds_total — saturasi antrian I/O
  • node_pressure_cpu_waiting_seconds_total — Linux PSI (Pressure Stall Information) tekanan CPU
  • node_pressure_memory_full_seconds_total — waktu stall penuh PSI memori

Linux PSI (tersedia sejak kernel 4.20) adalah indikator kelaparan paling langsung yang tersedia di kernel. Ini melaporkan persentase waktu tugas terhenti menunggu sumber daya CPU, memori, atau I/O:

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

Format output: some avg10=X.XX avg60=X.XX avg300=X.XX total=NNNN di mana some menunjukkan setidaknya satu tugas terhenti. Nilai di atas 10–15% pada avg60 memerlukan investigasi segera.

Untuk tim yang mengelola VPS Control Panels atau tumpukan server kustom, mengintegrasikan metrik PSI ke dalam dashboard Grafana memberikan peringatan dini sebelum kelaparan menurunkan kinerja yang dihadapi pengguna.

Matriks Keputusan Praktis: Memilih Mekanisme Anti-Kelaparan yang Tepat

GejalaJenis Sumber DayaAlat yang DirekomendasikanTarget Konfigurasi
Pekerjaan latar belakang tidak pernah selesaiCPUSCHED_IDLE atau nice +19Hilangkan persaingan CPU latar belakang
Lonjakan latensi interaktif di bawah bebanCPUPenyetelan CFS + bobot CPU cgroups v2Jamin bagian proses interaktif
Kueri database habis waktuCPU + Kunciinnodb_thread_concurrency, batas waktu kunciBatasi waktu tunggu kunci
Pekerjaan intensif disk memblokir penyajian webI/OPenjadwal BFQ + cgroups v2 io.weightAlokasi I/O proporsional
OOM kill kontainer di bawah bebanMemoricgroups v2 memory.min + vm.swappinessJamin memori residen minimum
Proses intensif jaringan membuat yang lain kelaparanJaringanHTB + SFQ melalui tcJaminan bandwidth per kelas
VM dikelaparan oleh hypervisorvCPUReservasi/berbagi CPU hypervisorCadangkan siklus vCPU minimum

Poin Teknis Utama

  • Jangan pernah mengandalkan penjadwalan default untuk server beban kerja campuran. Klasifikasikan proses secara eksplisit menggunakan chrt, nice, dan cgroups v2 berdasarkan sensitivitas latensi dan prioritas bisnis mereka.
  • Aktifkan pemantauan PSI (/proc/pressure/*) di semua sistem Linux produksi. Ini adalah indikator kelaparan real-time paling akurat di kernel dan memiliki overhead yang hampir nol.
  • Gunakan BFQ untuk disk berputar dan perangkat NVMe apa pun yang melayani beban kerja acak/sekuensial campuran di lingkungan multi-tenant. Jaminan keadilan sepadan dengan overhead throughput marginal.
  • Tetapkan permintaan sumber daya Kubernetes tanpa pengecualian. requests.cpu yang tidak ditetapkan bukan berarti "tidak terbatas" — ini adalah kewajiban penjadwalan yang memungkinkan kelaparan CPU tingkat kontainer.
  • Bedakan kelaparan dari deadlock sebelum melakukan intervensi. Mematikan dan memulai ulang proses yang kelaparan tidak memperbaiki ketidakseimbangan penjadwalan yang mendasarinya; itu hanya menghilangkan gejala sementara.
  • Audit penugasan prioritas real-time (SCHED_FIFO/SCHED_RR) pada sistem apa pun yang menggunakannya. Satu proses real-time yang salah dikonfigurasi dapat membuat semua beban kerja berprioritas normal pada inti CPU kelaparan tanpa batas.
  • Untuk lingkungan Shared Web Hosting, terapkan kuota CPU dan I/O per akun di tingkat cgroup daripada hanya mengandalkan pembatasan laju tingkat aplikasi.

Pertanyaan yang Sering Diajukan

Apa perbedaan antara kelaparan dan deadlock dalam sistem operasi?

Deadlock terjadi ketika dua atau lebih proses diblokir secara permanen, masing-masing memegang sumber daya yang dibutuhkan yang lain — tidak ada proses yang membuat kemajuan. Kelaparan terjadi ketika sebuah proses terus-menerus dilewati oleh penjadwal meskipun dapat dijalankan; proses lain terus dieksekusi secara normal. Deadlock memerlukan pemutusan ketergantungan melingkar; kelaparan memerlukan perbaikan kebijakan penjadwalan, biasanya dengan mengimplementasikan penuaan atau antrian adil.

Bagaimana penjadwal Linux CFS mencegah kelaparan CPU?

CFS melacak runtime virtual (vruntime) untuk setiap proses dan selalu memilih proses dengan vruntime terendah untuk dieksekusi. Ini memastikan bahwa proses yang menerima lebih sedikit waktu CPU secara sistematis diprioritaskan, membuat kelaparan CPU tanpa batas dari proses SCHED_OTHER hampir tidak mungkin. Namun, proses real-time (SCHED_FIFO, SCHED_RR) melewati CFS sepenuhnya dan masih dapat membuat proses normal kelaparan jika parameter sched_rt_runtime_us tidak diatur dengan benar.

Bagaimana cara mendeteksi apakah sebuah proses sedang kelaparan di server Linux?

Baca /proc/<PID>/schedstat untuk memeriksa waktu tunggu antrian run kumulatif. Pantau /proc/pressure/cpu untuk metrik stall PSI. Gunakan perf sched latency --sort max untuk mengidentifikasi proses dengan latensi penjadwalan yang sangat tinggi. Proses dalam status D persisten yang terlihat dalam output ps aux mengindikasikan kelaparan I/O daripada kelaparan CPU.

Apakah kelaparan proses mempengaruhi lingkungan VPS dan server cloud secara berbeda dari bare metal?

Ya. Pada VPS, kelaparan dapat terjadi di lapisan hypervisor (penjadwal hypervisor menolak waktu vCPU ke VM Anda) dan di dalam OS tamu. Kelaparan tingkat hypervisor tidak terlihat oleh alat pemantauan OS standar dan memerlukan metrik khusus hypervisor atau steal time yang terlihat (%st dalam output top). Steal time tinggi — biasanya di atas 5–10% yang berkelanjutan — menunjukkan hypervisor tidak memberikan siklus vCPU yang berhak diterima VM Anda.

Apa cara tercepat untuk mencegah proses tertentu membuat yang lain kelaparan di server yang sibuk?

Tetapkan ke kelas penjadwalan SCHED_IDLE dengan chrt -i -p 0 <PID>. Kelas ini hanya dieksekusi ketika tidak ada proses lain yang dapat dijalankan, menjamin bahwa proses tersebut tidak dapat membuat beban kerja lain kelaparan. Untuk proses latar belakang yang intensif I/O, tambahkan pengaturan prioritas I/O ke kelas idle: ionice -c 3 -p <PID>. Menggabungkan keduanya menghilangkan proses sebagai sumber kelaparan CPU dan I/O dengan dua perintah dan tanpa perubahan aplikasi.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai