Linux tizimidagi jarayonlar o'zgartirilgan ustuvorlik bilan ishga tushirilishi mumkin, bu ba'zi jarayonlarga ko'proq ustuvorlik beradi, boshqalari esa kamroq. Bu sizga, administratorga, tizimdagi eng muhim jarayonlarning tegishli ustuvorlik darajasida ishlashini ta'minlashda to'liq egalik qiladi. Buning uchun maxsus buyruqlar mavjud: nice va renice. Bu buyruqlar ma'lum bir ustuvorlikka ega jarayonni ishga tushirish yoki allaqachon ishlayotgan jarayonning ustuvorligini o'zgartirish imkonini beradi.
Hozirgi vaqtda jarayonning ustuvorligini qo'lda tahrirlash administratorlar avvalgidan ko'ra kamroq bajaradigan ishdir. 32 yadroli (yoki undan ko'p) protsessor unchalik kam uchraydigan narsa emas va yuzlab gigabayt operativ xotira ham emas. Bugungi kunda serverlar, albatta, avvalgidan ko'ra kuchliroq va eski mashinalar kabi resurslarga muhtoj emas. Ko'pgina serverlar (masalan, virtual mashinalar) va konteynerlar bitta vazifaga bag'ishlangan, shuning uchun jarayonni sozlash endi haddan tashqari qiymatga ega bo'lmasligi mumkin. Biroq, ma'lumotlarni qayta ishlash firmalari va chuqur o'rganish funktsiyalaridan foydalanadigan kompaniyalar ba'zi narsalarni nozik sozlashlari kerak bo'lishi mumkin.
Jarayonlarning ustuvorligini belgilash siz uchun darhol foydali bo'ladimi yoki yo'qmi, hech bo'lmaganda kontseptsiyani tushunish yaxshi bo'ladi, agar biror kun jarayonning ustuvorligini oshirish yoki kamaytirish kerak bo'lsa. Keling, ps buyrug'ini bu safar -l argumenti bilan qayta ko'rib chiqamiz:
ps -l
Ushbu buyruqning chiqishi quyidagicha ko'rinadi:
Ps -l buyrug'ining chiqishi bilan PRI va NI ustunlariga e'tibor bering. PRI ustuvorlikni bildiradi va NI "yaxshilik" qiymatiga tegishli bo'lib, biz ushbu bo'limda keyinroq batafsil ko'rib chiqamiz. Ushbu misolda har bir jarayon PRI 80 va NI 0 ga teng. Men bularning hech birini o'zgartirmadim yoki o'zgartirmadim. 80 PRI qiymati barcha jarayonlarda ushbu qiymatning boshlang'ich qiymati bo'lib, biz yoqimlilik qiymatini oshirganimiz yoki kamaytirganimiz sababli o'zgaradi.
Yuqorida aytib o'tganimdek, bizda ustuvorliklarni o'zgartirishga imkon beruvchi maxsus buyruqlar mavjud, nice va renice. Qaysi birini ishlatishni aniqlash uchun, bu jarayon allaqachon ishlayotgan yoki yo'qligiga bog'liq. 7.5-rasmda keltirilgan jarayonlarga kelsak, biz ular uchun ustuvorlikni o'zgartirish uchun renice dan foydalanmoqchimiz, chunki ularning barchasi allaqachon ishlamoqda. Agar biz boshidanoq ma'lum bir ustuvorlikka ega bo'lgan jarayonni ishga tushirmoqchi bo'lsak, uning o'rniga nice dan foydalanardik.
men ishlayotgan vim seansining jarayonini o'zgartiraylik. Albatta, bu biroz oqsoqlangan misol, chunki vim juda muhim jarayon emas. Haqiqiy dunyoda siz haqiqatan ham muhim bo'lgan jarayonlarga ustunlik bergan bo'lar edingiz. Mening holatimda, vim jarayoni 41267 PID ga ega:
Renice -n 10 -b 41267
Ushbu buyruqning chiqishi quyidagicha ko'rinadi:
7.6-rasm: Renice bilan jarayonning ustuvorligini o'zgartirish
Agar biz yana ps -l ni ishga tushirsak, vim uchun yangi nice qiymatini ko'rishimiz mumkin:
7.7-rasm: Jarayonning ustuvorligini o'zgartirgandan keyin ps -l buyrug'ining chiqishi
Yangi nice qiymat 10 endi NI ostida vim uchun ko'rinadi va PRI qiymati 90 ga oshdi. Endi, bu vim misoli mening boshqa vazifalarimga qaraganda pastroq ustuvorlikda ishlaydi, buning sababi shundaki, nice qiymat qanchalik yuqori bo'lsa, ustuvorlik shunchalik past bo'ladi. E'tibor bering, men ustuvorlikni o'zgartirganimda buyruq bilan sudo dan foydalanmadim. Bu misolda bu yaxshi, chunki men jarayonning nice qiymatini oshiryapman va bunga ruxsat beriladi. Biroq, keling, quyidagi buyruqdan foydalanib, sudo holda nice qiymatni kamaytirishga harakat qilaylik:
Renice -n 5 -p 41267
Quyidagi chiqishda ko'rib turganingizdek, men u qadar muvaffaqiyatli bo'lmayman:
7.8-rasm: Jarayonning ustuvorligini kamaytirishga urinish
Nice qiymatni 10 dan 5 gacha kamaytirishga urinishim bloklandi. Agar men go'zallikni pasaytira olsam, mening jarayonim yuqoriroq ustuvorlikda ishlaydi. Buning o'rniga, men ruxsat rad etilgan xatolik oldim. Shunday qilib, foydalanuvchilarga o'z jarayonlarining nice qiymatini oshirishga ruxsat beriladi, lekin ularni hatto o'zlari boshlagan jarayonlar uchun ham kamaytirishga ruxsat berilmaydi. Agar siz nice qiymatni kamaytirmoqchi bo'lsangiz, buni sudo bilan qilishingiz kerak bo'ladi. Shunday qilib, agar siz "oddiyroq" bo'lishni istasangiz, buni amalga oshirishingiz mumkin. Agar siz "qo'polroq" bo'lishni istasangiz, sizga root huquqlari kerak bo'ladi. Bundan tashqari, foydalanuvchi o‘ziga tegishli bo‘lmagan jarayonning ustuvorligini o‘zgartira olmaydi. Shunday qilib, agar siz boshqa foydalanuvchi sifatida bajarilayotgan vazifaning yoqimliligini o'zgartirish uchun renice dan foydalanmoqchi bo'lsangiz, operatsiyaga ruxsat berilmagan xatoni olasiz.
renice bilan ishlaydigan jarayonlarimizni qanday qilib birinchi o'ringa qo'yishni bilamiz. Keling, nice bilan ma'lum bir ustuvorlik bilan yangi jarayonni boshlashni ko'rib chiqaylik. Quyidagi buyruqni ko'rib chiqing:
nice -n 10 vim
vim ning yangi nusxasini ishga tushirmoqdamiz, lekin ustuvorlik boshidanoq ma'lum bir qiymatga o'rnatilgan. Agar biz vim ning ustuvorligini keyinroq o'zgartirmoqchi bo'lsak, renice dan foydalanishimiz kerak bo'ladi. Yuqorida aytib o'tganimdek, nice - ma'lum bir ustuvorlikka ega bo'lgan yangi jarayonni ishga tushirish uchun ishlatiladi va renice - oldindan mavjud jarayonning ustuvorligini o'zgartirish uchun. Ushbu misolda biz vim-ni ishga tushirdik va uning yaxshi qiymatini bitta buyruqda 10 ga o'rnatdik.
Vim kabi matn muharririning ustuvorligini o'zgartirish test ishi uchun g'alati tanlovdek tuyulishi mumkin va shunday bo'ladi. Ammo vim muharriri zararsizdir, chunki uning ustuvorligini o'zgartirish tizimning to'xtab qolishiga olib kelishi ehtimoli juda kam. Matn muharriri kabi biror narsaga ustuvorlik berish qayerda foydali bo‘lishi haqida o‘ylashimga amaliy sabab yo‘q. Biroq, bu sizning serveringizda ishlaydigan jarayonlarning ustuvorligini o'zgartirishingiz mumkin. Haqiqiy serverda siz hisobotni ishlaydigan va yaratadigan muhim jarayonga ega bo'lishingiz mumkin va bu hisobot o'z vaqtida topshirilishi kerak. Yoki sizda mijoz o'z vaqtida yetkazib berish uchun bo'lishi kerak bo'lgan ma'lumotlarni eksport qiladigan jarayonga ega bo'lishingiz mumkin.
Nice va renice buyruqlari kontekstida "nice" nimani anglatishini qiziqqan bo'lishingiz mumkin. "Nice" raqam jarayonning boshqa foydalanuvchilar uchun qanchalik yaxshi ekanligini anglatadi. Nice qiymat qanchalik baland bo'lsa, ustuvorlik shunchalik past bo'ladi. Shunday qilib, 20 qiymati 10 qiymatidan ko'ra ustuvorligi past. Bunday holda, 20 ga teng bo'lgan jarayonlar pastroq ustuvorlikda ishlaydi va tizimdagi boshqa jarayonlarga nisbatan mehribonroq bo'ladi. Chiroylilik -20 dan 19 gacha bo'lishi mumkin. Yaxshi qiymat -20 bo'lgan jarayon mumkin bo'lgan eng yuqori ustuvorlik, 19 esa u ega bo'lishi mumkin bo'lgan eng past ustuvorlikdir. Butun tizim bu oddiy tavsifga qaraganda ancha murakkabroq. Men yoqimli qiymatni ustuvor deb atasam-da, aslida unday emas. Nice qiymat haqiqiy ustuvorlikni hisoblash uchun ishlatiladi.
Nice qiymatlarni to'g'ridan-to'g'ri o'rnatish uchun -n opsiyasi bilan birga nice va renice buyruqlaridan foydalanganmiz. Shunisi qiziqki, siz renice buyrug'ini soddalashtirishingiz va -n variantini qoldirishingiz mumkin:
Renice 10 42467
Ushbu buyruq boshqa misollarimizga o'xshash jarayonning nice qiymatini ijobiy 10 ga o'rnatadi. Agar biz ustuvorlikni oshirmoqchi bo'lsak, niceness uchun salbiy raqamdan ham foydalanishimiz mumkin:
sudo renice -10 42467
-n variantini tashlab qo'yish bizni ko'p yozishni tejamasa ham, endi bu imkoniyat ekanligini bilasiz. Ushbu misolning boshqa farqi shundaki, men sudo dan foydalanishim kerak edi, chunki men nice qiymatni kamaytiraman (bu haqda keyinroq).
nice buyruq haqida gap ketganda, biz -n variantini ham qoldirishimiz mumkin, ammo buyruq bu borada biroz boshqacha ishlaydi. Quyidagilar ishlamaydi:
nice 15 vim
Nice sintaksisi biroz boshqacha, shuning uchun unga to'g'ridan-to'g'ri ijobiy raqam berish renice bilan bo'lgani kabi ishlamaydi. Buning uchun old tomonga defis qo'yishimiz kerak bo'ladi:
nice -15 vim
Ushbu buyruqni ko'rganingizda, biz manfiy raqamni qo'llayapmiz deb o'ylashingiz mumkin. Aslida, bu to'g'ri emas. Nice bilan sintaksis boshqacha bo'lgani uchun biz ishlatgan -15 qiymati musbat 15 ga olib keladi. Nice uchun qiymatni variant sifatida qo'llayotganimizni bildirish uchun qiymat oldiga chiziqcha kerak edi. Agar biz aslida -n variantidan qochgan holda nice bilan salbiy qiymatdan foydalanmoqchi bo'lsak, ikkita defisdan foydalanishimiz kerak bo'ladi:
nice --10 vim
-n varianti bilan ikkita buyruq o'rtasidagi sintaksisdagi farq mening fikrimcha biroz chalkash, shuning uchun men shunchaki -n variantini nice va renice bilan ishlatishni tavsiya qilaman, chunki bu ular o'rtasida bir xil bo'ladi:
nice -n 10 vim sudo nice -n -10 vim renice -n 10 42467 sudo renice -n -10 42467
Ushbu misollar -n opsiyasidan foydalangan holda nice va renice va ijobiy va salbiy qiymatlarni o'rnatishni ko'rsatadi. -n opsiyasi ikkita buyruq o'rtasida bir xil tarzda qo'llanilganligi sababli, o'ziga xos xususiyatlarga e'tibor berishdan ko'ra, uni xotiraga topshirishga e'tibor qaratish osonroq bo'lishi mumkin. Yuqorida muhokama qilinganidek, men sudodan niceness uchun salbiy qiymatni o'rnatuvchi buyruqlar bilan foydalanardim, chunki faqat root jarayonni 0 dan past bo'lgan yoqimlilikka o'zgartirishi yoki jarayonni boshlashi mumkin. Agar buni baribir bajarishga harakat qilsangiz, quyidagi xatoni olasiz:
nice: cannot set niceness: Permission denied
Ushbu turdagi himoya biroz muhim, chunki sizda ba'zi foydalanuvchilar o'zlarining jarayonlarini eng muhim deb hisoblaydigan va ularni -19 ga qadar birinchi o'ringa qo'yishga harakat qilishlari mumkin. Oxir oqibat, tizim ma'muri qaysi jarayonlar salbiyda niceness qiymatiga erishishga ruxsat berilishi haqida qaror qabul qilgani ma'qul.
Qaysi jarayonlar ishga tushishi va qanday ustuvorlikda qaror qabul qilishingiz kerak. Shundan so'ng siz mos keladigan aniq tizim holatiga erishishning eng yaxshi usulini aniqlaysiz va sozlash jarayonining ustuvorligi buning bir qismi bo'lishi mumkin. Boshqa hech narsa bo'lmasa, nice va renice buyruqlarini o'rganish sizga asboblar to'plami uchun yana bir yordam beradi.