ค้นหาเว็บไซต์

วิธีการตั้งค่าลำดับความสำคัญของกระบวนการ Linux โดยใช้คำสั่ง nice และ renice


ในบทความนี้ เราจะอธิบายโดยย่อเกี่ยวกับ ตัวกำหนดเวลาเคอร์เนล (หรือที่เรียกว่า ตัวกำหนดเวลากระบวนการ) และ ลำดับความสำคัญของกระบวนการ ซึ่งเป็นหัวข้อที่นอกเหนือจากนี้ ขอบเขตของคู่มือนี้ จากนั้น เราจะเจาะลึกเกี่ยวกับการจัดการกระบวนการ Linux สักหน่อย ดูวิธีรันโปรแกรมหรือคำสั่งที่มีลำดับความสำคัญที่แก้ไข และเปลี่ยนลำดับความสำคัญของการรันกระบวนการ Linux

อ่านเพิ่มเติม: วิธีตรวจสอบกระบวนการ Linux และตั้งค่าขีดจำกัดกระบวนการตามผู้ใช้แต่ละราย

ทำความเข้าใจเกี่ยวกับ Linux Kernel Scheduler

ตัวกำหนดเวลาเคอร์เนลเป็นหน่วยของเคอร์เนลที่กำหนดกระบวนการที่เหมาะสมที่สุดจากกระบวนการที่รันได้ทั้งหมดเพื่อดำเนินการต่อไป มันจัดสรรเวลาตัวประมวลผลระหว่างกระบวนการที่รันได้บนระบบ กระบวนการที่รันได้คือกระบวนการที่รอเฉพาะเวลา CPU เท่านั้น และพร้อมที่จะดำเนินการ

ตัวกำหนดตารางเวลาเป็นแกนหลักของการทำงานหลายอย่างพร้อมกันใน Linux โดยใช้อัลกอริธึมการจัดตารางเวลาตามลำดับความสำคัญเพื่อเลือกระหว่างกระบวนการที่รันได้ในระบบ โดยจะจัดอันดับกระบวนการตามความเหมาะสมที่สุดและความต้องการเวลา CPU

ทำความเข้าใจลำดับความสำคัญของกระบวนการและความคุ้มค่าที่ดี

เคอร์เนลจัดเก็บข้อมูลจำนวนมากเกี่ยวกับกระบวนการ รวมถึงลำดับความสำคัญของกระบวนการ ซึ่งเป็นเพียงลำดับความสำคัญของกำหนดการที่แนบมากับกระบวนการ กระบวนการที่มีลำดับความสำคัญสูงกว่าจะถูกดำเนินการก่อนกระบวนการที่มีลำดับความสำคัญต่ำกว่า ในขณะที่กระบวนการที่มีลำดับความสำคัญเท่ากันจะถูกกำหนดเวลาซ้ำแล้วซ้ำเล่า

มีลำดับความสำคัญทั้งหมด 140 และช่วงลำดับความสำคัญที่แตกต่างกันสองช่วงที่นำมาใช้ใน Linux ค่าแรกคือค่าที่ดี (ความดี) ซึ่งมีตั้งแต่ -20 (ค่าลำดับความสำคัญสูงสุด) ถึง 19 (ค่าลำดับความสำคัญต่ำสุด) และ ค่าเริ่มต้นคือ 0 นี่คือสิ่งที่เราจะเปิดเผยในคู่มือนี้ อีกประการหนึ่งคือลำดับความสำคัญแบบเรียลไทม์ ซึ่งอยู่ในช่วงตั้งแต่ 1 ถึง 99 โดยค่าเริ่มต้น จากนั้น 100 ถึง 139 มีไว้สำหรับพื้นที่ผู้ใช้

คุณลักษณะที่สำคัญอย่างหนึ่งของ Linux คือการจัดตารางเวลาตามลำดับความสำคัญแบบไดนามิก ซึ่งช่วยให้สามารถเปลี่ยนแปลงค่าที่ดีของกระบวนการ (เพิ่มหรือลด) ขึ้นอยู่กับความต้องการของคุณ ดังที่เราจะได้เห็นในภายหลัง

วิธีตรวจสอบมูลค่าที่ดีของกระบวนการ Linux

หากต้องการดูค่าที่ดีของกระบวนการ เราสามารถใช้โปรแกรมอรรถประโยชน์ เช่น ps, top หรือ htop

หากต้องการดูกระบวนการค่า nice ด้วยคำสั่ง ps ในรูปแบบที่ผู้ใช้กำหนด (ในที่นี้ NI คอลัมน์จะแสดงความดีของกระบวนการ)

ps -eo pid,ppid,ni,comm

หรือคุณสามารถใช้ยูทิลิตี้ top หรือ htop เพื่อดูการประมวลผล Linux ค่าที่ดีดังที่แสดง

top
htop

ความแตกต่างระหว่าง PR หรือ PRI และ NI

จากเอาต์พุต top และ htop ด้านบน คุณจะสังเกตเห็นว่ามีคอลัมน์ชื่อ PR และ PRI ในลักษณะตอบรับ ซึ่งแสดงลำดับความสำคัญของกระบวนการ

นี่จึงหมายความว่า:

  • NI – คือค่าที่ดี ซึ่งเป็นแนวคิดเกี่ยวกับพื้นที่ผู้ใช้ ในขณะที่
  • PR หรือ PRI – คือลำดับความสำคัญที่แท้จริงของกระบวนการ ตามที่เคอร์เนล Linux เห็น
วิธีการคำนวณค่า PR หรือ PRI
Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

ช่วงค่าที่ดี (NI): -20 ถึง 19

PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20  to 20 + 19
PR = 0 to 39 which is same as 100 to 139.

แต่หากคุณเห็น rt แทนที่จะเป็นตัวเลขดังที่แสดงในภาพหน้าจอด้านล่าง นั่นหมายความว่ากระบวนการกำลังทำงานภายใต้ลำดับความสำคัญของการจัดกำหนดการแบบเรียลไทม์

วิธีรันคำสั่งด้วยค่า Nice ที่กำหนดใน Linux

ที่นี่เราจะดูวิธีจัดลำดับความสำคัญการใช้งาน CPU ของโปรแกรมหรือคำสั่ง หากคุณมีโปรแกรมหรืองานที่ใช้ CPU มาก แต่คุณเข้าใจด้วยว่าอาจใช้เวลานานในการดำเนินการให้เสร็จสิ้น คุณสามารถตั้งค่าลำดับความสำคัญสูงหรือเหมาะสมได้โดยใช้ คำสั่ง nice

ไวยากรณ์มีดังนี้:

nice -n niceness-value [command args] 
OR
nice -niceness-value [command args] 	#it’s confusing for negative values
OR
nice --adjustment=niceness-value [command args]

สำคัญ:

  • หากไม่มีการระบุค่า nice จะตั้งค่าลำดับความสำคัญเป็น 10 ตามค่าเริ่มต้น
  • คำสั่งหรือโปรแกรมทำงานโดยไม่มีค่าเริ่มต้นที่ดีจนถึงลำดับความสำคัญเป็นศูนย์
  • มีเพียงรูทเท่านั้นที่สามารถรันคำสั่งหรือโปรแกรมที่มีลำดับความสำคัญเพิ่มขึ้นหรือสูงได้
  • ผู้ใช้ปกติสามารถรันคำสั่งหรือโปรแกรมที่มีลำดับความสำคัญต่ำเท่านั้น

ตัวอย่างเช่น แทนที่จะเริ่มโปรแกรมหรือคำสั่งด้วยลำดับความสำคัญเริ่มต้น คุณสามารถเริ่มต้นด้วยลำดับความสำคัญเฉพาะได้โดยใช้คำสั่ง nice ต่อไปนี้

sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*

คุณยังสามารถใช้วิธีที่สามซึ่งทำให้สับสนเล็กน้อยโดยเฉพาะค่าความดีที่เป็นลบ

sudo nice -5 tar -czf backup.tar.gz  ./Documents/*

เปลี่ยนลำดับความสำคัญของกำหนดการของกระบวนการใน Linux

ดังที่เราได้กล่าวไปแล้ว Linux อนุญาตให้มีการตั้งเวลาตามลำดับความสำคัญแบบไดนามิก ดังนั้น หากโปรแกรมกำลังทำงานอยู่ คุณสามารถเปลี่ยนลำดับความสำคัญได้ด้วย คำสั่ง renice ในรูปแบบนี้:

renice -n  -12  -p 1055
renice -n -2  -u apache

จากเอาต์พุตตัวอย่าง บนสุด ด้านล่าง ความดีของ teamspe+ ที่มี PID 1055 ตอนนี้เป็น -12 และสำหรับทั้งหมด กระบวนการที่ผู้ใช้ apache เป็นเจ้าของคือ -2

ยังคงใช้เอาต์พุตนี้ คุณจะเห็นสูตร PR=20 + NI ย่อมาจาก

PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18

การเปลี่ยนแปลงใดๆ ที่คุณทำด้วย คำสั่ง renice กับค่าดีของกระบวนการของผู้ใช้จะมีผลจนกว่าจะรีบูตครั้งถัดไปเท่านั้น หากต้องการตั้งค่าเริ่มต้นถาวร โปรดอ่านหัวข้อถัดไป

วิธีการตั้งค่าเริ่มต้นที่ดีของกระบวนการของผู้ใช้เฉพาะ

คุณสามารถตั้งค่าเริ่มต้นที่ดีของผู้ใช้หรือกลุ่มเฉพาะได้ในไฟล์ /etc/security/limits.conf หน้าที่หลักคือกำหนดขีดจำกัดทรัพยากรสำหรับผู้ใช้ที่เข้าสู่ระบบผ่าน PAM

ไวยากรณ์สำหรับการกำหนดขีดจำกัดสำหรับผู้ใช้มีดังนี้ (และค่าที่เป็นไปได้ของคอลัมน์ต่างๆ ได้รับการอธิบายไว้ในไฟล์):

#<domain>   <type>  <item>  <value>

ตอนนี้ใช้ไวยากรณ์ด้านล่าง โดยที่ hard หมายถึงการบังคับใช้ฮาร์ดลิงก์ และวิธีแบบ soft – บังคับใช้ขีดจำกัดของ soft

<username>  <hard|soft>  priority  <nice value>

หรือสร้างไฟล์ภายใต้ /etc/security/limits.d/ ซึ่งจะแทนที่การตั้งค่าในไฟล์หลักด้านบน และไฟล์เหล่านี้จะถูกอ่านตามลำดับตัวอักษร

เริ่มต้นด้วยการสร้างไฟล์ /etc/security/limits.d/tecmint-priority.conf สำหรับผู้ใช้ tecmint:

vi /etc/security/limits.d/tecmint-priority.conf

จากนั้นเพิ่มการกำหนดค่านี้ลงไป:

tecmint  hard  priority  10

บันทึกและปิดไฟล์ จากนี้ไป กระบวนการใดๆ ที่ tecmint เป็นเจ้าของจะมีค่าที่ดีเป็น 10 และ PR เป็น 30

สำหรับข้อมูลเพิ่มเติม โปรดอ่านหน้าคู่มือของ nice และ renice:

man nice
man renice 

คุณอาจต้องการอ่านบทความต่อไปนี้เกี่ยวกับการจัดการกระบวนการ Linux

  1. วิธีค้นหาและฆ่ากระบวนการทำงานใน Linux
  2. คำแนะนำในการสั่ง Kill, Pkill และ Killall เพื่อยุติกระบวนการใน Linux
  3. วิธีตรวจสอบการใช้งานระบบ การหยุดทำงาน และการแก้ไขปัญหาเซิร์ฟเวอร์ Linux
  4. CPUTool – จำกัดและควบคุมการใช้งาน CPU ของกระบวนการใดๆ ใน Linux

ในบทความนี้ เราได้อธิบายโดยย่อเกี่ยวกับตัวกำหนดเวลาเคอร์เนล ลำดับความสำคัญของกระบวนการ ดูวิธีรันโปรแกรมหรือคำสั่งที่มีลำดับความสำคัญที่แก้ไข และเปลี่ยนลำดับความสำคัญของกระบวนการ Linux ที่ใช้งานอยู่ด้วย คุณสามารถแบ่งปันความคิดเห็นเกี่ยวกับหัวข้อนี้ผ่านแบบฟอร์มคำติชมด้านล่าง