Linux
เฮ้ย น้อง! Linux Performance Monitoring เนี่ย มันก็เหมือนหมอตรวจสุขภาพคอมพิวเตอร์เรานั่นแหละ แต่หมอคนนี้เป็นโปรแกรมที่คอยส่องดูการทำงานของระบบ Linux แบบเรียลไทม์ หรือจะดูย้อนหลังก็ได้
ทำไมถึงสำคัญน่ะเหรอ? สมัยผมทำร้านเน็ต SiamCafe เมื่อ 20 กว่าปีก่อน (โอ้โห นานเนอะ) Server มันรวนบ่อยมาก! บางทีเกมค้าง, เว็บอืด, โหลดอะไรก็ช้า... ปัญหาพวกนี้แหละที่ Performance Monitoring ช่วยเราแก้ได้
มันช่วยให้เรารู้ว่า CPU ทำงานหนักไปไหม, Memory เหลือน้อยหรือเปล่า, Disk I/O (การอ่านเขียนข้อมูลบนฮาร์ดดิสก์) เยอะเกินไปไหม, Network ติดขัดตรงไหน... พอรู้สาเหตุ เราก็แก้ปัญหาได้ตรงจุดไงล่ะ ไม่ต้องเดามั่วๆ เหมือนเมื่อก่อนแล้ว
CPU Utilization ก็คือ เปอร์เซ็นต์การใช้งาน CPU นั่นแหละ ถ้า 100% ตลอดเวลา แสดงว่า CPU ทำงานหนักมาก อาจจะต้องหาโปรแกรมที่กิน CPU เยอะๆ แล้วจัดการซะ หรือไม่ก็ต้องอัพเกรด CPU แล้วล่ะ
Memory (RAM) ก็สำคัญไม่แพ้กัน ถ้า Memory เหลือน้อย ระบบจะเริ่มใช้ Swap space (พื้นที่บนฮาร์ดดิสก์ที่ใช้แทน Memory) ซึ่งมันช้ากว่า Memory จริงๆ เยอะมาก ทำให้ระบบอืดเป็นเรือเกลือเลยล่ะ
Disk I/O คือการอ่านเขียนข้อมูลบนฮาร์ดดิสก์ ถ้าโปรแกรมต้องอ่านเขียนข้อมูลเยอะๆ ก็จะทำให้ Disk I/O สูง ถ้า Disk I/O สูงเกินไป ก็อาจจะต้องเปลี่ยนไปใช้ SSD (Solid State Drive) ที่เร็วกว่า หรือไม่ก็ต้องปรับแต่งโปรแกรมให้ใช้ Disk I/O น้อยลง
การเริ่มต้นใช้งาน Linux Performance Monitoring ไม่ยากอย่างที่คิด สมัยนี้มีเครื่องมือให้เลือกใช้เยอะแยะ ทั้งแบบที่มาพร้อมกับ Linux (เช่น top, vmstat, iostat) และแบบที่ต้องติดตั้งเพิ่ม (เช่น Grafana, Prometheus)
ผมแนะนำให้เริ่มจากเครื่องมือที่มาพร้อมกับ Linux ก่อน เพราะมันใช้งานง่าย และมีข้อมูลพื้นฐานที่จำเป็นครบถ้วน พอเริ่มคล่องแล้วค่อยไปลองใช้เครื่องมือที่ซับซ้อนขึ้น
สำหรับมือใหม่ ผมแนะนำให้ลองใช้คำสั่ง top ดูก่อน มันจะแสดงรายการโปรแกรมที่กำลังทำงานอยู่ และบอกว่าแต่ละโปรแกรมใช้ CPU และ Memory ไปเท่าไหร่
top ดูภาพรวม
เปิด Terminal แล้วพิมพ์ top แล้วกด Enter เราจะเห็นข้อมูลแบบเรียลไทม์เลย
top - 14:30:00 up 1 day, 2:30, 1 user, load average: 0.10, 0.05, 0.01
Tasks: 200 total, 1 running, 199 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.0 us, 0.5 sy, 0.0 ni, 97.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8173760 total, 1234560 free, 4567890 used, 2371310 buff/cache
KiB Swap: 2097152 total, 2097152 free, 0 used. 3210980 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 user 20 0 1234m 5678k 1234k S 1.0 0.1 0:01.23 program1
5678 user 20 0 5678m 9012k 5678k S 0.5 0.1 0:00.56 program2
top จะแสดงข้อมูล CPU utilization, Memory usage, และรายการโปรแกรมที่กำลังทำงานอยู่ เรียงตามลำดับการใช้ CPU จากมากไปน้อย
vmstat ดู Memory และ Swap
คำสั่ง vmstat จะช่วยให้เราดู Memory และ Swap usage ได้ง่ายขึ้น พิมพ์ vmstat 1 แล้วกด Enter มันจะแสดงข้อมูลทุกๆ 1 วินาที
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 1234560 234567 3456789 0 0 0 0 12 34 1 1 98 0 0
ดูที่คอลัมน์ swpd ถ้ามีค่าเยอะๆ แสดงว่าระบบกำลังใช้ Swap space เยอะมาก ต้องเพิ่ม Memory แล้วล่ะ
Log files ก็เป็นแหล่งข้อมูลที่สำคัญ สมัยก่อนผมไล่อ่าน Log file แทบทุกวัน! มันจะบอกเราว่ามี Error อะไรเกิดขึ้นบ้าง, มีใครพยายาม Hack ระบบเราหรือเปล่า, หรือโปรแกรมไหนมีปัญหา
Log file ที่สำคัญๆ ก็เช่น /var/log/syslog, /var/log/auth.log, /var/log/apache2/error.log (ถ้าใช้ Apache web server)
เครื่องมืออย่าง grep, awk, sed ช่วยให้เราค้นหาข้อมูลใน Log file ได้ง่ายขึ้น
อย่าลืมแวะไปดู SiamCafe Blog นะครับ มีบทความดีๆ อีกเยอะเลย
นอกจากเครื่องมือที่มาพร้อมกับ Linux แล้ว ยังมีเครื่องมือ Performance Monitoring อีกหลายตัวให้เลือกใช้ แต่ละตัวก็มีข้อดีข้อเสียแตกต่างกันไป
สมัยนี้ Cloud Monitoring ก็มาแรง พวก AWS CloudWatch, Google Cloud Monitoring, Azure Monitor ก็เป็นทางเลือกที่ดี ถ้าเราใช้ Cloud infrastructure อยู่
| เครื่องมือ | ข้อดี | ข้อเสีย | เหมาะกับใคร |
|---|---|---|---|
| top | ใช้งานง่าย, มาพร้อมกับ Linux | ข้อมูลดิบ, ไม่สวยงาม | มือใหม่, ต้องการดูภาพรวม |
| vmstat | ดู Memory และ Swap ได้ง่าย | ข้อมูลดิบ, ไม่สวยงาม | มือใหม่, ต้องการดู Memory usage |
| Grafana + Prometheus | กราฟสวยงาม, ปรับแต่งได้เยอะ | ติดตั้งยาก, ต้องใช้เวลาเรียนรู้ | มืออาชีพ, ต้องการ Monitoring แบบละเอียด |
| AWS CloudWatch | ใช้งานง่าย, Integrated กับ AWS | ผูกติดกับ AWS, อาจมีค่าใช้จ่าย | ใช้ AWS Cloud |
เลือกเครื่องมือที่เหมาะกับความต้องการและงบประมาณของเรานะครับ ไม่มีเครื่องมือไหนที่ดีที่สุดสำหรับทุกคน
ถ้าอยากรู้เรื่อง IT สนุกๆ แบบนี้อีก อย่าลืมติดตาม SiamCafe Blog นะครับ!
ดูวิดีโอเพิ่มเติมเกี่ยวกับLinux Performance Monitoring:
เอาล่ะน้องๆ มาถึงส่วนที่พี่จะแชร์ประสบการณ์จริงที่สั่งสมมาตลอด 28 ปี สมัยทำร้านเน็ต SiamCafe พี่เจอปัญหาเพอร์ฟอร์แมนซ์ของ Linux มาหมดแล้ว ทั้งเครื่องอืด เกมแลค เว็บล่ม (เมื่อก่อนยังไม่มี Cloud นะจ๊ะ ต้องดูแลเองทุกอย่าง)
สิ่งที่พี่จะบอกคือ อย่ารอให้เกิดปัญหาแล้วค่อยแก้! ต้องมอนิเตอร์ Performance เชิงรุก (Proactive Monitoring) คือต้องรู้ว่าอะไรผิดปกติก่อนที่มันจะส่งผลกระทบกับผู้ใช้งาน
ข้อนี้สำคัญมาก! ติดตั้งระบบแจ้งเตือนเมื่อค่า Metrics ต่างๆ เกิน Threshold ที่เรากำหนดไว้ เช่น CPU Usage เกิน 90%, Memory Usage เกิน 80% หรือ Disk I/O สูงผิดปกติ สมัยก่อนพี่ใช้ Nagios แต่ปัจจุบันมี Tools ที่ทันสมัยกว่าเยอะ เช่น Prometheus + Alertmanager หรือ Grafana ที่สามารถ Visualize ข้อมูลและตั้ง Alert ได้
ยกตัวอย่างง่ายๆ สมมติเราอยาก Monitor CPU Usage บน Linux ด้วย Shell Script เราสามารถเขียน Script แบบนี้:
#!/bin/bash
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
THRESHOLD=90
if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then
echo "CPU Usage is high: $CPU_USAGE%"
# Send email notification or trigger other actions
fi
Script นี้จะตรวจสอบ CPU Usage และถ้าเกิน 90% ก็จะส่ง Email แจ้งเตือน (ส่วนการส่ง Email ก็ต้องไป Config เพิ่มเติมนะ)
ก่อนจะตั้ง Threshold Alert ได้ เราต้องรู้ก่อนว่าค่าปกติ (Baseline) ของระบบเราคืออะไร เช่น CPU Usage ปกติอยู่ที่เท่าไหร่ Memory Usage ปกติอยู่ที่เท่าไหร่ Network Traffic ปกติอยู่ที่เท่าไหร่ การสร้าง Baseline ที่ดีต้องเก็บข้อมูลในช่วงเวลาที่ระบบทำงานปกติ (Peak Hours และ Off-Peak Hours) อย่างน้อย 1-2 สัปดาห์
สมัยก่อนพี่จะจดบันทึกค่าต่างๆ ไว้ใน Spreadsheet แล้วค่อยๆ ปรับ Threshold Alert ให้เหมาะสมกับแต่ละ Server
Tools ที่ใช้ในการ Monitor Performance มีเยอะมาก เลือกใช้ให้เหมาะสมกับความต้องการและงบประมาณ สมัยก่อนพี่ใช้ `top`, `vmstat`, `iostat` เป็นหลัก แต่ปัจจุบันมี Tools ที่ Advanced กว่าเยอะ เช่น:
นอกจากนี้ยังมี Tools ที่เป็น Software สำเร็จรูป เช่น:
อย่าดู Metrics แยกกัน ต้องดูภาพรวมและเชื่อมโยง Metrics ต่างๆ เข้าด้วยกัน เช่น ถ้า CPU Usage สูง อาจจะเกิดจาก Disk I/O สูง หรือ Network Traffic สูง การ Correlate Metrics จะช่วยให้เราหาสาเหตุของปัญหาได้เร็วขึ้น
เคยเจอเคสที่เกมในร้านแลค ปรากฏว่า Network Card เสีย ทำให้ Packet Loss สูง พอเปลี่ยน Network Card ทุกอย่างก็กลับมาปกติ
CPU Usage สูงอาจเกิดจากหลายสาเหตุ เช่น มี Process ทำงานหนัก, มี Malware, หรือ Hardware มีปัญหา ลองใช้ `top` หรือ `htop` เพื่อดูว่า Process ไหนใช้ CPU เยอะที่สุด
Memory Leak คือการที่โปรแกรม Allocate Memory แต่ไม่ Free Memory เมื่อใช้งานเสร็จ ทำให้ Memory Usage เพิ่มขึ้นเรื่อยๆ จนระบบ Out of Memory วิธีแก้คือต้องหา Memory Leak ใน Code และแก้ไข
Disk I/O สูงทำให้ระบบช้าลง เพราะ Process ต้องรอ Disk อ่าน/เขียนข้อมูลนานขึ้น ลองใช้ `iostat` เพื่อดูว่า Disk ไหนมี I/O สูง และ Process ไหนใช้ Disk เยอะที่สุด
Swap Space คือพื้นที่บน Disk ที่ใช้เป็น Virtual Memory เมื่อ RAM ไม่พอ Swap Space จะช่วยให้ระบบทำงานต่อไปได้ แต่การใช้ Swap Space จะทำให้ระบบช้าลง เพราะ Disk ช้ากว่า RAM มาก
การ Monitor Performance ของ Linux เป็นเรื่องสำคัญมาก โดยเฉพาะอย่างยิ่งถ้าเราใช้งาน Linux ใน Production Environment ต้อง Monitor เชิงรุก (Proactive Monitoring), ตั้ง Alerts, เข้าใจ Baseline, ใช้ Tools ให้เหมาะสม และ Correlate Metrics ต่างๆ
หวังว่าบทความนี้จะเป็นประโยชน์กับน้องๆ นะครับ อย่าลืมไปลองทำตามกันดู SiamCafe Blog มีบทความดีๆ อีกเยอะเลย
และถ้าใครสนใจเรื่อง Forex ลองดูที่ iCafeForex นะครับ