11-bo‘lim
Resurslar - protsessor, xotira, yuklama
Yuklama o'rtachasi nimani anglatadi, xotira nega "to'lgan" ko'rinadi va sekinlashuv sababini qanday topish kerak.
Ushbu bo‘lim mundarijasi
"Server sekin ishlayapti" - eng noaniq shikoyat. Uni to'rtta aniq savolga bo'lish kerak: protsessor bandmi, xotira yetarlimi, disk ulgurayaptimi, tarmoq to'siq bo'lyaptimi.
Yuklama o'rtachasi #
cat /proc/loadavg | awk '{print NF " ta maydon"}'
5 ta maydon
Fayl mazmuni shunday ko'rinadi:
0.17 0.05 0.01 5/251 989
| Maydon | Ma'no |
|---|---|
| 1 | Oxirgi 1 daqiqa yuklama o'rtachasi |
| 2 | Oxirgi 5 daqiqa |
| 3 | Oxirgi 15 daqiqa |
| 4 | ishlayotgan / jami jarayonlar |
| 5 | Oxirgi yaratilgan PID |
Eng ko'p uchraydigan tushunmovchilik: 1.00 ni "100% band"
deb o'qish.
Aslida bu navbatdagi jarayonlar soni. Va uni yadrolar soniga bo'lish kerak:
| Yuklama | 1 yadroli | 8 yadroli |
|---|---|---|
1.00 | To'la band, navbat yo'q | 12% band - bo'sh |
4.00 | 3 ta jarayon kutmoqda | Yarim band |
8.00 | Jiddiy muammo | To'la band, navbat yo'q |
16.00 | Halokat | 8 ta jarayon kutmoqda |
Shuning uchun yuklamani doim nproc bilan birga o'qing.
Linuxda yana bir nozik joy bor: yuklamaga faqat protsessor
kutayotgan jarayonlar emas, D holatidagi (disk kutayotgan)
jarayonlar ham kiradi. Shu sababli Linuxda yuqori yuklama
protsessor emas, disk muammosini bildirishi mumkin.
YADRO=$(nproc)
YUK=$(cut -d' ' -f1 /proc/loadavg)
awk -v y="$YUK" -v n="$YADRO" 'BEGIN {
nisbat = y / n
holat = (nisbat < 0.7) ? "bo'\''sh" : (nisbat < 1.0) ? "band" : "navbat bor"
printf "%d yadro, holat: %s\n", n, holat
}'
8 yadro, holat: bo'sh
Uchta raqamning tartibi eng muhim ma'lumot:
| Naqsh | Ma'no |
|---|---|
5.0 2.0 1.0 | Yuklama o'smoqda - hozir nimadir boshlandi |
1.0 2.0 5.0 | Yuklama tushmoqda - eng yomoni o'tdi |
4.0 4.0 4.0 | Barqaror yuklama - normal ish rejimi |
Xotira - "to'lgan" degani nimani anglatadi #
free -h | head -1 | tr -s ' '
total used free shared buff/cache available
free ustunidagi eng katta yolg'on - freeYangi administrator free ustuniga qaraydi, u kichik
bo'lsa "xotira tugadi" deb xulosa qiladi. Bu deyarli
har doim noto'g'ri.
Linux bo'sh xotirani disk keshiga beradi. Bu bepul tezlik: kesh kerak bo'lganda bir zumda bo'shatiladi.
| Ustun | Nimani anglatadi |
|---|---|
total | Jami o'rnatilgan xotira |
used | Ilovalar egallagan |
free | Umuman ishlatilmayotgan - kam bo'lishi normal |
buff/cache | Disk keshi - kerak bo'lsa bo'shatiladi |
available | Ilova ola oladigan haqiqiy xotira |
Faqat available ustuni ahamiyatga ega. U kichik bo'lsa -
haqiqiy muammo bor.
"Bo'sh xotira - behuda xotira" - bu Linuxning ataylab tanlangan siyosati, nosozlik emas.
grep -E '^(MemTotal|MemAvailable|SwapTotal):' /proc/meminfo | awk '{print $1}'
MemTotal:
MemAvailable:
SwapTotal:
Foizni hisoblash:
awk '/^MemTotal:/{t=$2} /^MemAvailable:/{a=$2}
END {printf "ishlatilgan: %d%%\n", (t-a)*100/t}' /proc/meminfo \
| awk '{print ($2+0 >= 0 && $2+0 <= 100) ? "foiz 0-100 oralig'\''ida" : "xato"}'
foiz 0-100 oralig'ida
Svop #
| Holat | Ma'no |
|---|---|
| Svop bor, ishlatilmaydi | Normal - zaxira sifatida turibdi |
| Svop sekin to'lyapti | Xotira yetishmayapti |
si/so doim nolga teng emas | Server sekinlashadi - jiddiy muammo |
free da svop 2 GB ishlatilgan bo'lishi mumkin, lekin server
tez ishlayveradi - chunki u yerda uzoq vaqt ishlatilmagan
sahifalar yotibdi.
Haqiqiy muammo - doimiy almashinuv (swap thrashing): sahifalar diskka yozilib, darhol qayta o'qiladi.
Buni vmstat ko'rsatadi:
vmstat 1 5
si (swap in) va so (swap out) ustunlariga qarang. Ular
doimiy nolga teng bo'lmasa - xotira qo'shish yoki ilovani
cheklash vaqti keldi.
Serverda svopni butunlay o'chirish ham yaxshi g'oya emas: svop bo'lmasa, xotira tugaganda yadro darhol jarayon o'ldirishga o'tadi.
vmstat 1 2 | sed -n 2p | tr -s ' ' | tr ' ' '
' | grep -x -e si -e so | wc -l
2
si va so ustunlari mavjud - aynan shularni kuzatasiz.
OOM Killer #
Xotira butunlay tugaganda yadro eng "yaroqsiz" jarayonni o'ldiradi.
dmesg 2>/dev/null | grep -ci 'out of memory' || true
0
Yadro ballni jarayonning xotira hajmiga qarab hisoblaydi. Serverda eng ko'p xotira egallagan jarayon - odatda ma'lumotlar bazasi.
Natijada: xotira tugaydi → MySQL o'ldiriladi → sayt ishlamaydi → jurnal esa "MySQL server has gone away" deydi va siz sababni ma'lumotlar bazasida qidirasiz.
To'g'ri joyda qidirish:
| Buyruq | Nima ko'rsatadi |
|---|---|
dmesg -T | grep -i oom | Yadro qachon va kimni o'ldirgan |
journalctl -k | grep -i oom | Xuddi shu, systemd orqali |
cat /proc/PID/oom_score | Jarayonning "xavf balli" |
Himoyalash:
| Chora | Buyruq |
|---|---|
| Muhim jarayonni himoyalash | systemd da OOMScoreAdjust=-500 |
| Ilovani cheklash | systemd da MemoryMax=512M |
| Svop qo'shish | Vaqt yutadi, muammoni hal qilmaydi |
Ikkinchisi eng to'g'ri yechim: ilova o'z chegarasida o'ldiriladi va ma'lumotlar bazasiga tegilmaydi (12-bo'lim).
top chiqishini o'qish #
top ning protsessor qatori shunday ko'rinadi:
%Cpu(s): 3.4 us, 1.2 sy, 0.0 ni, 94.9 id, 0.3 wa, 0.0 hi, 0.2 si, 0.0 st
| Kod | Ma'no | Yuqori bo'lsa |
|---|---|---|
us | Foydalanuvchi kodi | Ilova ko'p hisoblayapti |
sy | Yadro kodi | Ko'p tizim chaqiruvi yoki kontekst almashinuvi |
ni | Ustuvorligi o'zgartirilgan | Odatda muhim emas |
id | Bo'sh | Yuqori bo'lishi yaxshi |
wa | Disk kutilmoqda | Disk to'siq bo'lyapti |
si | Yumshoq uzilishlar | Tarmoq trafigi katta |
st | O'g'irlangan vaqt | Gipervizor sizga vaqt bermayapti |
st (steal time) - bulut serverida eng qimmatli raqamst - gipervizor sizning virtual mashinangizga protsessor
bermagan vaqt. Ya'ni qo'shni ijarachilar sizning
resursingizni yeyapti.
st qiymati | Xulosa |
|---|---|
| 0-2% | Normal |
| 5-10% | Sezilarli - server "sababsiz" sekin |
| 10% dan yuqori | Provayderga murojaat qiling yoki tarifni o'zgartiring |
Buni bilish muhim, chunki st yuqori bo'lganda sizning
kodingizni optimallashtirish hech qanday foyda bermaydi -
muammo sizning serveringizda emas.
Arzon VPS tariflarida bu ko'p uchraydi. top ni ochib,
bir necha daqiqa kuzating.
Interaktiv vositalar #
| Vosita | Kuchli tomoni |
|---|---|
top | Hamma joyda bor |
htop | Rangli, sichqoncha, daraxt ko'rinishi |
vmstat 1 | Xotira va svop dinamikasi |
iostat -x 1 | Disk batafsil |
pidstat 1 | Jarayon bo'yicha resurs |
sar | Tarixiy ma'lumot |
sar - "kecha soat 3 da nima bo'lgan?"top faqat hozirni ko'rsatadi. Muammo tunda bo'lib
o'tgan bo'lsa, u foydasiz.
sysstat paketi har 10 daqiqada holatni yozib boradi:
| Buyruq | Nima ko'rsatadi |
|---|---|
sar -u | Bugungi protsessor tarixi |
sar -r | Xotira tarixi |
sar -d | Disk tarixi |
sar -n DEV | Tarmoq tarixi |
sar -f /var/log/sysstat/sa10 | 10-kundagi ma'lumot |
Bu paketni serverda birinchi kuni o'rnating:
sudo apt install sysstat
sudo sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat
sudo systemctl enable --now sysstat
Muammo yuz berganda tarix bo'lmasa, siz faqat taxmin qila olasiz.
Cheklovlar (ulimit) #
ulimit -n
ulimit -u > /dev/null && echo "jarayon chegarasi ham bor"
10240
jarayon chegarasi ham bor
Jarayonning haqiqiy chegarasi esa /proc da yotadi -
ulimit faqat joriy qobiqni ko'rsatadi:
sleep 60 &
PID=$!
grep -c 'Max open files' /proc/"$PID"/limits
kill "$PID"
1
Xizmat "Too many open files" bersa, uning chegarasini aynan shu yerdan tekshiring - taxmin qilmang.
| Chegara | Bayroq | Nima uchun muhim |
|---|---|---|
| Ochiq fayllar | -n | Har tarmoq ulanishi ham fayl |
| Jarayonlar | -u | Fork bombasidan himoya |
| Xotira | -v | Virtual xotira hajmi |
| Yadro fayli | -c | Halokat dampi hajmi |
Yuklama ortganda Nginx yoki ma'lumotlar bazasi shunday xato bera boshlaydi:
accept4() failed (24: Too many open files)
Bu xotira tugagani emas - ochiq fayl deskriptorlari
chegarasi tugagani. Har HTTP ulanishi bitta deskriptor
egallaydi, standart 1024 esa band serverga yetmaydi.
Chegarani ko'rish va oshirish:
| Vazifa | Yo'l |
|---|---|
| Joriy sessiya | ulimit -n 65535 |
| Foydalanuvchi uchun doimiy | /etc/security/limits.conf |
| Xizmat uchun | systemd da LimitNOFILE=65535 |
| Jarayonning haqiqiy chegarasi | cat /proc/PID/limits |
Uchinchisi eng muhim: systemd xizmatlari
/etc/security/limits.conf ni o'qimaydi. Nginx
chegarasini u yerda oshirsangiz - hech nima o'zgarmaydi.
Tekshiruvning to'g'ri tartibi #
| Qadam | Buyruq | Nimaga qaraysiz |
|---|---|---|
| 1 | uptime | Yuklama / nproc nisbati |
| 2 | free -h | available ustuni |
| 3 | top | %wa va %st |
| 4 | df -h va df -i | Disk va inode |
| 5 | dmesg -T | tail | OOM, disk xatolari |
| 6 | journalctl -p err -n 50 | Xizmat xatolari |
| 7 | ss -s | Ulanishlar soni |
Tajriba shuni ko'rsatadiki, "server ishlamayapti" holatlarining katta qismi oddiy sabab bilan: disk to'lgan.
Jurnal yozilmaydi, ma'lumotlar bazasi vaqtinchalik fayl yarata olmaydi, sessiya saqlanmaydi - va hamma narsa tushunarsiz xatolar bera boshlaydi.
df -h bir soniya oladi. Uni birinchi bajaring.
Va df -i ni ham unutmang: inode tugashi mumkin, disk
bo'sh bo'lsa ham (14-bo'lim).
/proc/loadavgning beshta maydonini nomlang.- Yuklamani
nprocga bo'ling va xulosa chiqaring. - Uch raqamning tartibidan tendensiyani aniqlang.
free -hda nima uchunavailableustuni muhimligini tushuntiring./proc/meminfodan ishlatilgan xotira foizini hisoblang.vmstat 1 5dasi/soustunlarini kuzating.dmesgda OOM yozuvlarini qidiring.topning%wava%stustunlarini tushuntiring.ulimit -nni ko'ring va nima uchun oshirilishi kerakligini ayting.- Yetti qadamli tekshiruvni boshdan-oxir bajaring.
Xulosa #
- Yuklama - foiz emas, navbatdagi jarayonlar soni;
nprocga bo'ling. - Linuxda yuklamaga
Dholatidagi (disk kutayotgan) jarayonlar ham kiradi. - Uch raqamning tartibi tendensiyani ko'rsatadi.
freeustunidagifreeemas,availableahamiyatli.- Bo'sh xotira disk keshiga ketadi - bu ataylab shunday.
- Svop ishlatilgani emas,
si/soalmashinuv tezligi muhim. - OOM Killer odatda ma'lumotlar bazasini tanlaydi -
MemoryMaxbilan cheklang. %styuqori bo'lsa, muammo sizning serveringizda emas.sarbo'lmasa, kechagi muammoni tekshirib bo'lmaydi - uni oldindan o'rnating.- "Too many open files" - xotira emas,
LimitNOFILE.
Keyingi bo'limda systemd ni ko'ramiz: ilovani xizmatga
aylantirish, avtomatik qayta ishga tushirish va resurs
cheklovlari.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.