Jarayonlar — ps, top, htop, PID
Muammodan boshlaylik
Server sekinlashdi. Sayt 10 soniyada ochilyapti. Nima bo'lyapti? Qaysi dastur protsessorni yoki xotirani egallab olgan?
Windows da — Task Manager (Ctrl+Shift+Esc). Linux serverda — ps, top, htop. Ular har bir ishlayotgan dasturni, uning resurs sarfini va kim tomonidan ishga tushirilganini ko'rsatadi.
Jarayon nima?
Dastur — diskdagi fayl (/usr/bin/node). Jarayon (process) — shu dasturning ishlayotgan nusxasi: xotirada, o'z holati bilan.
Bitta dasturdan bir nechta jarayon bo'lishi mumkin: uchta terminal ochsangiz — uchta bash jarayoni.
Har bir jarayonning:
- PID — noyob raqami (Process ID)
- PPID — uni ishga tushirgan "ota" jarayon raqami
- Egasi — qaysi foydalanuvchi nomidan ishlayapti (18-dars)
- Holati — ishlayapti, kutyapti, to'xtatilgan
- Resurslari — CPU, xotira
echo $ # joriy shell ning PID i
Barcha jarayonlar daraxt hosil qiladi; ildizi — PID 1 (zamonaviy tizimlarda — systemd, 25-dars).
pstree -p | head -20
ps — jarayonlar ro'yxati
ps
PID TTY TIME CMD
1523 pts/0 00:00:00 bash
2841 pts/0 00:00:00 ps
Faqat joriy terminaldagi jarayonlar. Barchasi — eng ko'p ishlatiladigan shakl:
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 167744 12800 ? Ss 09:00 0:02 /sbin/init
mysql 812 1.2 10.5 1823456 412000 ? Ssl 09:00 2:15 /usr/sbin/mysqld
www-data 1104 0.0 0.4 55280 16400 ? S 09:00 0:00 nginx: worker process
otabek 2214 45.3 6.1 1124000 240000 ? Sl 10:12 12:40 node /opt/dokon/server.js
| Ustun | Ma'nosi |
|---|---|
| USER | Egasi |
| PID | Jarayon raqami |
| %CPU | Protsessor ulushi |
| %MEM | Xotira ulushi |
| RSS | Haqiqiy xotira (KB) |
| STAT | Holat: R ishlayapti, S kutyapti, Z zombi, T to'xtatilgan |
| START | Ishga tushgan vaqt |
| COMMAND | Buyruq |
Qidirish va saralash
ps aux | grep node # node jarayonlari
ps aux --sort=-%cpu | head -5 # eng ko'p CPU
ps aux --sort=-%mem | head -5 # eng ko'p xotira
pgrep -a node # node jarayonlari PID va buyruq bilan
pidof nginx # nginx PID lari
[!TIP]
ps aux | grep nodenatijasidagrep nodening o'zi ham chiqadi.pgrepbuni qilmaydi — qulayroq.
top — real vaqtda
top
top - 14:23:01 up 5 days, 3:12, 1 user, load average: 2.15, 1.80, 1.20
Tasks: 142 total, 2 running, 140 sleeping, 0 stopped, 0 zombie
%Cpu(s): 48.2 us, 3.1 sy, 0.0 ni, 47.5 id, 1.0 wa, 0.0 hi, 0.2 si
MiB Mem : 3936.0 total, 312.4 free, 2104.8 used, 1518.8 buff/cache
MiB Swap: 2048.0 total, 1980.0 free, 68.0 used. 1589.2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2214 otabek 20 0 1124000 240000 32000 R 45.3 6.1 12:40.12 node
812 mysql 20 0 1823456 412000 18000 S 1.2 10.5 2:15.33 mysqld
Har 3 soniyada yangilanadi.
Tepadagi ma'lumotlar
- load average: 2.15, 1.80, 1.20 — oxirgi 1, 5, 15 daqiqadagi o'rtacha yuklama. Taxminiy qoida: protsessor yadrolari sonidan (
nproc) kam bo'lsa — normal; ko'p bo'lsa — navbat bor, tizim ortiqcha yuklangan - %Cpu:
us— dasturlar,sy— yadro,id— bo'sh,wa— disk kutish (yuqori bo'lsa — disk sekin) - Mem:
avail Mem— haqiqatda mavjud xotira (freeemas! 27-dars)
top ichidagi tugmalar
| Tugma | Nima |
|---|---|
| P | CPU bo'yicha saralash |
| M | Xotira bo'yicha |
| k | Jarayonni to'xtatish (PID so'raydi) |
| u | Foydalanuvchi bo'yicha filtr |
| 1 | Har bir yadroni alohida |
| c | To'liq buyruq |
| q | Chiqish |
htop — qulayroq top
sudo apt install htop
htop
Rangli, sichqoncha bilan ishlaydi, jarayonlarni daraxt ko'rinishida (F5), qidirish (F3), filtr (F4), to'xtatish (F9). Kundalik ish uchun top dan ancha qulay.
Zamonaviy alternativa: btop — grafiklar bilan.
Tipik tashxis: "server sekin"
uptime # 1. Yuklama qancha?
nproc # 2. Nechta yadro?
ps aux --sort=-%cpu | head -5 # 3. Kim CPU ni egallagan?
ps aux --sort=-%mem | head -5 # 4. Kim xotirani egallagan?
free -h # 5. Xotira yetadimi? (27-dars)
df -h # 6. Disk to'lmaganmi? (27-dars)
Odatiy topilmalar:
- Bitta jarayon 100% CPU — cheksiz tsikl yoki og'ir so'rov
- Xotira to'lgan, swap ishlatilmoqda — xotira oqishi (memory leak)
wayuqori — disk sekin yoki ko'p yozilmoqda- Disk 100% — loglar to'ldirgan
/proc — jarayonlar haqida fayllar
5-darsda aytilganidek, jarayonlar ham — "fayllar":
ls /proc/2214/
cat /proc/2214/cmdline | tr '\0' ' ' # to'liq buyruq
cat /proc/2214/status | grep -i vmrss # xotira
ls -l /proc/2214/cwd # qaysi papkada ishlayapti
cat /proc/2214/environ | tr '\0' '\n' # muhit o'zgaruvchilari (sudo)
ps, top aslida aynan shu fayllarni o'qiydi.
Qaysi jarayon portni egallagan?
sudo ss -tlnp | grep 3000
LISTEN 0 511 0.0.0.0:3000 0.0.0.0:* users:(("node",pid=2214,fd=21))
"Port already in use" xatosida — birinchi buyruq (32-dars).
Nima uchun shunday?
Nima uchun load average uchta son — bittasi yetmaydimi?
Chunki bitta lahzalik son tendensiyani ko'rsatmaydi. Uchta son (1, 5, 15 daqiqa) — tarix: 4.5, 2.0, 0.8 — yuklama hozir o'syapti (nimadir yangi boshlangan); 0.8, 2.0, 4.5 — pasayyapti (cho'qqi o'tib ketgan). Bu bir qarashda "harakat qilish kerakmi yoki muammo o'zi hal bo'lyaptimi" degan savolga javob beradi. Load average CPU foizidan farqli — u protsessorni kutayotgan jarayonlarni ham hisoblaydi, shuning uchun tizimning haqiqiy "tiqilinchini" ko'rsatadi.
Xulosa
Eslab qoling:
- Jarayon — ishlayotgan dastur; PID — raqami, PPID — otasi; PID 1 — systemd
ps aux— barchasi;--sort=-%cpu/-%mem— saralashpgrep -a nom,pidof nom— PID topishtop/htop— real vaqtda; P — CPU, M — xotira, q — chiqish- load average: 1/5/15 daqiqa; yadrolar soni (
nproc) bilan solishtiring /proc/PID/— jarayon haqida hamma narsasudo ss -tlnp— kim qaysi portni tinglayapti
Keyingi dars
23-dars: Signallar — kill, SIGTERM va SIGKILL