CSI203 สถาปัตยกรรมดิจิทัลและระบบปฏิบัติการ

ครั้งที่ 12: การปรับแต่งประสิทธิภาพของระบบบริการ
ภาควิชาวิทยาการคอมพิวเตอร์ | Sripatum University

ทำไมต้องปรับแต่งประสิทธิภาพระบบ

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

47% ของผู้ใช้คาดหวังให้เว็บไซต์โหลดภายใน 2 วินาที
1 วินาที ที่ช้าลง = Conversion ลดลง 7%
40% ของผู้ใช้จะละทิ้งเว็บไซต์ที่โหลดนานเกิน 3 วินาที

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

📚 วัตถุประสงค์การเรียนรู้

📖 ภาคทฤษฎี

  • เข้าใจเทคนิคการวิเคราะห์ประสิทธิภาพระบบ
  • เรียนรู้วิธีการปรับแต่งทรัพยากรฮาร์ดแวร์และซอฟต์แวร์
  • พัฒนาทักษะการตรวจสอบและแก้ไขปัญหาประสิทธิภาพ
  • ศึกษาแนวคิดของการเพิ่มประสิทธิภาพ (Optimization) ระบบ

💻 ภาคปฏิบัติ

  • ฝึกใช้เครื่องมือ monitoring ต่างๆ
  • วิเคราะห์ประสิทธิภาพของโปรเจกต์
  • พัฒนาทักษะการระบุและแก้ไขปัญหาด้านประสิทธิภาพ
  • เพิ่มประสิทธิภาพโปรเจกต์ให้มีประสิทธิภาพมากขึ้น

📖 ภาคทฤษฎี

1. ความสำคัญของการปรับแต่งประสิทธิภาพระบบ


การปรับแต่งประสิทธิภาพระบบ (System Performance Tuning) เป็นกระบวนการสำคัญในการทำให้ระบบคอมพิวเตอร์ทำงานได้อย่างมีประสิทธิภาพสูงสุด โดยมีเป้าหมายเพื่อ


⬇️ Response Time

ลดระยะเวลาในการประมวลผล

⬆️ Throughput

เพิ่มปริมาณงานที่ประมวลผลได้

📊 Resource

ลดการใช้ทรัพยากรระบบ

🔒 Stability

เพิ่มความเสถียรและความน่าเชื่อถือ


2. ตัวชี้วัดประสิทธิภาพหลัก (KPIs)

ตัวชี้วัดคำอธิบายค่าที่เหมาะสม
CPU Usageร้อยละของการใช้งานหน่วยประมวลผล< 70-80%
Memory Usageปริมาณหน่วยความจำที่ใช้งาน< 80-85%
Disk I/Oอัตราการอ่าน/เขียนข้อมูลบนดิสก์ขึ้นอยู่กับ workload
Network Bandwidthปริมาณข้อมูลที่ส่ง/รับผ่านเครือข่ายขึ้นอยู่กับความต้องการ
Response Timeเวลาตอบสนองของระบบ< 2-3 วินาที

3. ปัญหาที่พบได้บ่อยในระบบ


⚠️ CPU Bound

ระบบถูกจำกัดด้วยประสิทธิภาพของ CPU

  • CPU Usage สูงเป็นเวลานาน
  • ระบบตอบสนองช้า
  • แอปพลิเคชันค้าง

⚠️ Memory Bound

ระบบถูกจำกัดด้วยหน่วยความจำ

  • Memory Usage สูง
  • การสลับข้อมูล (Swap) บ่อย
  • Memory Leak

⚠️ I/O Bound

ระบบถูกจำกัดด้วยการอ่าน/เขียนข้อมูล

  • Disk I/O สูง
  • ระบบหน่วงเวลาขณะอ่าน/เขียนไฟล์
  • การเข้าถึงฐานข้อมูลไม่มีประสิทธิภาพ

4. กระบวนการแก้ไขปัญหา (พร้อมตัวอย่างกรณีศึกษา)

1. ระบุปัญหา
2. รวบรวมข้อมูล
3. วิเคราะห์
4. วางแผนแก้ไข
5. ดำเนินการ
6. ติดตามผล
1 ระบุปัญหา

อาการที่พบ: ผู้ใช้แจ้งว่าระบบ Upload ไฟล์ช้า ไฟล์ขนาด 10 MB ใช้เวลานานกว่า 30 วินาที บางครั้งเกิด Connection Timeout

การระบุเพิ่มเติม: ปัญหาเกิดขึ้นเฉพาะช่วงเวลา 13.00-14.00 น. เฉพาะไฟล์ขนาดใหญ่ (>5MB) เท่านั้น

เครื่องมือ: User Report, Alert System, Monitoring Tool

2 รวบรวมข้อมูล
ประเภทข้อมูลค่าที่วัดได้เครื่องมือ
CPU Usage85-95% (ขณะอัปโหลด)Task Manager
Memory Usage2.4 GB / 4 GB (60%)Resource Monitor
Network Upload1.2 MB/sResource Monitor
Response Time32-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)
3 วิเคราะห์ (5 Whys)

ปัญหา: ระบบอัปโหลดไฟล์ขนาด 10MB ใช้เวลานานกว่า 30 วินาที

1. Why? → กระบวนการอัปโหลดต้องเขียนไฟล์ลง disk ชั่วคราวก่อนส่ง

2. Why? → PHP ต้องประมวลผลไฟล์ทั้งหมดใน memory ก่อนส่ง

3. Why? → PHP memory_limit (128MB) ไม่เพียงพอสำหรับไฟล์ขนาดใหญ่

4. Why? → ค่า memory_limit ถูกตั้งไว้ต่ำเกินไปจากค่าเริ่มต้น

5. Why? → ไม่มีการปรับแต่งค่าให้เหมาะสมกับ workload จริง

✅ สาเหตุที่แท้จริง: PHP memory_limit และ max_execution_time ไม่เหมาะสมกับขนาดไฟล์ที่ต้องประมวลผล
4 วางแผนแก้ไข
การดำเนินการผู้รับผิดชอบเวลาความเสี่ยง
เพิ่ม memory_limit จาก 128MB เป็น 512MBDevOps10 นาทีต่ำ
เพิ่ม max_execution_time จาก 30s เป็น 60sDevOps5 นาทีต่ำ
ปรับปรุง upload chunk sizeDeveloper2 ชั่วโมงปานกลาง

กำหนดการ: 25 มีนาคม 2567 เวลา 22.00-23.00 น. (นอกเวลาทำการ)

5 ดำเนินการ
; php.ini
memory_limit = 512M
max_execution_time = 60
post_max_size = 100M
upload_max_filesize = 100M

ดำเนินการรีสตาร์ท Web Server และปรับปรุงโค้ดฝั่ง Client ให้รองรับการอัปโหลดแบบ chunk

6 ติดตามผล
ตัวชี้วัดก่อนแก้ไขหลังแก้ไขการเปลี่ยนแปลง
Upload Time (10MB)32-45 วินาที5-8 วินาที⬇️ ลดลง 82%
CPU Usage85-95%45-60%⬇️ ลดลง 40%
Error Rate15%0%✅ หมดปัญหา

บทเรียนที่ได้: ควรตรวจสอบ default configuration ก่อน deploy ระบบ และทำ monitoring อย่างต่อเนื่อง

5. เครื่องมือที่ใช้ในการตรวจสอบ

หมวดหมู่เครื่องมือการใช้งาน
System MonitoringTask Manager, Resource Monitor, Performance Monitorตรวจสอบ CPU, Memory, Disk, Network
Application MonitoringNew Relic, Datadog, Dynatraceตรวจสอบประสิทธิภาพแอปพลิเคชัน
Network AnalysisWireshark, netstat, tcpdumpวิเคราะห์แพ็กเก็ตและการเชื่อมต่อเครือข่าย
Web PerformanceGoogle Lighthouse, GTmetrix, WebPageTestวิเคราะห์ประสิทธิภาพเว็บไซต์

🛠️ เครื่องมือตรวจสอบประสิทธิภาพเว็บแอปพลิเคชัน (JavaScript Performance Monitor)

📊 Web Performance Monitor

เครื่องมือนี้จะตรวจสอบประสิทธิภาพของหน้าเว็บปัจจุบัน โดยใช้ JavaScript APIs ในการวัดค่าต่างๆ


DOM Load Time
-
milliseconds
Page Load Time
-
milliseconds
JS Heap Used
-
MB
Network Requests
-
requests
Total Size
-
KB
FPS (Estimated)
-
fps
📋 พร้อมใช้งาน คลิก "เริ่มตรวจสอบ" เพื่อวัดประสิทธิภาพ
💡 คำแนะนำ: เปิด Developer Tools (F12) → Performance Tab เพื่อดูรายละเอียดเพิ่มเติม

📝 ตัวอย่างโค้ด JavaScript สำหรับตรวจสอบประสิทธิภาพ

// 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();

📖 ขั้นตอนการใช้งาน JavaScript Performance Monitor

🔧 วิธีใช้งานเครื่องมือ

  1. คลิกปุ่ม "เริ่มตรวจสอบ" - เครื่องมือจะเก็บข้อมูลประสิทธิภาพเป็นเวลา 10 วินาที
  2. คลิกปุ่ม "วัดค่าปัจจุบัน" - วัดค่าประสิทธิภาพ ณ ขณะนั้น
  3. คลิกปุ่ม "จำลองโหลดหนัก" - ทดสอบระบบภายใต้ภาระงานสูง
  4. ดูผลลัพธ์ - ค่า metrics จะแสดงในช่องด้านบน และ logs จะแสดงในช่องบันทึก

💡 การตีความผลลัพธ์

  • DOM Load Time < 1000ms - ดีมาก, 1000-2000ms - ปานกลาง, > 2000ms - ควรปรับปรุง
  • Page Load Time < 3000ms - ดี, > 3000ms - ควรปรับปรุง
  • JS Heap Used - หากเพิ่มขึ้นอย่างต่อเนื่อง แสดงว่าอาจมี Memory Leak
  • FPS (Frame Per Second) - 60 fps คือเป้าหมาย, < 30 fps แสดงว่ามีปัญหาเรื่อง animation

💻 ภาคปฏิบัติ

📖 ขั้นตอนการใช้เครื่องมือ Monitor


Part 1: 🔧 Resource Monitor (Windows)


เปิดใช้งาน: Task Manager → Performance Tab → Open Resource Monitor หรือพิมพ์ "resmon" ใน Run dialog


Part 2: 🔧 Task Manager - Performance Tab

  • Real-time Graphs แสดงกราฟการใช้งานทรัพยากรแบบเรียลไทม์
  • Resource Utilization แสดงร้อยละการใช้งาน CPU, Memory, Disk, Network
  • Process Details แสดงรายละเอียดการใช้งานทรัพยากรของแต่ละกระบวนการ

Part 3: 🔧 Web-based Tools

เครื่องมือการใช้งานจุดเด่น
Google Lighthouseวิเคราะห์ประสิทธิภาพเว็บไซต์ให้คะแนนและคำแนะนำในการปรับปรุง
GTmetrixวิเคราะห์ความเร็วเว็บไซต์รายละเอียดการโหลดแต่ละองค์ประกอบ
WebPageTestทดสอบความเร็วเว็บไซต์ทดสอบจากหลายตำแหน่งและหลายเบราว์เซอร์

📝 แบบฝึกปฏิบัติ

🎯 กิจกรรมที่ 1: การตรวจสอบประสิทธิภาพด้วย Web Performance Monitor

  1. เปิดหน้าเว็บนี้และคลิกปุ่ม "เริ่มตรวจสอบ"
  2. สังเกตค่า DOM Load Time และ Page Load Time ที่แสดง
  3. คลิกปุ่ม "จำลองโหลดหนัก" และสังเกตการเปลี่ยนแปลงของค่า FPS
  4. บันทึกผลลัพธ์และวิเคราะห์ประสิทธิภาพของหน้าเว็บ

🎯 กิจกรรมที่ 2: การวิเคราะห์ประสิทธิภาพด้วย Developer Tools

  1. เปิด Developer Tools (F12) → Performance Tab
  2. คลิก Record และโหลดหน้าเว็บใหม่
  3. วิเคราะห์กราฟการทำงานของ CPU, Network, และ Frames
  4. ระบุจุดที่ใช้ทรัพยากรมากที่สุด

🎯 กิจกรรมที่ 3: การวิเคราะห์ประสิทธิภาพเว็บแอปพลิเคชัน

  1. เปิดเว็บแอปพลิเคชันที่พัฒนาขึ้นใน Google Chrome
  2. เปิด Developer Tools (F12) → Lighthouse Tab
  3. เลือกหมวดหมู่ Performance และคลิก "Generate Report"
  4. บันทึกคะแนนและข้อเสนอแนะที่ได้

🎯 กิจกรรมที่ 4: การเพิ่มประสิทธิภาพโปรเจกต์

  1. ระบุจุดที่ต้องปรับปรุงจากกิจกรรมที่ 1-3 (อย่างน้อย 2 จุด)
  2. วางแผนการปรับปรุงและดำเนินการ
  3. ทดสอบประสิทธิภาพอีกครั้งหลังการปรับปรุง
  4. เปรียบเทียบผลลัพธ์ก่อนและหลังการปรับปรุง

❓ คำถามทบทวน

  1. ตัวชี้วัดประสิทธิภาพหลัก (KPIs) ที่สำคัญในการตรวจสอบระบบมีอะไรบ้าง แต่ละตัวบอกอะไรเกี่ยวกับระบบ
  2. ปัญหา CPU Bound และ I/O Bound แตกต่างกันอย่างไร ยกตัวอย่างอาการที่สังเกตได้ของแต่ละประเภทปัญหา
  3. เครื่องมือใดบ้างที่ใช้ในการตรวจสอบประสิทธิภาพระบบในระดับต่างๆ (ระบบปฏิบัติการ, แอปพลิเคชัน, เครือข่าย)
  4. กระบวนการแก้ไขปัญหาประสิทธิภาพระบบมีขั้นตอนอะไรบ้าง อธิบายแต่ละขั้นตอนโดยสังเขป พร้อมยกตัวอย่างประกอบ
  5. จากกรณีศึกษาในบทเรียน การวิเคราะห์ด้วยเทคนิค 5 Whys พบสาเหตุที่แท้จริงของปัญหาคืออะไร และมีแนวทางแก้ไขอย่างไร
  6. จากกิจกรรมที่ 1 ค่า DOM Load Time และ Page Load Time ที่ได้เป็นเท่าใด อยู่ในเกณฑ์ดีหรือไม่

📊 เกณฑ์การประเมิน

รายการคะแนนหมายเหตุ
การมีส่วนร่วมในชั้นเรียน1%การถามคำถามหรือการแสดงความคิดเห็นเกี่ยวกับเนื้อหาที่เรียน
แบบทดสอบความเข้าใจในการเรียนรู้2%ทดสอบความเข้าใจเนื้อหาทฤษฎีและปฏิบัติ
กิจกรรมการตรวจสอบประสิทธิภาพ3%บันทึกผลการทดสอบและวิเคราะห์