CLOUD PAAS / APPLICATION SETTINGS

ความละเอียดของ 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

คำแนะนำทั่วไป

  1. หากใช้ InnoDB engine (ฝังตั้งแต่ MySQL เวอร์ชัน 5.5) ให้ตรวจสอบขนาดบัฟเฟอร์ด้วยคำสั่งนี้:
    แสดงสถานะเครื่องยนต์ INNODB\G;
    ในกรณีที่มีค่าบัฟเฟอร์สูง (มากกว่า 80% ของ RAM คอนเทนเนอร์ทั้งหมด) ให้คุณลดขนาดของ pool ที่อนุญาตด้วยพารามิเตอร์ innodb_buffer_pool_size ในไฟล์/etc/my.cnfมิฉะนั้น ให้จัดสรร RAM เพิ่มเติมให้กับเซิร์ฟเวอร์
  2. ตรวจสอบ 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 จึงแตกต่างกันไปและขึ้นอยู่กับกระบวนการ - ดูตารางด้านล่างเพื่อหาคำแนะนำที่เหมาะสม