นักศึกษาเคยเจอสถานการณ์เหล่านี้หรือไม่ เว็บไซต์โหลดนานเกินรอ ระบบตอบสนองช้าขณะมีผู้ใช้งานพร้อมกันหลายคน หรือแอปพลิเคชันค้างระหว่างทำงานสำคัญ ปัญหาเหล่านี้ล้วนเป็นสัญญาณที่บอกว่า ระบบของเรากำลังมีปัญหาด้านประสิทธิภาพ
ในบทเรียนนี้ เราจะเรียนรู้วิธีการตรวจสอบ วิเคราะห์ และปรับแต่งประสิทธิภาพระบบอย่างเป็นระบบ เพื่อให้ระบบของคุณทำงานได้รวดเร็ว เสถียร และประหยัดทรัพยากรมากขึ้น
การปรับแต่งประสิทธิภาพระบบ (System Performance Tuning) เป็นกระบวนการสำคัญในการทำให้ระบบคอมพิวเตอร์ทำงานได้อย่างมีประสิทธิภาพสูงสุด โดยมีเป้าหมายเพื่อ
ลดระยะเวลาในการประมวลผล
เพิ่มปริมาณงานที่ประมวลผลได้
ลดการใช้ทรัพยากรระบบ
เพิ่มความเสถียรและความน่าเชื่อถือ
| ตัวชี้วัด | คำอธิบาย | ค่าที่เหมาะสม |
|---|---|---|
| CPU Usage | ร้อยละของการใช้งานหน่วยประมวลผล | < 70-80% |
| Memory Usage | ปริมาณหน่วยความจำที่ใช้งาน | < 80-85% |
| Disk I/O | อัตราการอ่าน/เขียนข้อมูลบนดิสก์ | ขึ้นอยู่กับ workload |
| Network Bandwidth | ปริมาณข้อมูลที่ส่ง/รับผ่านเครือข่าย | ขึ้นอยู่กับความต้องการ |
| Response Time | เวลาตอบสนองของระบบ | < 2-3 วินาที |
ระบบถูกจำกัดด้วยประสิทธิภาพของ CPU
ระบบถูกจำกัดด้วยหน่วยความจำ
ระบบถูกจำกัดด้วยการอ่าน/เขียนข้อมูล
อาการที่พบ: ผู้ใช้แจ้งว่าระบบ Upload ไฟล์ช้า ไฟล์ขนาด 10 MB ใช้เวลานานกว่า 30 วินาที บางครั้งเกิด Connection Timeout
การระบุเพิ่มเติม: ปัญหาเกิดขึ้นเฉพาะช่วงเวลา 13.00-14.00 น. เฉพาะไฟล์ขนาดใหญ่ (>5MB) เท่านั้น
เครื่องมือ: User Report, Alert System, Monitoring Tool
| ประเภทข้อมูล | ค่าที่วัดได้ | เครื่องมือ |
|---|---|---|
| CPU Usage | 85-95% (ขณะอัปโหลด) | Task Manager |
| Memory Usage | 2.4 GB / 4 GB (60%) | Resource Monitor |
| Network Upload | 1.2 MB/s | Resource Monitor |
| Response Time | 32-45 วินาที | Custom Log |
[2026-03-24 13:15:32] ERROR: Maximum execution time exceeded
[2026-03-24 13:15:32] DETAIL: Script execution time: 32.5s (limit: 30s)
ปัญหา: ระบบอัปโหลดไฟล์ขนาด 10MB ใช้เวลานานกว่า 30 วินาที
1. Why? → กระบวนการอัปโหลดต้องเขียนไฟล์ลง disk ชั่วคราวก่อนส่ง
2. Why? → PHP ต้องประมวลผลไฟล์ทั้งหมดใน memory ก่อนส่ง
3. Why? → PHP memory_limit (128MB) ไม่เพียงพอสำหรับไฟล์ขนาดใหญ่
4. Why? → ค่า memory_limit ถูกตั้งไว้ต่ำเกินไปจากค่าเริ่มต้น
5. Why? → ไม่มีการปรับแต่งค่าให้เหมาะสมกับ workload จริง
| การดำเนินการ | ผู้รับผิดชอบ | เวลา | ความเสี่ยง |
|---|---|---|---|
| เพิ่ม memory_limit จาก 128MB เป็น 512MB | DevOps | 10 นาที | ต่ำ |
| เพิ่ม max_execution_time จาก 30s เป็น 60s | DevOps | 5 นาที | ต่ำ |
| ปรับปรุง upload chunk size | Developer | 2 ชั่วโมง | ปานกลาง |
กำหนดการ: 25 มีนาคม 2567 เวลา 22.00-23.00 น. (นอกเวลาทำการ)
; php.ini
memory_limit = 512M
max_execution_time = 60
post_max_size = 100M
upload_max_filesize = 100M
ดำเนินการรีสตาร์ท Web Server และปรับปรุงโค้ดฝั่ง Client ให้รองรับการอัปโหลดแบบ chunk
| ตัวชี้วัด | ก่อนแก้ไข | หลังแก้ไข | การเปลี่ยนแปลง |
|---|---|---|---|
| Upload Time (10MB) | 32-45 วินาที | 5-8 วินาที | ⬇️ ลดลง 82% |
| CPU Usage | 85-95% | 45-60% | ⬇️ ลดลง 40% |
| Error Rate | 15% | 0% | ✅ หมดปัญหา |
บทเรียนที่ได้: ควรตรวจสอบ default configuration ก่อน deploy ระบบ และทำ monitoring อย่างต่อเนื่อง
| หมวดหมู่ | เครื่องมือ | การใช้งาน |
|---|---|---|
| System Monitoring | Task Manager, Resource Monitor, Performance Monitor | ตรวจสอบ CPU, Memory, Disk, Network |
| Application Monitoring | New Relic, Datadog, Dynatrace | ตรวจสอบประสิทธิภาพแอปพลิเคชัน |
| Network Analysis | Wireshark, netstat, tcpdump | วิเคราะห์แพ็กเก็ตและการเชื่อมต่อเครือข่าย |
| Web Performance | Google Lighthouse, GTmetrix, WebPageTest | วิเคราะห์ประสิทธิภาพเว็บไซต์ |
เครื่องมือนี้จะตรวจสอบประสิทธิภาพของหน้าเว็บปัจจุบัน โดยใช้ JavaScript APIs ในการวัดค่าต่างๆ
// 1. วัดเวลาโหลดหน้าเว็บ
function measurePageLoadTime() {
const perfData = performance.timing;
const loadTime = perfData.loadEventEnd - perfData.navigationStart;
const domTime = perfData.domContentLoadedEventEnd - perfData.navigationStart;
console.log(`DOM Load: ${domTime}ms, Page Load: ${loadTime}ms`);
return { domTime, loadTime };
}
// 2. ตรวจสอบการใช้หน่วยความจำ (เฉพาะ Chrome)
function measureMemory() {
if (performance.memory) {
const used = performance.memory.usedJSHeapSize / 1024 / 1024;
console.log(`JS Heap Used: ${used.toFixed(2)} MB`);
return used;
}
return null;
}
// 3. ตรวจสอบ Network Requests
function measureNetwork() {
const resources = performance.getEntriesByType('resource');
const totalSize = resources.reduce((sum, r) => sum + (r.transferSize || 0), 0);
console.log(`Requests: ${resources.length}, Total: ${(totalSize/1024).toFixed(2)} KB`);
return { count: resources.length, totalSize };
}
// 4. ตรวจสอบ FPS (Frame Per Second)
let frameCount = 0, lastTime = performance.now();
function measureFPS() {
requestAnimationFrame(() => {
const now = performance.now();
frameCount++;
if (now - lastTime >= 1000) {
const fps = (frameCount * 1000) / (now - lastTime);
console.log(`FPS: ${fps.toFixed(2)}`);
frameCount = 0;
lastTime = now;
}
measureFPS();
});
}
// 5. ตรวจสอบ Long Tasks (งานที่ใช้เวลานาน)
function monitorLongTasks() {
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
if (entry.duration > 50) {
console.warn(`⚠️ Long Task: ${entry.duration.toFixed(2)}ms`);
}
}
});
observer.observe({ type: 'longtask', buffered: true });
}
// เริ่มการตรวจสอบทั้งหมด
measurePageLoadTime();
measureMemory();
measureNetwork();
measureFPS();
monitorLongTasks();
เปิดใช้งาน: Task Manager → Performance Tab → Open Resource Monitor หรือพิมพ์ "resmon" ใน Run dialog
| เครื่องมือ | การใช้งาน | จุดเด่น |
|---|---|---|
| Google Lighthouse | วิเคราะห์ประสิทธิภาพเว็บไซต์ | ให้คะแนนและคำแนะนำในการปรับปรุง |
| GTmetrix | วิเคราะห์ความเร็วเว็บไซต์ | รายละเอียดการโหลดแต่ละองค์ประกอบ |
| WebPageTest | ทดสอบความเร็วเว็บไซต์ | ทดสอบจากหลายตำแหน่งและหลายเบราว์เซอร์ |
| รายการ | คะแนน | หมายเหตุ |
|---|---|---|
| การมีส่วนร่วมในชั้นเรียน | 1% | การถามคำถามหรือการแสดงความคิดเห็นเกี่ยวกับเนื้อหาที่เรียน |
| แบบทดสอบความเข้าใจในการเรียนรู้ | 2% | ทดสอบความเข้าใจเนื้อหาทฤษฎีและปฏิบัติ |
| กิจกรรมการตรวจสอบประสิทธิภาพ | 3% | บันทึกผลการทดสอบและวิเคราะห์ |