[เกร็ดความรู้] วิธีแก้ปัญหา Killed process สำหรับ Amazon Linux บน EC2 Instance
สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ
เคยไหมครับเวลาที่เรารันคำสั่งใน Amazon Linux แล้วแสดงผลลัพธ์ Killed
?
ครั้งนี้เราจะมาพูดถึงปัญหาเกี่ยวกับ Killed process ที่เกิดขึ้น และแนะนำวิธีแก้ไขกันครับ
สาเหตุการเกิด Killed process
หากรันคำสั่งที่ส่งผลกับการดำเนินการของระบบ Server เช่น "yum update -y" บน Amazon Linux แล้วแสดงผลลัพท์เป็น "killed" สามารถเกิดขึ้นได้ด้วยหลายสาเหตุดังนี้:
- Out of Memory (OOM): อาจเกิดขึ้นเมื่อ Amazon Linux มีข้อจำกัดในหน่วยความจำและไม่สามารถจัดการกับกระบวนการที่ใช้ทรัพยากรมากเกินไป ในกรณีนี้ระบบอาจ "kill" กระบวนการที่ใช้หน่วยความจำเกินเพื่อรักษาความเสถียร
- OOM Killer: เป็นกระบวนการที่ระบบปฏิบัติการใช้เพื่อหยุดกระบวนการที่กินทรัพยากรมากเกินไปเมื่อเกิดปัญหา Out of Memory ข้อความ "killed" อาจเป็นสัญลักษณ์ว่า OOM Killer ได้ทำการ "kill" กระบวนการนั้น
- Resource Limits: ข้อจำกัดในการใช้ทรัพยากรของ Amazon Linux เช่น CPU, หน่วยความจำ อาจจำกัดการทำงานของกระบวนการและทำให้ระบบทำการ "kill" กระบวนการที่เกินข้อจำกัดที่กำหนดไว้
- ข้อผิดพลาดในระบบ: อาจเป็นเกี่ยวกับข้อผิดพลาดที่เกิดขึ้นใน Amazon Linux หรือระบบที่ส่งผลให้คำสั่งประเภทที่รันแล้วส่งผลกับการดำเนินการของระบบ Server ทำงานผิดพลาด ทำให้ระบบทำการ "kill" กระบวนการนี้
ตัวอย่างการเกิด Killed process
ครั้งนี้ผมใช้คำสั่ง yum update -y
ทดสอบรันใน Amazon Linux 2023 AMI บน EC2 Instance ที่มีทรัพยากรไม่เพียงพอต่อการใช้งานผ่าน Session Manager และ EC2 Instance Connect
เนื่องจากคำสั่ง "yum update -y" เป็นคำสั่งที่รันแล้วส่งผลกับการดำเนินการของระบบ Server จึงนำมาทดสอบครับ
ผลลัพธ์หลังจากลองรันคำสั่ง yum update -y
ใน Session Manager และ EC2 Instance Connect แล้ว
- สำหรับ Session Manager จะแสดงผลลัพธ์
killed
- สำหรับ EC2 Instance Connect จะแสดงหน้าจอค้างไปทั้งอย่างนั้นเลย
วิธีแก้ปัญหา Killed process
การแก้ไขปัญหา "killed" ที่เกิดขึ้นจากการรัน "yum update -y" อาจต้องทำการตรวจสอบข้อมูลการใช้ทรัพยากรใน Amazon Linux เพื่อตรวจหาปัญหาที่เกิดขึ้น และอาจต้องปรับแต่งการกำหนดค่าทรัพยากรของระบบให้เหมาะสมกับการใช้งาน โดยควรทำการตรวจสอบ log หรือข้อมูลอื่นๆ เพิ่มเติมเพื่อค้นหาข้อมูลที่ช่วยในการแก้ไขปัญหาอย่างแม่นยำและป้องกันการเกิดปัญหาในอนาคต เช่น หากทรัพยากรไม่เพียงพอสำหรับการใช้งาน แล้วรันคำสั่งที่ต้องการ อาจทำให้ระบบทำการ "kill" คำสั่งที่เรารันไปอีกได้นั่นเอง
สำหรับวิธีการแก้ปัญหาที่จะมาแนะนำมีดังนี้
สร้าง Swap Memory ใน Amazon Linux
ทำการ Swap Memory เพื่อดึงพื้นที่ Storage มาสร้าง swap เพื่อทำหน้าที่เป็นหน่วยความจำเสมือน และทำให้ระบบการทำงานของ Linux Instance เร็วขึ้น
ลิงก์บทความด้านล่างนี้เป็นบทความของ Amazon Linux 2 แต่ก็สามารถเพิ่ม Swap Memory ได้ด้วยวิธีเดียวกันใน Amazon Linux 2023 ดังนั้นดูตัวอย่างที่ลิงก์นี้ได้เลยครับ
อัปเกรด Instance Type
ทำการอัปเกรด Instance Type โดยเปลี่ยนเป็นสเปคที่สูงขึ้น เช่น เปลี่ยนจาก t3a.nano
→ t3a.micro
(ตัวอย่าง)
ดูตัวอย่างได้ที่ลิงก์ด้านล่างนี้ครับ
ทดสอบรันคำสั่ง
หลังจกาทำวิธีใดวิธีนึงตามที่เขียนไว้ด้านบนนี้แล้ว ทำการทดสอบรันคำสั่ง yum update -y
ใน root ตามนี้อีกครั้งครับ
คำสั่งเข้าใช้งานสิทธิ์ root
sudo su -
คำสั่ง Update ระบบให้เป็นปัจจุบัน
yum update -y
ผลลัพธ์
จะเห็นว่าสามารถรันคำสั่ง yum update -y
ได้แล้ว
สรุป
EC2 Instance เป็นบริการที่มีความยืดหยุ่น หากพบว่าทรัพยากรไม่เพียงพอต่อการใช้งาน เราสามารถปรับแต่งหรือตั้งค่าทรัพยากรของเราให้เหมาะสมกับประเภทงานที่ต้องการได้อย่างง่ายดายครับ
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ