วิธีระบุจุดคอขวดของเซิร์ฟเวอร์ แก้ไขจุดคอขวดอย่างรวดเร็ว ปรับปรุงประสิทธิภาพของเซิร์ฟเวอร์ และป้องกันการเกิดปัญหาซ้ำ
ภาพรวม
คู่มือนี้แสดงวิธีแก้ไขปัญหาเซิร์ฟเวอร์ที่มีภาระงานมากเกินไปใน 4 ขั้นตอน ดังนี้
- ประเมิน: ระบุจุดคอขวดของเซิร์ฟเวอร์
- ทำให้เสถียร: ใช้การแก้ไขด่วนเพื่อลดผลกระทบ
- ปรับปรุง: เพิ่มประสิทธิภาพและเพิ่มขีดความสามารถของเซิร์ฟเวอร์
- ตรวจสอบ: ใช้เครื่องมืออัตโนมัติเพื่อช่วยป้องกันปัญหาในอนาคต
ประเมิน
เมื่อการเข้าชมมีมากเกินกว่าที่เซิร์ฟเวอร์จะรองรับได้ สิ่งต่อไปนี้อย่างน้อย 1 อย่างอาจกลายเป็นจุดคอขวด ได้แก่ CPU, เครือข่าย, หน่วยความจํา หรือ I/O ของดิสก์ การระบุว่าปัญหาใดเป็นปัญหาคอขวดจะช่วยให้คุณมุ่งเน้นที่การบรรเทาปัญหาที่ได้ผลดีที่สุดได้
- CPU: ควรตรวจสอบและแก้ไขการใช้งาน CPU ที่มากกว่า 80% อย่างต่อเนื่อง ประสิทธิภาพของเซิร์ฟเวอร์มักจะลดลงเมื่อการใช้งาน CPU อยู่ที่ประมาณ 80-90% และยิ่งลดลงเมื่อการใช้งานใกล้ถึง 100% การใช้งาน CPU ของการแสดงคําขอเดียวนั้นแทบจะมองข้ามได้ แต่การทำเช่นนี้ในขนาดที่พบระหว่างการเข้าชมที่เพิ่มขึ้นอย่างรวดเร็วอาจทำให้เซิร์ฟเวอร์ทำงานหนักเกินไปในบางครั้ง การย้ายการส่งออกไปยังโครงสร้างพื้นฐานอื่นๆ การลดการดำเนินการที่มีค่าใช้จ่ายสูง และการจำกัดจำนวนคำขอจะช่วยลดการใช้งาน CPU
- เครือข่าย: ในช่วงที่มีการเข้าชมสูง ปริมาณข้อมูลของเครือข่ายที่จําเป็นเพื่อตอบสนองคําขอของผู้ใช้อาจเกินความจุ บางเว็บไซต์อาจมีการจำกัดการโอนข้อมูลสะสมด้วย ทั้งนี้ขึ้นอยู่กับผู้ให้บริการโฮสติ้ง การลดขนาดและปริมาณข้อมูลที่โอนไปยังและจากเซิร์ฟเวอร์จะช่วยขจัดปัญหาคอขวดนี้
- หน่วยความจํา: เมื่อระบบมีหน่วยความจําไม่เพียงพอ ระบบจะต้องย้ายข้อมูลไปยังดิสก์เพื่อจัดเก็บ การเข้าถึงดิสก์ช้ากว่าหน่วยความจํามาก ซึ่งอาจทําให้ทั้งแอปพลิเคชันช้าลง หากหน่วยความจําหมดลงอย่างสมบูรณ์ อาจส่งผลให้เกิดข้อผิดพลาดหน่วยความจําไม่เพียงพอ (OOM) การปรับการจัดสรรหน่วยความจำ การแก้ไขหน่วยความจำรั่วไหล และการอัปเกรดหน่วยความจำจะช่วยขจัดปัญหาคอขวดนี้ได้
- I/O ของดิสก์: อัตราการอ่านหรือเขียนข้อมูลจากดิสก์ถูกจำกัดโดยตัวดิสก์เอง หาก I/O ของดิสก์เป็นปัญหาคอขวด การเพิ่มปริมาณข้อมูลที่แคชไว้ในหน่วยความจําจะช่วยบรรเทาปัญหานี้ได้ (แต่อาจทำให้หน่วยความจํามีการใช้งานมากขึ้น) หากไม่ได้ผล คุณอาจต้องอัปเกรดดิสก์
เทคนิคในคู่มือนี้มุ่งเน้นที่การแก้ปัญหาคอขวดของ CPU และเครือข่าย สําหรับเว็บไซต์ส่วนใหญ่ CPU และเครือข่ายจะเป็นจุดคอขวดที่เกี่ยวข้องมากที่สุดในช่วงที่การเข้าชมเพิ่มขึ้น
การเรียกใช้ top
ในเซิร์ฟเวอร์ที่ได้รับผลกระทบเป็นจุดเริ่มต้นที่ดีในการตรวจสอบปัญหาคอขวด เสริมข้อมูลนี้ด้วยข้อมูลย้อนหลังจากผู้ให้บริการโฮสติ้งหรือเครื่องมือตรวจสอบ (หากมี)
แก้ภาพสั่น
เซิร์ฟเวอร์ที่มีภาระงานมากเกินไปอาจทําให้ระบบส่วนอื่นๆ เกิดความล้มเหลวเป็นลูกโซ่ได้อย่างรวดเร็ว ดังนั้น คุณจึงควรทำให้เซิร์ฟเวอร์ทำงานได้อย่างเสถียรก่อนที่จะพยายามทำการเปลี่ยนแปลงที่สำคัญๆ เพิ่มเติม
การจำกัดอัตรา
การจำกัดอัตราการส่งข้อมูลช่วยปกป้องโครงสร้างพื้นฐานด้วยการจำกัดจำนวนคำขอขาเข้า เรื่องนี้มีความสําคัญมากขึ้นเมื่อประสิทธิภาพของเซิร์ฟเวอร์ลดลง เนื่องจากเวลาในการตอบสนองที่เพิ่มขึ้นทําให้ผู้ใช้มีแนวโน้มที่จะรีเฟรชหน้าเว็บอย่างรุนแรง ซึ่งจะเพิ่มภาระของเซิร์ฟเวอร์มากขึ้นไปอีก
แก้ไข
แม้ว่าการปฏิเสธคำขอจะค่อนข้างประหยัด แต่วิธีที่ดีที่สุดในการปกป้องเซิร์ฟเวอร์คือการจำกัดอัตราการส่งคำขอที่ต้นทาง เช่น ผ่านตัวกระจายโหลด พร็อกซีย้อนกลับ หรือ CDN
วิธีการ
อ่านเพิ่มเติม
การแคช HTTP
มองหาวิธีแคชเนื้อหาอย่างมีประสิทธิภาพมากขึ้น หากทรัพยากรแสดงจากแคช HTTP ได้ (ไม่ว่าจะเป็นแคชของเบราว์เซอร์หรือ CDN) ก็ไม่จำเป็นต้องขอจากเซิร์ฟเวอร์ต้นทาง ซึ่งจะช่วยลดภาระของเซิร์ฟเวอร์
ส่วนหัว HTTP เช่น Cache-Control
, Expires
และ ETag
จะระบุวิธีที่แคช HTTP ควรแคชทรัพยากร การตรวจสอบและการแก้ไขส่วนหัวเหล่านี้จะช่วยปรับปรุงการแคช
แม้ว่าService Worker จะใช้สำหรับการแคชได้เช่นกัน แต่จะใช้แคชแยกต่างหากและเป็นเพียงส่วนเสริม ไม่ใช่การแทนที่สำหรับการแคช HTTP อย่างเหมาะสม ด้วยเหตุนี้ เมื่อจัดการกับเซิร์ฟเวอร์ที่ทำงานหนักเกินไป คุณควรมุ่งเน้นที่การเพิ่มประสิทธิภาพการแคช HTTP
วินิจฉัย
เรียกใช้ Lighthouse และดูการตรวจสอบแสดงเนื้อหาแบบคงที่ที่มีนโยบายแคชที่มีประสิทธิภาพเพื่อดูรายการทรัพยากรที่มี Time To Live (TTL) สั้นถึงปานกลาง พิจารณาว่าควรเพิ่ม TTL สำหรับทรัพยากรแต่ละรายการที่แสดงหรือไม่ หลักเกณฑ์คร่าวๆ มีดังนี้
- ทรัพยากรแบบคงที่ควรแคชด้วย TTL แบบยาว (1 ปี)
- ทรัพยากรแบบไดนามิกควรแคชโดยใช้ TTL สั้นๆ (3 ชั่วโมง)
แก้ไข
ตั้งค่าคําสั่ง max-age
ของส่วนหัว Cache-Control
เป็นจํานวนวินาทีที่เหมาะสม
วิธีการ
การลดลงอย่างค่อยเป็นค่อยไป
การลดระดับอย่างมีชั้นเชิงเป็นกลยุทธ์ในการลดฟังก์ชันการทำงานชั่วคราวเพื่อลดภาระงานส่วนเกินออกจากระบบ แนวคิดนี้ใช้ได้หลายวิธี เช่น การแสดงหน้าข้อความแบบคงที่แทนแอปพลิเคชันที่มีฟีเจอร์ครบครัน การปิดใช้การค้นหาหรือแสดงผลการค้นหาน้อยลง หรือการปิดใช้ฟีเจอร์บางอย่างที่ราคาแพงหรือไม่จำเป็น ควรเน้นที่การนำฟังก์ชันการทำงานที่นําออกได้อย่างปลอดภัยและง่ายดายโดยส่งผลกระทบต่อธุรกิจน้อยที่สุด
ปรับปรุง
ใช้เครือข่ายนำส่งข้อมูล (CDN)
คุณสามารถย้ายการแสดงผลชิ้นงานแบบคงที่จากเซิร์ฟเวอร์ไปยังเครือข่ายนำส่งข้อมูล (CDN) ซึ่งจะช่วยลดภาระงานได้
ฟังก์ชันหลักของ CDN คือการนำส่งเนื้อหาไปยังผู้ใช้อย่างรวดเร็วด้วยเครือข่ายเซิร์ฟเวอร์ขนาดใหญ่ที่อยู่ใกล้กับผู้ใช้ อย่างไรก็ตาม CDN ส่วนใหญ่ยังมีฟีเจอร์เพิ่มเติมที่เกี่ยวข้องกับประสิทธิภาพ เช่น การบีบอัด การปรับสมดุลภาระ และการเพิ่มประสิทธิภาพสื่อ
ตั้งค่า CDN
CDN มีประโยชน์จากการปรับขนาด ดังนั้นการดําเนินการ CDN ของคุณเองจึงไม่ค่อยมีเหตุผล การกําหนดค่า CDN พื้นฐานจะตั้งค่าได้ค่อนข้างเร็ว (~30 นาที) และประกอบด้วยการอัปเดตระเบียน DNS ให้ชี้ไปยัง CDN
เพิ่มประสิทธิภาพการใช้งาน CDN
วินิจฉัย
ระบุทรัพยากรที่ไม่ได้แสดงจาก CDN (แต่ควรแสดง) โดยเรียกใช้ WebPageTest ในหน้าผลลัพธ์ ให้คลิกสี่เหลี่ยมจัตุรัสเหนือ "การใช้ CDN อย่างมีประสิทธิภาพ" เพื่อดูรายการทรัพยากรที่ควรแสดงจาก CDN

แก้ไข
หาก CDN ไม่ได้แคชทรัพยากร ให้ตรวจสอบว่าเป็นไปตามเงื่อนไขต่อไปนี้
- มีส่วนหัว
Cache-Control: public
- มีส่วนหัว
Cache-Control: s-maxage
,Cache-Control: max-age
หรือExpires
- มี
Content-Length
,Content-Range
หรือTransfer-Encoding header
ปรับขนาดทรัพยากรการประมวลผล
คุณควรตัดสินใจปรับขนาดทรัพยากรการประมวลผลอย่างรอบคอบ แม้ว่าการปรับขนาดทรัพยากรการประมวลผลมักจะเป็นสิ่งที่จำเป็น แต่การปรับขนาดก่อนเวลาอันควรอาจทําให้สถาปัตยกรรมมีความซับซ้อนและค่าใช้จ่ายทางการเงินที่ไม่จําเป็น
วินิจฉัย
Time To First Byte (TTFB) ที่สูงอาจเป็นสัญญาณว่าเซิร์ฟเวอร์ใกล้จะถึงขีดจํากัด คุณดูข้อมูลนี้ได้ในการตรวจสอบลดเวลาในการตอบกลับของเซิร์ฟเวอร์ (TTFB) ของ Lighthouse
หากต้องการตรวจสอบเพิ่มเติม ให้ใช้เครื่องมือตรวจสอบเพื่อประเมินการใช้งาน CPU หากการใช้งาน CPU ปัจจุบันหรือที่คาดไว้เกิน 80% คุณควรพิจารณาเพิ่มเซิร์ฟเวอร์
แก้ไข
การเพิ่มตัวจัดสรรภาระงานช่วยให้คุณกระจายการรับส่งข้อมูลไปยังหลายๆ เซิร์ฟเวอร์ได้ ตัวจัดสรรภาระงานจะอยู่ที่ด้านหน้ากลุ่มเซิร์ฟเวอร์และกำหนดเส้นทางการรับส่งข้อมูลไปยังเซิร์ฟเวอร์ที่เหมาะสม ผู้ให้บริการระบบคลาวด์มีตัวจัดสรรภาระงานของตนเอง (GCP, AWS, Azure) หรือคุณจะตั้งค่าตัวจัดสรรภาระงานของคุณเองโดยใช้ HAProxy หรือ NGINX ก็ได้ เมื่อติดตั้งโปรแกรมกระจายภาระแล้ว คุณจะเพิ่มเซิร์ฟเวอร์ได้
นอกจากการจัดสรรภาระงานแล้ว ผู้ให้บริการระบบคลาวด์ส่วนใหญ่ยังมีการปรับขนาดอัตโนมัติ (GCP, AWS, Azure) การปรับขนาดอัตโนมัติทำงานร่วมกับการจัดสรรภาระงาน โดยการปรับขนาดอัตโนมัติจะปรับทรัพยากรการประมวลผลให้เพิ่มขึ้นหรือลดลงตามดีมานด์ที่กำหนดในเวลาหนึ่งๆ โดยอัตโนมัติ อย่างไรก็ตาม การปรับขนาดอัตโนมัติไม่ใช่เวทมนตร์ อินสแตนซ์ใหม่ต้องใช้เวลาในการออนไลน์และต้องมีการกําหนดค่าที่สําคัญ เนื่องจากการปรับขนาดอัตโนมัติมีความซับซ้อนมากขึ้น คุณจึงควรพิจารณาการตั้งค่าที่ใช้โหลดบาลานเซอร์ซึ่งง่ายกว่าก่อน
เปิดใช้งานการบีบอัด
ทรัพยากรแบบข้อความควรได้รับการบีบอัดโดยใช้ gzip หรือ Brotli Gzip ช่วยลดขนาดการโอนของทรัพยากรเหล่านี้ได้ประมาณ 70%
วินิจฉัย
ใช้การตรวจสอบเปิดใช้การบีบอัดข้อความของ Lighthouse เพื่อระบุทรัพยากรที่ควรบีบอัด
แก้ไข
เปิดใช้การบีบอัดโดยการอัปเดตการกำหนดค่าเซิร์ฟเวอร์ วิธีการ
เพิ่มประสิทธิภาพรูปภาพและสื่อ
รูปภาพมีสัดส่วนมากที่สุดในขนาดไฟล์ของเว็บไซต์ส่วนใหญ่ การเพิ่มประสิทธิภาพรูปภาพจึงช่วยลดขนาดเว็บไซต์ได้อย่างรวดเร็วและมาก
วินิจฉัย
Lighthouse มีการตรวจสอบหลายประเภทที่แจ้งว่าควรเพิ่มประสิทธิภาพรูปภาพ อีกทางเลือกหนึ่งคือการใช้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์เพื่อระบุไฟล์รูปภาพที่ใหญ่ที่สุด ซึ่งรูปภาพเหล่านี้มีแนวโน้มที่จะเหมาะสําหรับการเพิ่มประสิทธิภาพ
การตรวจสอบ Lighthouse ที่เกี่ยวข้อง
- ปรับขนาดรูปภาพให้เหมาะสม
- เลื่อนเวลาโหลดรูปภาพนอกจอภาพ
- เข้ารหัสรูปภาพอย่างมีประสิทธิภาพ
- แสดงรูปภาพในรูปแบบสมัยใหม่
- ใช้รูปแบบวิดีโอสำหรับเนื้อหาภาพเคลื่อนไหว
เวิร์กโฟลว์ของเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome
- บันทึกกิจกรรมในเครือข่าย
- คลิก Img เพื่อกรองทรัพยากรที่ไม่ใช่รูปภาพออก
- คลิกคอลัมน์ขนาดเพื่อจัดเรียงไฟล์รูปภาพตามขนาด
แก้ไข
หากมีเวลาจำกัด
มุ่งเน้นที่การระบุรูปภาพขนาดใหญ่ที่โหลดบ่อยและเพิ่มประสิทธิภาพด้วยตนเองด้วยเครื่องมืออย่าง Squoosh รูปภาพหลักมักเป็นตัวเลือกที่ดีสำหรับการเพิ่มประสิทธิภาพ
สิ่งสำคัญที่ต้องคำนึงถึงมีดังนี้
- ขนาด: รูปภาพควรมีขนาดไม่ใหญ่เกินความจำเป็น
- การบีบอัด: โดยทั่วไปแล้ว ระดับคุณภาพ 80-85 จะมีผลต่อคุณภาพของรูปภาพน้อยที่สุด ขณะที่ทำให้ขนาดไฟล์ลดลง 30-40%
- รูปแบบ: ใช้ JPEG สำหรับรูปภาพแทน PNG และใช้ MP4 สำหรับเนื้อหาที่เป็นภาพเคลื่อนไหวแทน GIF
หากมีเวลามากขึ้น…
ลองตั้งค่า CDN สำหรับรูปภาพหากรูปภาพเป็นส่วนสำคัญของเว็บไซต์ CDN สำหรับรูปภาพออกแบบมาเพื่อแสดงและเพิ่มประสิทธิภาพรูปภาพ และจะแบ่งเบาภาระการแสดงรูปภาพจากเซิร์ฟเวอร์ต้นทาง การตั้งค่า CDN รูปภาพนั้นง่าย แต่ต้องอัปเดต URL รูปภาพที่มีอยู่ให้ชี้ไปยัง CDN รูปภาพ
อ่านเพิ่มเติม
ลดขนาด JS และ CSS
การลดขนาดจะนําอักขระที่ไม่จําเป็นออกจาก JavaScript และ CSS
วินิจฉัย
ใช้การตรวจสอบ Minify CSS และ Minify JavaScript ของ Lighthouse เพื่อระบุแหล่งข้อมูลที่จําเป็นต้องลดขนาด
แก้ไข
หากมีเวลาจำกัด ให้มุ่งเน้นที่การลดขนาด JavaScript เว็บไซต์ส่วนใหญ่มี JavaScript มากกว่า CSS ดังนั้นการดำเนินการนี้จะส่งผลมากกว่า
ติดตามดู
เครื่องมือตรวจสอบเซิร์ฟเวอร์จะเก็บรวบรวมข้อมูล แดชบอร์ด และการแจ้งเตือนเกี่ยวกับประสิทธิภาพของเซิร์ฟเวอร์ การใช้งานจะช่วยป้องกันและบรรเทาปัญหาด้านประสิทธิภาพของเซิร์ฟเวอร์ในอนาคต
การตั้งค่าการตรวจสอบควรเรียบง่ายที่สุด การรวบรวมและการแจ้งเตือนข้อมูลมากเกินไปมีค่าใช้จ่าย: ยิ่งขอบเขตหรือความถี่ในการรวบรวมข้อมูลมากเท่าใด การเก็บรวบรวมและจัดเก็บข้อมูลก็ยิ่งมีค่าใช้จ่ายมากขึ้นเท่านั้น การแจ้งเตือนมากเกินไปจะทําให้หน้าเว็บถูกละเว้นอย่างหลีกเลี่ยงไม่ได้
การแจ้งเตือนควรใช้เมตริกที่ตรวจหาปัญหาได้อย่างแม่นยำและสอดคล้องกัน เวลาในการตอบสนองของเซิร์ฟเวอร์ (เวลาในการตอบสนอง) คือเมตริกที่เหมาะสําหรับกรณีนี้อย่างยิ่ง เนื่องจากจะตรวจพบปัญหาที่หลากหลายและเชื่อมโยงกับประสบการณ์ของผู้ใช้โดยตรง การแจ้งเตือนตามเมตริกระดับล่าง เช่น การใช้งาน CPU อาจเป็นข้อมูลเสริมที่มีประโยชน์ แต่อาจตรวจพบปัญหาได้น้อยลง นอกจากนี้ การแจ้งเตือนควรอิงตามประสิทธิภาพที่สังเกตได้ในช่วงท้าย (หรือก็คือเปอร์เซ็นไทล์ที่ 95 หรือ 99) ไม่ใช่ค่าเฉลี่ย ไม่เช่นนั้น ค่าเฉลี่ยอาจบดบังปัญหาที่ไม่ส่งผลกระทบต่อผู้ใช้บางราย
แก้ไข
ผู้ให้บริการระบบคลาวด์รายใหญ่ทุกรายมีเครื่องมือตรวจสอบของตนเอง (GCP, AWS, Azure) นอกจากนี้ Netdata ยังเป็นทางเลือกที่ยอดเยี่ยมแบบโอเพนซอร์สและใช้งานได้ฟรี ไม่ว่าคุณจะเลือกเครื่องมือใด คุณจะต้องติดตั้งตัวแทนการตรวจสอบของเครื่องมือนั้นในเซิร์ฟเวอร์แต่ละเครื่องที่ต้องการตรวจสอบ เมื่อเสร็จแล้ว ให้ตั้งค่าการแจ้งเตือน
วิธีการ