OOM Killer Resolutions: Processes with High Risk of Memory Leak

กระบวนการในกลุ่มเหล่านี้ส่วนใหญ่เป็นสาเหตุของปัญหาหน่วยความจำไม่เพียงพอ (เรียงตามบทบาทของเซิร์ฟเวอร์):

Load Balancers

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

จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ

การดำเนินการที่เกี่ยวข้อง
ProcessResolution
varnishd จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ

Application Servers

รายการด้านล่างจะแสดงคำแนะนำทั่วไปเกี่ยวกับการจัดการปัญหาหน่วยความจำไม่เพียงพอ โดยพิจารณาจากภาษาโปรแกรมที่ใช้ตลอดจนวิธีแก้ไขที่เหมาะสมสำหรับกระบวนการที่เกี่ยวข้องกับความต้องการมากที่สุด:

  • Java
    คำแนะนำทั่วไป
    ตรวจสอบการกำหนดค่าการจัดการหน่วยความจำหลักสำหรับเครื่อง Java ของคุณและหากจำเป็นให้ปรับเปลี่ยนตามความต้องการของแอปพลิเคชันของคุณ เช่น:

    java -Xmx2048m -Xms256m

    โดยที่:
    • Xmx flag ระบุหน่วยความจำ memory heap สูงสุดที่สามารถจัดสรรให้กับ Java Virtual Machine (JVM)
    • Xms flag กำหนด pool การจัดสรรหน่วยความจำเริ่มต้น
      อ้างอิงถึงเอกสารอย่างเป็นทางการสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Java memory management system

เคล็ดลับ: Ruk-Com Cloud ยังใช้การจัดการหน่วยความจำแบบอัตโนมัติที่ช่วยเสริม Java container โดยใช้ Garbage Collector คุณสามารถปรับแต่งการตั้งค่าได้โดยพิจารณาจากแอปพลิเคชันของคุณโดยเฉพาะเพื่อหลีกเลี่ยงปัญหา OOM และใช้หน่วยความจำอย่างมีประสิทธิภาพมากขึ้น
นอกจากนี้ พิจารณาด้วยว่า JVM ต้องการหน่วยความจำที่มากกว่า heap – อ่านโครงสร้างหน่วยความจำ Java เพิ่มเติมเพื่อรับข้อมูลเชิงลึกที่ลึกซึ้งยิ่งขึ้น

การดำเนินการที่เกี่ยวข้อง
ProcessResolution
java ตรวจสอบพารามิเตอร์ xmx, xms, xmn ที่เครื่อง Java ของคุณและกำหนดค่าตามที่แอปพลิเคชันคุณต้องการ
  • PHP

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

1. หากเกิดปัญหาขึ้นกับบริการของ httpd (httpd.itk) ให้ปรับพารามิเตอร์การจัดการหน่วยความจำเซิร์ฟเวอร์ดังนี้

– ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์

– ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf

– ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM

เพิ่มเติม: ในกรณีที่คุณสังเกตเห็นการเติบโตของการใช้หน่วยความจำต่ออินสแตนซ์ (การรั่วไหล) อย่างต่อเนื่องคุณจะต้องลดค่า MaxRequestsPerChild (เหลือประมาณ 1,000-5,000)

2. สำหรับกระบวนการ nginx ให้เชื่อมต่อกับคอนเทนเนอร์ของคุณผ่าน SSH และตรวจสอบขนาดของอินสแตนซ์ php-fpm (เช่น ps หรือเครื่องมือชั้นนำ):
– หากใช้ RAM ทั้งหมด ~ 50-100Mb ให้ปิดใช้งาน auto configuration และลดพารามิเตอร์ max_children

– หากขนาดของอินสแตนซ์แตกต่างกันอย่างมากหรือมากกว่า 200-300Mb กระบวนการอาจจะรั่ว คุณต้องตรวจสอบและเพิ่มประสิทธิภาพโค้ดหรือปิด auto configuration และลดพารามิเตอร์ max_requests_per_child

การดำเนินการที่เกี่ยวข้อง
ProcessResolution
httpd1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์
2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf
3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM
lsyncdจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
httpd.itk1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์
2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf
3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM
nginxปิดใช้งาน auto configuration และปรับพารามิเตอร์ให้เหมาะสมกับแอปพลิเคชันของคุณ
phpปิดใช้งาน auto configuration และปรับพารามิเตอร์ให้เหมาะสมกับแอปพลิเคชันของคุณ
php-fpmปิดใช้งาน auto configuration และปรับพารามิเตอร์ให้เหมาะสมกับแอปพลิเคชันของคุณ
php-fpm7.0ปิดใช้งาน auto configuration และปรับพารามิเตอร์ให้เหมาะสมกับแอปพลิเคชันของคุณ
php7.0ปิดใช้งาน auto configuration และปรับพารามิเตอร์ให้เหมาะสมกับแอปพลิเคชันของคุณ
  • Ruby

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

ปัญหาหน่วยความจำรั่วเป็นเรื่องปกติสำหรับ Ruby ดังนั้นสิ่งแรกที่ควรทำคือพิจารณาตรวจสอบและเพิ่มประสิทธิภาพโค้ดของคุณหรือลองเพิ่มขีดจำกัด RAM สำหรับอินสแตนซ์

การดำเนินการที่เกี่ยวข้อง
ProcessResolution
httpd1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์
2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf
3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM
httpd.itk1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์
2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf
3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM
bundleจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
gemจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
rubyพิจารณาตรวจสอบและเพิ่มประสิทธิภาพโค้ดของคุณหรือเพิ่ม RAM ให้กับ node
  • Python

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

1. หากเกิดปัญหาขึ้นกับบริการของ httpd (httpd.itk) ให้ปรับพารามิเตอร์การจัดการหน่วยความจำเซิร์ฟเวอร์ดังนี้:

– ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยแต่ละอินสแตนซ์

– ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf

– ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM

เพิ่มเติม: ในกรณีที่คุณสังเกตเห็นการเติบโตของการใช้หน่วยความจำต่ออินสแตนซ์ (การรั่วไหล) อย่างต่อเนื่องคุณจะต้องลดค่า MaxRequestsPerChild (เหลือประมาณ 1,000-5,000)

2. อีกทางหนึ่งให้จัดสรร RAM เพิ่มเติมให้กับ node – กระบวนการหลักของ Python อาจต้องการหน่วยความจำเพิ่มขึ้นสำหรับการทำงานปกติ

การดำเนินการที่เกี่ยวข้อง
ProcessResolution
httpd1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์
2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf
3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM
lsyncdจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
httpd.itk1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์
2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf
3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM
pipอาจเกิดจากปัญหาที่เครือข่าย (ทำให้กระบวนการดาวน์โหลดติดขัด) อีกทางหนึ่งให้จัดสรร RAM เพิ่มเติมให้กับ node – แอปพลิเคชันอาจต้องการหน่วยความจำเพิ่มขึ้นสำหรับการทำงานปกติ
pythonจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
python2.7จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
  • NodeJS

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

รีสตาร์ทคอนเทนเนอร์เพื่อกู้คืน kill process(es) หากปัญหาเกิดซ้ำอีก – ให้จัดสรร RAM เพิ่มเติมให้กับ node แอปพลิเคชันอาจต้องการหน่วยความจำเพิ่มขึ้นสำหรับการทำงานปกติ

การดำเนินการที่เกี่ยวข้อง
ProcessResolution
lsyncdจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
gruntจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
nodeจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
npmจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
phantomjsจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ

Database Servers

รายการด้านล่างจะแสดง DB สแต็กพร้อมกับคำแนะนำทั่วไปเกี่ยวกับปัญหา OOM ตลอดจนวิธีการแก้ไขสำหรับ killed processes โดยเฉพาะ

  • MySQL

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

  1. หากใช้ InnoDB engine (ฝังตั้งแต่ MySQL เวอร์ชัน 5.5) ให้ตรวจสอบขนาดบัฟเฟอร์ด้วยคำสั่งนี้:
    SHOW ENGINE INNODB STATUS\G;
    ในกรณีที่มีค่าบัฟเฟอร์สูง (มากกว่า 80% ของ RAM คอนเทนเนอร์ทั้งหมด) ให้คุณลดขนาดของ pool ที่อนุญาตด้วยพารามิเตอร์ innodb_buffer_pool_size ในไฟล์ /etc/my.cnf มิฉะนั้น ให้จัดสรร RAM เพิ่มเติมให้กับเซิร์ฟเวอร์
  2. ตรวจสอบ MySQL log เพื่อดูคำเตือนและคำแนะนำ
การดำเนินการที่เกี่ยวข้อง
ProcessResolution
httpd1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์
2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf
3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM
mysqld1. หากใช้ InnoDB engine (โดยค่าเริ่มต้น MySQL 5.5 หรือสูงกว่า) ให้ตรวจสอบขนาดบัฟเฟอร์ด้วยคำสั่ง SHOW ENGINE INNODB STATUS\G ในกรณีที่มีค่าบัฟเฟอร์สูง (มากกว่า 80% ของ RAM คอนเทนเนอร์ทั้งหมด) ให้คุณลดขนาดของ pool ที่อนุญาตด้วยพารามิเตอร์ innodb_buffer_pool_size ในไฟล์ /etc/my.cnf
2. ตรวจสอบ MySQL log เพื่อดูคำเตือนและคำแนะนำ
  • MongoDB

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

หากเกิดปัญหาขึ้นกับบริการของ httpd ให้ปรับพารามิเตอร์การจัดการหน่วยความจำเซิร์ฟเวอร์ดังนี้:

– ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยแต่ละอินสแตนซ์

– ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf

– ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM

เพิ่มเติม: ในกรณีที่คุณสังเกตเห็นการเติบโตของการใช้หน่วยความจำต่ออินสแตนซ์ (การรั่วไหล) อย่างต่อเนื่องคุณจะต้องลดค่า MaxRequestsPerChild (เหลือประมาณ 1,000-5,000)

การดำเนินการที่เกี่ยวข้อง
ProcessResolution
httpd1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์
2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf
3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM
mongodจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
  • PostgreSQL

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

จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ

การดำเนินการที่เกี่ยวข้อง
ProcessResolution
httpd1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์
2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf
3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM
postgresจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
  • Redis

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

จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ

การดำเนินการที่เกี่ยวข้อง
ProcessResolution
redis-serverจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ

การดำเนินการทั่วไปสำหรับสแต็กประเภทต่างๆ

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

กระบวนการในส่วนนี้สามารถรันได้และต่อมาจะถูกทำลายภายในโหนดประเภทต่างๆ ดังนั้นการแก้ปัญหาของ OOM จึงแตกต่างกันไปและขึ้นอยู่กับกระบวนการ – ดูตารางด้านล่างเพื่อหาคำแนะนำที่เหมาะสม

ProcessStackResolution
httpdPHP
Ruby
Python
MySQL
MongoDB
PostgreSQL
1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์
2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf
3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM
lsyncdPHP
NodeJS
Python
จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
httpd.itkPHP
Ruby
Python
1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์
2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf
3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM
procmailAnyRestart คอนเทนเนอร์เพื่อกู้คืน process
vsftpdAnyRestart คอนเทนเนอร์เพื่อกู้คืน process
yumAnyRestart คอนเทนเนอร์เพื่อกู้คืน process
cc13rd partyจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
clamd3rd partyจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
ffmpeg3rd partyจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
firefox3rd partyจัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
newrelic-daemon3rd partyRestart service สแต็กหลัก (nginx, tomcat, nodejs, ฯลฯ)