มีวิธีใดบ้างที่ฉันสามารถตรวจสอบกระบวนการของฉันซึ่งเคอร์เนลได้ฆ่า? บางครั้งฉันเข้าสู่เซิร์ฟเวอร์ของฉันและพบว่าบางสิ่งบางอย่างที่ควรจะทำงานทั้งคืนเพียงแค่หยุด 8 ชั่วโมงในและฉันไม่แน่ใจว่ามันเป็นแอปพลิเคชันที่ทำหรือเมล็ด
มีวิธีใดบ้างที่ฉันสามารถตรวจสอบกระบวนการของฉันซึ่งเคอร์เนลได้ฆ่า? บางครั้งฉันเข้าสู่เซิร์ฟเวอร์ของฉันและพบว่าบางสิ่งบางอย่างที่ควรจะทำงานทั้งคืนเพียงแค่หยุด 8 ชั่วโมงในและฉันไม่แน่ใจว่ามันเป็นแอปพลิเคชันที่ทำหรือเมล็ด
คำตอบ:
หากเคอร์เนลฆ่ากระบวนการ (เนื่องจากระบบมีหน่วยความจำไม่เพียงพอ) จะมีข้อความบันทึกเคอร์เนล เช็คอิน/var/log/kern.log
(บน Debian / Ubuntu, ดิสทริบิวชันอื่น ๆ อาจส่งบันทึกของเคอร์เนลไปยังไฟล์อื่น แต่โดยปกติแล้วจะอยู่/var/log
ภายใต้ Linux)
โปรดทราบว่าหาก OOM-killer (นักฆ่าหน่วยความจำไม่เพียงพอ) เปิดขึ้นแสดงว่าคุณมีหน่วยความจำเสมือนไม่เพียงพอ เพิ่มการสลับเพิ่มเติม (หรืออาจมากกว่า RAM)
กระบวนการขัดข้องบางอย่างจะถูกบันทึกในเคอร์เนลล็อกเช่นกัน (เช่นการแบ่งส่วนผิดพลาด)
หากกระบวนการเริ่มต้นจาก cron คุณควรมีเมลพร้อมข้อความแสดงข้อผิดพลาด หากกระบวนการเริ่มต้นจากเชลล์ในเทอร์มินัลตรวจสอบข้อผิดพลาดในเทอร์มินัลนั้น เรียกใช้กระบวนการในscreen
เพื่อดูสถานีอีกครั้งในตอนเช้า สิ่งนี้อาจไม่ช่วยถ้า OOM-killer ทำงานเพราะมันอาจฆ่า cron หรือกระบวนการสกรีนเช่นกัน แต่ถ้าคุณวิ่งเข้าไปใน OOM-killer นั่นคือปัญหาที่คุณต้องแก้ไข
บัญชีกระบวนการสามารถช่วยได้ที่นี่
โดยย่อ:
apt-get install acct
จากนั้นลองใช้คำสั่งเช่น:
lastcomm
sa
หรือบน Ubuntu:
lastcomm -f /var/log/account/pacct
sa /var/log/account/pacct
ดู:
UPDATE
น่าแปลกที่pacct
ไฟล์นั้นมีข้อมูลเกี่ยวกับสถานะการออก แต่ดูเหมือนจะไม่มีlastcomm
หรือไม่มีsa
การพิมพ์
เท่าที่ฉันเห็นคุณต้องเขียนโปรแกรม C ของคุณเองเพื่อเข้าถึงข้อมูล
อัพเดท 2
นี่คือรุ่นที่พิมพ์รหัสออก
สองฟิลด์สุดท้ายคือ "S" สำหรับสัญญาณและ "E" สำหรับออกแล้วตามด้วยหมายเลขสัญญาณหรือสถานะทางออก
ในกรณีของคุณคุณอาจกำลังมองหา "S 15" ซึ่งหมายความว่าได้ SIGTERM
sleep X mikel stdin 0.00 secs Fri Mar 25 20:15 S 15
เปรียบเทียบกับ "E 0" ซึ่งหมายถึงกระบวนการที่ออกโดยไม่มีข้อผิดพลาด
true mikel stdin 0.00 secs Fri Mar 25 20:16 E 0
ทดสอบเพียงเล็กน้อยเท่านั้น
บริการ sudo - สถานะทั้งหมด
คำสั่งนี้จะบอกคุณว่าบริการใดกำลังทำงานอยู่และยังไม่ได้เริ่มหรือหยุด ..
/var/log/kern.log
อย่างไร