Jarayonlar — ps, top, htop, PID

~12 daq · Linux · Jarayonlar va tizim

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 node natijasida grep node ning o'zi ham chiqadi. pgrep buni 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 (free emas! 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)
  • wa yuqori — 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 — saralash
  • pgrep -a nom, pidof nom — PID topish
  • top / 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 narsa
  • sudo ss -tlnp — kim qaysi portni tinglayapti

Keyingi dars

23-dars: Signallar — kill, SIGTERM va SIGKILL