ความละเอียดของ OOM Killer: กระบวนการที่มีความเสี่ยงสูงที่หน่วยความจำจะรั่ว
คู่มือนี้เรียบเรียงและปรับรูปแบบสำหรับ Ruk-Com Cloud PaaS ภาพหน้าจออาจแตกต่างเล็กน้อยตามเวอร์ชันของระบบ
คลิกหรือแตะภาพหน้าจอเพื่อดูรายละเอียดขนาดจริง
วัตถุประสงค์
บทความนี้อธิบายการใช้งาน ความละเอียดของ OOM Killer: กระบวนการที่มีความเสี่ยงสูงที่หน่วยความจำจะรั่ว บน Ruk-Com Cloud PaaS โดยจัดลำดับขั้นตอนและจุดตรวจสอบสำหรับการนำไปใช้งานจริง
ก่อนเริ่มดำเนินการ
- เข้าสู่ระบบด้วยบัญชีที่มีสิทธิ์จัดการ Environment ที่เกี่ยวข้อง
- ตรวจสอบชื่อ Environment, Region และทรัพยากรเป้าหมายก่อนบันทึกการเปลี่ยนแปลง
- สำรองข้อมูลหรือกำหนดแผนย้อนกลับก่อนแก้ไขระบบ Production
กระบวนการในกลุ่มเหล่านี้ส่วนใหญ่เป็นสาเหตุของปัญหาหน่วยความจำไม่เพียงพอ (เรียงตามบทบาทของเซิร์ฟเวอร์):
โหลดบาลานเซอร์
จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง - บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
แอปพลิเคชันเซิร์ฟเวอร์
รายการด้านล่างจะแสดงคำแนะนำทั่วไปเกี่ยวกับการจัดการปัญหาหน่วยความจำไม่เพียงพอ โดยพิจารณาจากภาษาโปรแกรมที่ใช้ตลอดจนวิธีแก้ไขที่เหมาะสมสำหรับกระบวนการที่เกี่ยวข้องกับความต้องการมากที่สุด:
- ชวา
คำแนะนำทั่วไป
ตรวจสอบการกำหนดค่าการจัดการหน่วยความจำหลักสำหรับเครื่อง Java ของคุณและหากจำเป็นให้ปรับเปลี่ยนตามความต้องการของแอปพลิเคชันของคุณ เช่น:
ชวา -Xmx2048m -Xms256m
โดยที่: - เอ็กซ์เอ็มเอ็กซ์flag ระบุหน่วยความจำฮีปหน่วยความจำสูงสุดที่สามารถจัดสรรให้กับ Java Virtual Machine (JVM)
- Xmsflag กำหนดสระว่ายน้ำการจัดสรรหน่วยความจำเริ่มต้น
อ้างอิงถึงเอกสารอย่างเป็นทางการสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการจัดการหน่วยความจำจาวาระบบ
เคล็ดลับ:Ruk-Com Cloud ยังใช้การจัดการหน่วยความจำแบบอัตโนมัติที่ช่วยเสริม Java container โดยใช้คนเก็บขยะคุณสามารถปรับแต่งการตั้งค่าได้โดยพิจารณาจากแอปพลิเคชันของคุณโดยเฉพาะเพื่อหลีกเลี่ยงปัญหา OOM และใช้หน่วยความจำอย่างมีประสิทธิภาพมากขึ้น
นอกจากนี้ พิจารณาด้วยว่า JVM ต้องการหน่วยความจำที่มากกว่า heap - อ่านโครงสร้างหน่วยความจำ Javaเพิ่มเติมเพื่อรับข้อมูลเชิงลึกที่ลึกซึ้งยิ่งขึ้น
- PHP
คำแนะนำทั่วไป
1. หากเกิดปัญหาขึ้นกับบริการของ httpd (httpd.itk) ให้ปรับพารามิเตอร์การจัดการหน่วยความจำเซิร์ฟเวอร์ดังนี้
- ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละhttpdอินสแตนซ์
- ลบเครื่องหมายการกำหนดค่าอัตโนมัติของ Jelasticภานในไฟล์/etc/httpd/httpd.conf
- ลดค่าเซิร์ฟเวอร์จำกัดและMaxClientsตามที่กำหนด:(Total_RAM - 5%) / Average_RAM
เพิ่มเติม:ในกรณีที่คุณสังเกตเห็นการเติบโตของการใช้หน่วยความจำต่ออินสแตนซ์ (การรั่วไหล) อย่างต่อเนื่องคุณจะต้องลดค่าMaxRequestsPerChild(เหลือประมาณ 1, 000-5, 000)
2. สำหรับกระบวนการ NGINX ให้เชื่อมต่อกับคอนเทนเนอร์ของคุณผ่าน SSH และตรวจสอบขนาดของอินสแตนซ์ php-fpm (เช่น ps หรือเครื่องมือชั้นนำ):
- หากใช้ RAM ทั้งหมด ~ 50-100Mb ให้ปิดใช้งานการกำหนดค่าอัตโนมัติและลดพารามิเตอร์ max_children
- หากขนาดของอินสแตนซ์แตกต่างกันอย่างมากหรือมากกว่า 200-300Mb กระบวนการอาจจะรั่ว คุณต้องตรวจสอบและเพิ่มประสิทธิภาพโค้ดหรือปิด การกำหนดค่าอัตโนมัติและลดพารามิเตอร์ max_requests_per_child
- ทับทิม
คำแนะนำทั่วไป
ปัญหาหน่วยความจำรั่วเป็นเรื่องปกติสำหรับ Ruby ดังนั้นสิ่งแรกที่ควรทำคือพิจารณาตรวจสอบและเพิ่มประสิทธิภาพโค้ดของคุณหรือลองเพิ่มขีดจำกัด RAM สำหรับอินสแตนซ์
- หลาม
คำแนะนำทั่วไป
1. หากเกิดปัญหาขึ้นกับบริการของ httpd (httpd.itk) ให้ปรับพารามิเตอร์การจัดการหน่วยความจำเซิร์ฟเวอร์ดังนี้:
- ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยแต่ละอินสแตนซ์
- ลบเครื่องหมายการกำหนดค่าอัตโนมัติของ Jelasticภานในไฟล์/etc/httpd/httpd.conf
- ลดค่าเซิร์ฟเวอร์จำกัด และMaxClientsตามที่กำหนด:(Total_RAM - 5%) / Average_RAM
เพิ่มเติม:ในกรณีที่คุณสังเกตเห็นการเติบโตของการใช้หน่วยความจำต่ออินสแตนซ์ (การรั่วไหล) อย่างต่อเนื่องคุณจะต้องลดค่าMaxRequestsPerChild(เหลือประมาณ 1, 000-5, 000)
2. อีกทางหนึ่งให้จัดสรร RAM เพิ่มเติมให้กับ node - กระบวนการหลักของ Python อาจต้องการหน่วยความจำเพิ่มขึ้นสำหรับการทำงานปกติ
- โหนดJS
คำแนะนำทั่วไป
รีสตาร์ทคอนเทนเนอร์เพื่อกู้คืน kill process(es) หากปัญหาเกิดซ้ำอีก - ให้จัดสรร RAM เพิ่มเติมให้กับ node แอปพลิเคชันอาจต้องการหน่วยความจำเพิ่มขึ้นสำหรับการทำงานปกติ
เซิร์ฟเวอร์ฐานข้อมูล
รายการด้านล่างจะแสดง DB สแต็กพร้อมกับคำแนะนำทั่วไปเกี่ยวกับปัญหา OOM ตลอดจนวิธีการแก้ไขสำหรับ killed processes โดยเฉพาะ
- MySQL
คำแนะนำทั่วไป
- หากใช้ InnoDB engine (ฝังตั้งแต่ MySQL เวอร์ชัน 5.5) ให้ตรวจสอบขนาดบัฟเฟอร์ด้วยคำสั่งนี้:
แสดงสถานะเครื่องยนต์ INNODB\G;
ในกรณีที่มีค่าบัฟเฟอร์สูง (มากกว่า 80% ของ RAM คอนเทนเนอร์ทั้งหมด) ให้คุณลดขนาดของ pool ที่อนุญาตด้วยพารามิเตอร์ innodb_buffer_pool_size ในไฟล์/etc/my.cnfมิฉะนั้น ให้จัดสรร RAM เพิ่มเติมให้กับเซิร์ฟเวอร์ - ตรวจสอบ MySQL log เพื่อดูคำเตือนและคำแนะนำ
- MongoDB
คำแนะนำทั่วไป
หากเกิดปัญหาขึ้นกับบริการของhttpdให้ปรับพารามิเตอร์การจัดการหน่วยความจำเซิร์ฟเวอร์ดังนี้:
- ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยแต่ละอินสแตนซ์
- ลบเครื่องหมายการกำหนดค่าอัตโนมัติของ Jelasticภานในไฟล์/etc/httpd/httpd.conf
- ลดค่า เซิร์ฟเวอร์จำกัดและMaxClientsตามที่กำหนด:(Total_RAM - 5%) / Average_RAM
เพิ่มเติม:ในกรณีที่คุณสังเกตเห็นการเติบโตของการใช้หน่วยความจำต่ออินสแตนซ์ (การรั่วไหล) อย่างต่อเนื่องคุณจะต้องลดค่าMaxRequestsPerChild(เหลือประมาณ 1, 000-5, 000)
- PostgreSQL
คำแนะนำทั่วไป
จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง - บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
- เรดิส
คำแนะนำทั่วไป
จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง - บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
การดำเนินการทั่วไปสำหรับสแต็กประเภทต่างๆ
คำแนะนำทั่วไป
กระบวนการในส่วนนี้สามารถรันได้และต่อมาจะถูกทำลายภายในโหนดประเภทต่างๆ ดังนั้นการแก้ปัญหาของ OOM จึงแตกต่างกันไปและขึ้นอยู่กับกระบวนการ - ดูตารางด้านล่างเพื่อหาคำแนะนำที่เหมาะสม