Most Recent

Seo Services

คำสั่งที่ใช้ในการตรวจสอบ Performance บน Linux ตอนที่ 1:CPU Utilization

บทความนี้จะอธิบายถึงคำสั่งที่ใช้ในการตรวจสอบประสิทธิภาพการทำงาน CPU บน Linux ซึ่งมีด้วยกันหลายคำสั่ง  โดยขอเริ่มด้วยคำสั่ง uptime และ w เนื่องจากทั้งสองคำสั่งสามารถใช้ดูในส่วน load average ได้เหมือนกัน

uptime เป็นคำสั่งที่อยู่ใน package procps ใช้สำหรับแสดงว่าเครื่องเปิดใช้งานมาเป็นระยะเวลาเท่าไหร่ มีจำนวนผู้ใช้งานอยู่ในปัจจุบันเท่าไหร่ รวมถีงแสดงปริมาณงานที่ใช้งานอยู่ในระบบทั้งที่ทำงานอยู่ (running state) และที่รอที่จะทำงานอยู่ (waiting threads)

$ uptime
14:21:56 up 101 days, 2:34, 2 users,   load average:  0.00,  0.01,  0.05

w เป็นคำสั่งที่อยู่ใน package procps ที่ใช้แสดงว่ามีใครเข้ามาใช้งานบ้างและกำลังทำงานอะไรอยู่ รวมถีงแสดงปริมาณงานที่ใช้งานอยู่ในระบบทั้งที่ทำงานอยู่ (running state) และที่รอที่จะทำงานอยู่ (waiting threads)

$ w
14:38:44 up 101 days, 2:51, 2 users,  load average:  0.00,  0.01,  0.05
USER    TTY          FROM                     LOGIN@    IDLE      JCPU     PCPU     WHAT
root        tty1                                            22Apr19     101days  0.06s      0.06s       -bash
root        pts/1         203.10.21.70            12:34           4.00s      0.10s      0.01s       w           

ทั้งคำสั่ง uptime และ w แสดงรายละเอียดเกี่ยวกับ load average เหมือนกันเนื่องจากไปดึงข้อมูลมาจากไฟล์ /proc/loadavg 

$ cat /proc/loadavg
0.00 0.01 0.05 3/251 36491

load average เป็นการวัดความต้องการใช้งานทรัพยากร สำหรับ Linux จะหมายถึง CPU และ disk I/O process (ถ้าเป็น OS อื่นหมายถึง CPU เท่านั้น) โดยแสดงค่าเฉลี่ย 3 ช่วงคือ 1 นาที, 5 นาที, และ 15 นาที

ซึ่งสามารถตีความได้ดังนี้

  • ถ้าค่า average เป็น 0.0 หมายถึง เครื่องว่างจากการใช้งาน (idle)
  • ถ้าค่า average ที่ 1 นาทีสูงกว่าค่า average ที่ 5 หรือ 15 นาที แสดงว่า มี load เพิ่มขึ้น
  • ถ้าค่า average ที่ 1 นาทีต่ำกว่าค่า average ที่ 5 หรือ 15 นาที แสดงว่า มี load ลดลง
  • ถ้า load มากกว่า จำนวน CPU หมายถึง CPU ถูกใช้งานเต็มประสิทธิภาพจนถึงจุดอิ่มตัว ซึ่งอาจจะกระทบกับประสิทธิภาพการทำงาน ทำให้รู้สึกว่าเครื่องทำงานช้าลง
ถ้าต้องการทราบจำนวน CPU สามารถดูได้ด้วยคำสั่ง nproc

$ nproc
2

นอกจากคำสั่ง uptime และ w แล้ว ยังสามารถดูได้จากบรรทัดบนสุดจากคำสั่ง top ดังตัวอย่างด้านล่าง



ps

ถ้าต้องการดูว่ามี process ไหนที่ใช้งาน CPU มาก สามารถดูได้จากคำสั่ง ps ดังตัวอย่างด้านล่าง

# ps aux | sort -nrk 3,3 | head


ถ้าหากต้องการให้แสดงเป็น real-time สามารถทำได้โดยเพิ่มคำสั่ง watch ไว้ข้างหน้า ดังตัวอย่าง

# watch "ps aux | sort -nrk 3,3 | head"



นอกจากนี้ยังสามารถดูได้จากคำสั่ง top ซึ่งแสดงรายละเอียดดังตัวอย่างด้านล่าง


นอกจากนี้เรายังสามารถดู CPU Utilization จากคำสั่ง top


นอกจากคำสั่ง top แล้ว เรายังสามารถดู CPU Utilization จากคำสั่ง vmstat และ sar

vmstat

รูปแบบคำสั่ง

vmstat  interval  [count]

ตัวอย่างเช่น ต้องการแสดงผลของ CPU utilization ทุกๆ 3 วินาที จำนวน 5 ครั้ง


  • us    - user time คือ เวลาที่ใช้ในการทำงานที่ไม่เกี่ยวกับ kernel code เช่น การทำงานในส่วน application เป็นต้น โดยที่ user time จะรวมถึง nice time (เวลาที่ใช้ผ่านคำสั่ง nice) ด้วย
  • sy    - system timeคือ เวลาที่ใช้ในการทำงานที่เกี่ยวกับ kernel code จะเกี่ยวข้องกับการทำงานบน cpu, การติดต่อสื่อสารกับอุปกรณ์อื่นๆ ผ่าน device driver โดยเฉพาะอย่างยิ่ง disk I/O
  • id    - idle คือ เวลาที่ยังไม่ถูกใช้งาน
  • wa  - IO-wait คือ เวลาที่ใช้ในการรอที่จะใช้งาน disk I/O
  • st    - stolen คือ เวลาที่หายไปจาก virtual machine (Linux 2.6.11 หรือใหม่กว่า)


# vmstat 3 5


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

ถ้าจำนวนโปรเซสใน run queue (procs r) มีค่ามากกว่าจำนวน CPU ของระบบ จะทำให้ระบบทำงานช้าลง เนื่องจากมีจำนวนมากกว่า CPU สำหรับใช้งาน 
ถ้าค่านี้มีมากกว่า 4 เท่า ของจำนวน CPU ระบบจะพบกับปัญหา CPU shortage คือ มี CPU ไม่เพียงพอต่อการใช้งานของโปรเซสบนระบบ และเครื่องจะเกิดอาการช้ามาก

การแก้ปัญหาทำได้คือ
- Tuning application procedure ที่มีผลต่อการใช้งาน CPU
- เพิ่ม CPU ให้กับระบบ

sar

รูปแบบคำสั่ง

sar  interval  [count]

ตัวอย่างเช่น ต้องการแสดงผลของ CPU utilization ทุกๆ 2 วินาที จำนวน 5 ครั้ง

# sar 2 5

หรือ

# sar -u 2 5


ในกรณีที่ต้องการจะดูข้อมูลย้อนหลัง ไฟล์ที่จัดเก็บจะอยู่ที่ /var/log/sa โดยไฟล์ของวันที่ 1 คือ sa01, ไฟล์วันที่ 2 คือ sa02, ...
ตัวอย่างเช่นต้องการดู CPU utilization ในวันที่ 15 สามารถดูได้โดยใช้คำสั่งดังนี้

# cd  /var/log/sa
# sar -u -f sa15 | more

mpstat

ในกรณีที่เครื่องมีหลาย CPU เราสามารถดูรายละเอียดการใช้งานของแต่ละ CPU ได้โดยใช้คำสั่ง mpstat ซึ่งก่อนใช้งานคำสั่งนี้จะต้องติดตั้ง package "sysstat" ก่อน

การติดตั้ง package "sysstat" บน Ubuntu หรือ Debian ใช้คำสั่ง

# apt-get install sysstat

การติดตั้ง package "sysstat" บน RHEL/CentOS Linux v4.x หรือเก่ากว่า ใช้คำสั่ง

# up2date install sysstat

การติดตั้ง package "sysstat" บน RHEL/CentOS/Oracle Linux v5.x หรือใหม่กว่า ใช้คำสั่ง

# yum install sysstat

ตัวอย่างคำสั่ง mpstat

แสดงภาพรวมการใช้งาน CPU

# mpstat



แสดงภาพรวมการใช้งาน CPU ทุกๆ 3 วินาที จำนวน 3 ครั้ง

# mpstat 3 3



แสดงการใช้งานกระจายรายละเอียดแต่ละ CPU

# mpstat -P ALL


ในตัวอย่างมีเพียง 1 CPU จึงแสดงแค่ CPU#0  ถ้ามี 4 CPU ก็จะแสดง CPU#0, CPU#1, CPU#2 และ CPU#3 ตามลำดับ

คำสั่ง mpstat ใช้ในการช่วยดูว่าการทำงานของ CPU มีการกระจาย load ได้สมดุลหรือไม่ มี CPU ตัวไหนทำงานหนักหรือไม่

วิธีวิเคราะห์ค่าทั้งจากคำสั่ง top, vmstat, mpstat และ sar
  • CPU Utilization มีค่ามากกว่า 80% หรือไม่ โดยดูจากค่า %idle ถ้าน้อยกว่า 20 แสดงว่าการทำงานของ CPU มี load มาก จะส่งผลกระทบกับประสิทธิภาพการทำงานในอนาคต
  • CPU system time มีค่ามากกว่า 20% หรือไม่ โดยดูจากค่า sy (vmstat และ top), %sys (mpstat) %system (sar)
  • processor load ไม่สมดุล ดูได้จากคำสั่ง "mpstat -P ALL"
  • ในกรณีที่ CPU Utilization 100% มีค่า I/O wait หรือไม่  โดยดูจากค่า wa (สำหรับ vmstat และ top), %iowait (สำหรับ sar และ mpstat) และ มี process ไหนใช้งาน CPU สูง โดยดูจากคำสั่ง ps หรือ top
                ถ้าค่า CPU system time สูง แสดงว่าปัญหาจะเกี่ยวข้องกับตัว CPU ไม่เพียงพอ หรือ  เกี่ยวข้องกับ disk I/O ซึ่งต้องไปดูจากการใช้งาน I/O (I/O Utilization) ซึ่งจะกล่าวในบทความต่อๆไป
                ถ้าค่า CPU user time สูง โดยทั่วไปถือว่าระบบทำงานปกติ แต่ถ้าเกิดปัญหาระบบทำงานช้าต้องดูองค์ประกอบอื่น เช่น ปัญหาอาจจะเกี่ยวข้องกับการใช้งานของ user หรือ application program มีการเปลี่ยนแปลงอะไรหรือไม่  ซึ่งต้องไปดู process จากคำสั่ง ps หรือ top ว่า process ไหนใช้ CPU สูง
               ถ้าค่า CPU Idle time (cpu id) เป็น 0 และค่า CPU system time (cpu sy) เป็น double  ของค่า CPU user time (cpu us) ระบบจะเจอปัญหา CPU shortage เครื่อจะทำงานช้าลงมาก

หลังจากทราบแล้วว่า process ไหนใช้งาน CPU สูง ต้องไปดูว่ามีการเปลี่ยนแปลงอะไรก่อนที่ปัญหาจะเกิด มี workload เพิ่มขึ้นหรือไม่ มีการปรับเปลี่ยน config หรือไม่

การแก้ปัญหาทำได้คือ
- Tuning application procedure ที่กระทบต่อการใช้งาน CPU
- เพิ่ม CPU ให้กับระบบ

บทความนี้น่าจะมีประโยชน์สำหรับผู้ที่สนใจในการตรวจสอบประสิทธิภาพการทำงานบน Linux ไม่มากก็น้อย

วิสูจน์ อมตาริยกุล

คำสั่งที่ใช้ในการตรวจสอบ Performance บน Linux ตอนที่ 1:CPU Utilization คำสั่งที่ใช้ในการตรวจสอบ Performance บน Linux ตอนที่ 1:CPU Utilization Reviewed by Wisoot Amatariyakul on 11:28 PM Rating: 5

No comments:

ads 728x90 B
Powered by Blogger.