กระบวนการในกลุ่มเหล่านี้ส่วนใหญ่เป็นสาเหตุของปัญหาหน่วยความจำไม่เพียงพอ (เรียงตามบทบาทของเซิร์ฟเวอร์):
Load Balancers
คำแนะนำทั่วไป
จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
การดำเนินการที่เกี่ยวข้อง
Process | Resolution |
---|---|
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 เพิ่มเติมเพื่อรับข้อมูลเชิงลึกที่ลึกซึ้งยิ่งขึ้น
การดำเนินการที่เกี่ยวข้อง
Process | Resolution |
---|---|
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
การดำเนินการที่เกี่ยวข้อง
Process | Resolution |
---|---|
httpd | 1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์ 2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf 3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM |
lsyncd | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
httpd.itk | 1. ตรวจสอบจำนวนของ 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 สำหรับอินสแตนซ์
การดำเนินการที่เกี่ยวข้อง
Process | Resolution |
---|---|
httpd | 1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์ 2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf 3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM |
httpd.itk | 1. ตรวจสอบจำนวนของ 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 อาจต้องการหน่วยความจำเพิ่มขึ้นสำหรับการทำงานปกติ
การดำเนินการที่เกี่ยวข้อง
Process | Resolution |
---|---|
httpd | 1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์ 2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf 3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM |
lsyncd | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
httpd.itk | 1. ตรวจสอบจำนวนของ 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 แอปพลิเคชันอาจต้องการหน่วยความจำเพิ่มขึ้นสำหรับการทำงานปกติ
การดำเนินการที่เกี่ยวข้อง
Process | Resolution |
---|---|
lsyncd | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
grunt | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
node | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
npm | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
phantomjs | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
Database Servers
รายการด้านล่างจะแสดง DB สแต็กพร้อมกับคำแนะนำทั่วไปเกี่ยวกับปัญหา OOM ตลอดจนวิธีการแก้ไขสำหรับ killed processes โดยเฉพาะ
- MySQL
คำแนะนำทั่วไป
- หากใช้ InnoDB engine (ฝังตั้งแต่ MySQL เวอร์ชัน 5.5) ให้ตรวจสอบขนาดบัฟเฟอร์ด้วยคำสั่งนี้:
SHOW ENGINE INNODB STATUS\G;
ในกรณีที่มีค่าบัฟเฟอร์สูง (มากกว่า 80% ของ RAM คอนเทนเนอร์ทั้งหมด) ให้คุณลดขนาดของ pool ที่อนุญาตด้วยพารามิเตอร์ innodb_buffer_pool_size ในไฟล์ /etc/my.cnf มิฉะนั้น ให้จัดสรร RAM เพิ่มเติมให้กับเซิร์ฟเวอร์ - ตรวจสอบ MySQL log เพื่อดูคำเตือนและคำแนะนำ
การดำเนินการที่เกี่ยวข้อง
Process | Resolution |
---|---|
httpd | 1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์ 2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf 3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM |
mysqld | 1. หากใช้ 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)
การดำเนินการที่เกี่ยวข้อง
Process | Resolution |
---|---|
httpd | 1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์ 2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf 3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM |
mongod | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
- PostgreSQL
คำแนะนำทั่วไป
จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
การดำเนินการที่เกี่ยวข้อง
Process | Resolution |
---|---|
httpd | 1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์ 2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf 3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM |
postgres | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
- Redis
คำแนะนำทั่วไป
จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ
การดำเนินการที่เกี่ยวข้อง
Process | Resolution |
---|---|
redis-server | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
การดำเนินการทั่วไปสำหรับสแต็กประเภทต่างๆ
คำแนะนำทั่วไป
กระบวนการในส่วนนี้สามารถรันได้และต่อมาจะถูกทำลายภายในโหนดประเภทต่างๆ ดังนั้นการแก้ปัญหาของ OOM จึงแตกต่างกันไปและขึ้นอยู่กับกระบวนการ – ดูตารางด้านล่างเพื่อหาคำแนะนำที่เหมาะสม
Process | Stack | Resolution |
---|---|---|
httpd | PHP Ruby Python MySQL MongoDB PostgreSQL | 1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์ 2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf 3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM |
lsyncd | PHP NodeJS Python | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
httpd.itk | PHP Ruby Python | 1. ตรวจสอบจำนวนของ RAM ที่ใช้เฉลี่ยในแต่ละ httpd อินสแตนซ์ 2. ลบเครื่องหมาย Jelastic autoconfiguration ภานในไฟล์ /etc/httpd/httpd.conf 3. ลดค่า ServerLimit และ MaxClients ตามที่กำหนด: (Total_RAM – 5%) / Average_RAM |
procmail | Any | Restart คอนเทนเนอร์เพื่อกู้คืน process |
vsftpd | Any | Restart คอนเทนเนอร์เพื่อกู้คืน process |
yum | Any | Restart คอนเทนเนอร์เพื่อกู้คืน process |
cc1 | 3rd party | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
clamd | 3rd party | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
ffmpeg | 3rd party | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
firefox | 3rd party | จัดสรร RAM เพิ่มเติมให้กับโหนดที่เกี่ยวข้อง – บริการนี้อาจต้องการ memory เพิ่มเติมสำหรับการทำงานปกติ |
newrelic-daemon | 3rd party | Restart service สแต็กหลัก (nginx, tomcat, nodejs, ฯลฯ) |