ทำความเข้าใจค่าเฉลี่ยโหลด Linux และติดตามประสิทธิภาพของ Linux
ในบทความนี้ เราจะอธิบายงานการดูแลระบบ Linux ที่สำคัญงานหนึ่ง – การตรวจสอบประสิทธิภาพที่เกี่ยวข้องกับโหลดระบบ/CPU และค่าเฉลี่ยโหลด
ก่อนที่เราจะไปไกลกว่านี้ มาทำความเข้าใจสองวลีสำคัญนี้ในระบบที่คล้ายกับ Unix ทั้งหมดก่อน:
- โหลดของระบบ/โหลด CPU – คือการวัด CPU ที่มากเกินไปหรือน้อยเกินไปในระบบ Linux จำนวนกระบวนการที่กำลังดำเนินการโดย CPU หรืออยู่ในสถานะรอ
- ค่าเฉลี่ยโหลด – คือโหลดเฉลี่ยของระบบที่คำนวณในช่วงเวลาที่กำหนด 1, 5 และ 15 นาที
ใน Linux เชื่อกันว่าค่าเฉลี่ยโหลดเป็นค่าเฉลี่ยของกระบวนการในคิวการดำเนินการ (เคอร์เนล) ที่ติดแท็กว่าทำงานอยู่หรือไม่หยุดชะงัก
โปรดทราบว่า:
- ทั้งหมดหากไม่ใช่ระบบส่วนใหญ่ที่ขับเคลื่อนโดย Linux หรือระบบที่คล้าย Unix อื่น ๆ อาจแสดงค่าเฉลี่ยการโหลดที่ใดที่หนึ่งสำหรับผู้ใช้
- ระบบ Linux ที่ไม่ได้ใช้งานโดยสิ้นเชิงอาจมีค่าเฉลี่ยการโหลดเป็นศูนย์ ไม่รวมกระบวนการที่ไม่ได้ใช้งาน
- ระบบที่คล้าย Unix เกือบทั้งหมดนับเฉพาะกระบวนการที่อยู่ในสถานะกำลังทำงานหรือรออยู่ แต่นี่ไม่ใช่กรณีของ Linux เนื่องจากมีกระบวนการในสถานะสลีปอย่างต่อเนื่อง ผู้ที่รอทรัพยากรระบบอื่นๆ เช่น ดิสก์ I/O เป็นต้น
วิธีตรวจสอบค่าเฉลี่ยการโหลดระบบ Linux
มีหลายวิธีในการตรวจสอบค่าเฉลี่ยโหลดของระบบ รวมถึงเวลาทำงานซึ่งแสดงระยะเวลาที่ระบบทำงาน จำนวนผู้ใช้พร้อมค่าเฉลี่ยโหลด:
uptime
07:13:53 up 8 days, 19 min, 1 user, load average: 1.98, 2.15, 2.21
ตัวเลขจะอ่านจากซ้ายไปขวา และผลลัพธ์ด้านบนหมายความว่า:
- โหลดเฉลี่ยในช่วง 1 นาทีสุดท้ายคือ 1.98
- โหลดเฉลี่ยในช่วง 5 นาทีที่ผ่านมาคือ 2.15
- โหลดเฉลี่ยในช่วง 15 นาทีที่ผ่านมาคือ 2.21
ค่าเฉลี่ยโหลดสูงบ่งบอกว่าระบบมีโอเวอร์โหลด กระบวนการจำนวนมากกำลังรอเวลาของ CPU
เราจะเปิดเผยเรื่องนี้ในส่วนถัดไปที่เกี่ยวข้องกับจำนวนคอร์ CPU นอกจากนี้ เรายังสามารถใช้เครื่องมืออื่นๆ ที่รู้จักกันดี เช่น top และเหลือบซึ่งแสดงสถานะแบบเรียลไทม์ของระบบ Linux ที่ทำงานอยู่ รวมถึงเครื่องมืออื่นๆ อีกมากมาย:
คำสั่งยอดนิยม
top
top - 12:51:42 up 2:11, 1 user, load average: 1.22, 1.12, 1.26
Tasks: 243 total, 1 running, 242 sleeping, 0 stopped, 0 zombie
%Cpu(s): 17.4 us, 2.9 sy, 0.3 ni, 74.8 id, 4.6 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8069036 total, 388060 free, 4381184 used, 3299792 buff/cache
KiB Swap: 3906556 total, 3901876 free, 4680 used. 2807464 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6265 tecmint 20 0 1244348 170680 83616 S 13.3 2.1 6:47.72 Headset
2301 tecmint 9 -11 640332 13344 9932 S 6.7 0.2 2:18.96 pulseaudio
2459 tecmint 20 0 1707692 315628 62992 S 6.7 3.9 6:55.45 cinnamon
2957 tecmint 20 0 2644644 1.035g 137968 S 6.7 13.5 50:11.13 firefox
3208 tecmint 20 0 507060 52136 33152 S 6.7 0.6 0:04.34 gnome-terminal-
3272 tecmint 20 0 1521380 391324 178348 S 6.7 4.8 6:21.01 chrome
6220 tecmint 20 0 1595392 106964 76836 S 6.7 1.3 3:31.94 Headset
1 root 20 0 120056 6204 3964 S 0.0 0.1 0:01.83 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.10 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
....
เครื่องมือเหลือบมอง
glances
TecMint (LinuxMint 18 64bit / Linux 4.4.0-21-generic) Uptime: 2:16:06
CPU 16.4% nice: 0.1% LOAD 4-core MEM 60.5% active: 4.90G SWAP 0.1%
user: 10.2% irq: 0.0% 1 min: 1.20 total: 7.70G inactive: 2.07G total: 3.73G
system: 3.4% iowait: 2.7% 5 min: 1.16 used: 4.66G buffers: 242M used: 4.57M
idle: 83.6% steal: 0.0% 15 min: 1.24 free: 3.04G cached: 2.58G free: 3.72G
NETWORK Rx/s Tx/s TASKS 253 (883 thr), 1 run, 252 slp, 0 oth sorted automatically by cpu_percent, flat view
enp1s0 525Kb 31Kb
lo 2Kb 2Kb CPU% MEM% VIRT RES PID USER NI S TIME+ IOR/s IOW/s Command
wlp2s0 0b 0b 14.6 13.3 2.53G 1.03G 2957 tecmint 0 S 51:49.10 0 40K /usr/lib/firefox/firefox
7.4 2.2 1.16G 176M 6265 tecmint 0 S 7:08.18 0 0 /usr/lib/Headset/Headset --type=renderer --no-sandbox --primordial-pipe-token=879B36514C6BEDB183D3E4142774D1DF --lan
DISK I/O R/s W/s 4.9 3.9 1.63G 310M 2459 tecmint 0 R 7:12.18 0 0 cinnamon --replace
ram0 0 0 4.2 0.2 625M 13.0M 2301 tecmint -11 S 2:29.72 0 0 /usr/bin/pulseaudio --start --log-target=syslog
ram1 0 0 4.2 1.3 1.52G 105M 6220 tecmint 0 S 3:42.64 0 0 /usr/lib/Headset/Headset
ram10 0 0 2.9 0.8 409M 66.7M 6240 tecmint 0 S 2:40.44 0 0 /usr/lib/Headset/Headset --type=gpu-process --no-sandbox --supports-dual-gpus=false --gpu-driver-bug-workarounds=7,2
ram11 0 0 2.9 1.8 531M 142M 1690 root 0 S 6:03.79 0 0 /usr/lib/xorg/Xorg :0 -audit 0 -auth /var/lib/mdm/:0.Xauth -nolisten tcp vt8
ram12 0 0 2.6 0.3 79.3M 23.8M 9651 tecmint 0 R 0:00.71 0 0 /usr/bin/python3 /usr/bin/glances
ram13 0 0 1.6 4.8 1.45G 382M 3272 tecmint 0 S 6:25.30 0 4K /opt/google/chrome/chrome
...
ค่าเฉลี่ยการโหลดที่แสดงโดยเครื่องมือเหล่านี้คือไฟล์อ่าน /proc/loadavg ซึ่งคุณสามารถดูได้โดยใช้คำสั่ง cat ดังต่อไปนี้:
cat /proc/loadavg
2.48 1.69 1.42 5/889 10570
หากต้องการตรวจสอบค่าเฉลี่ยการโหลดในรูปแบบกราฟ ให้ลองดู: ttyload – แสดงกราฟรหัสสีของ Linux Load Average ใน Terminal
บนเครื่องเดสก์ท็อป มีเครื่องมืออินเทอร์เฟซผู้ใช้แบบกราฟิกที่เราสามารถใช้เพื่อดูค่าเฉลี่ยโหลดของระบบ
ทำความเข้าใจเกี่ยวกับโหลดเฉลี่ยของระบบในจำนวนความสัมพันธ์ของ CPU
เราไม่สามารถอธิบายโหลดของระบบหรือประสิทธิภาพของระบบได้โดยไม่ให้ความกระจ่างเกี่ยวกับผลกระทบของจำนวนแกน CPU ที่มีต่อประสิทธิภาพ
มัลติโปรเซสเซอร์ Vs มัลติคอร์
- มัลติโปรเซสเซอร์ – คือที่ที่ CPU ทางกายภาพตั้งแต่สองตัวขึ้นไปถูกรวมเข้ากับระบบคอมพิวเตอร์เครื่องเดียว
- โปรเซสเซอร์แบบมัลติคอร์ – คือ CPU จริงตัวเดียวที่มีคอร์แยกกันอย่างน้อยสองคอร์ขึ้นไป (หรือที่เราเรียกอีกอย่างว่าหน่วยประมวลผล) ที่ทำงานแบบขนาน ความหมายแบบดูอัลคอร์มี 2 หน่วยประมวลผล 2 หน่วย ควอดคอร์มี 4 หน่วยประมวลผลและอื่นๆ
นอกจากนี้ยังมีเทคโนโลยีโปรเซสเซอร์ที่ Intel เปิดตัวครั้งแรกเพื่อปรับปรุงการประมวลผลแบบขนาน ซึ่งเรียกว่าไฮเปอร์เธรด
ภายใต้ไฮเปอร์เธรดing CPU คอร์จริงตัวเดียวจะปรากฏเป็นคอร์โลจิคัล CPU สองตัวในระบบปฏิบัติการ (แต่ในความเป็นจริงแล้ว มีส่วนประกอบฮาร์ดแวร์กายภาพหนึ่งองค์ประกอบ)
โปรดทราบว่า CPU คอร์เดี่ยวสามารถทำงานได้ครั้งละหนึ่งงานเท่านั้น ดังนั้นเทคโนโลยีต่างๆ เช่น CPU/โปรเซสเซอร์หลายตัว, CPU แบบมัลติคอร์ และไฮเปอร์เธรดจึงถูกทำให้เป็นจริงขึ้นมา
เมื่อมี CPU มากกว่าหนึ่งตัว จึงสามารถรันโปรแกรมหลายโปรแกรมพร้อมกันได้ CPU Intel ในปัจจุบันใช้การผสมผสานระหว่างหลายคอร์และเทคโนโลยีไฮเปอร์เธรด
ในการค้นหาจำนวนหน่วยประมวลผลที่มีอยู่ในระบบ เราอาจใช้คำสั่ง nproc หรือ lscpu ดังต่อไปนี้:
nproc
4
OR
lscpu
อีกวิธีหนึ่งในการค้นหาจำนวนหน่วยประมวลผลโดยใช้คำสั่ง grep ดังรูป
grep 'model name' /proc/cpuinfo | wc -l
4
ตอนนี้ เพื่อทำความเข้าใจโหลดของระบบเพิ่มเติม เราจะใช้สมมติฐานบางประการ สมมติว่าเรามีค่าเฉลี่ยการโหลดด้านล่าง:
23:16:49 up 10:49, 5 user, load average: 1.00, 0.40, 3.35
บนระบบคอร์เดียว สิ่งนี้จะหมายถึง:
- CPU ถูกใช้งานอย่างเต็มที่ (100%) โดยเฉลี่ย; 1 กระบวนการทำงานบน CPU (1.00) ในช่วง 1 นาทีที่ผ่านมา
- CPU ไม่ได้ใช้งานโดยเฉลี่ย 60%; ไม่มีกระบวนการใดกำลังรอเวลา CPU (0.40) ในช่วง 5 นาทีที่ผ่านมา
- CPU ถูกโอเวอร์โหลดโดยเฉลี่ย 235%; กระบวนการ 2.35 กำลังรอเวลา CPU (3.35) ในช่วง 15 นาทีที่ผ่านมา
บนระบบดูอัลคอร์จะหมายถึง:
- CPU หนึ่งตัวไม่ได้ใช้งานโดยเฉลี่ย 100% มีการใช้งาน CPU หนึ่งตัว ไม่มีกระบวนการใดกำลังรอเวลา CPU (1.00) ในช่วง 1 นาทีที่ผ่านมา
- CPU ไม่ได้ใช้งานโดยเฉลี่ย 160%; ไม่มีกระบวนการใดกำลังรอเวลา CPU (0.40) ในช่วง 5 นาทีที่ผ่านมา
- ซีพียูโอเวอร์โหลดโดยเฉลี่ย 135%; กระบวนการ 1.35 กำลังรอเวลา CPU (3.35) ในช่วง 15 นาทีที่ผ่านมา
คุณอาจต้องการ:
- 20 เครื่องมือบรรทัดคำสั่งเพื่อตรวจสอบประสิทธิภาพของ Linux – ตอนที่ 1
- 13 เครื่องมือตรวจสอบประสิทธิภาพ Linux – ตอนที่ 2
- Perf- เครื่องมือตรวจสอบและวิเคราะห์ประสิทธิภาพสำหรับ Linux
- Nmon: วิเคราะห์และตรวจสอบประสิทธิภาพของระบบ Linux
โดยสรุป หากคุณเป็นผู้ดูแลระบบ ค่าเฉลี่ยการโหลดที่สูงก็เป็นเรื่องที่น่ากังวล เมื่อมีจำนวนคอร์ CPU สูง แสดงว่าความต้องการ CPU สูง และโหลดเฉลี่ยที่ต่ำกว่าจำนวนคอร์ CPU ต่ำ บอกเราว่า CPU มีการใช้งานน้อยเกินไป