จะป้องกันการตรวจสอบ apt-instance ที่ใช้งานได้อย่างไร


18

ฉันมีเซิร์ฟเวอร์ Ubuntu 12.04 ที่เพิ่งพังเพราะสาเหตุที่ชัดเจนมาก: apt-checkกระบวนการ30+ กระบวนการที่ใช้หน่วยความจำทั้งหมด, นักฆ่า OOM เตะเข้าและฆ่าบริการที่สำคัญ ฉันไม่แน่ใจว่าapt-checkกระบวนการมาจากที่ใด แต่ฉันเดาว่าปลั๊กอิน Nagios / Icinga ของฉันcheck_aptอาจใช้งานได้เช่นเดียวกับbyobuบรรทัดสถานะอาจต้องการแสดงผลลัพธ์ ฉันเดาว่ามีบางอย่างถูกล็อกและกระบวนการทั้งหมดกำลังรอ แต่ยังมีหน่วยความจำอยู่

ฉันจะป้องกันไม่ให้มีอินสแตนซ์มากมายapt-checkบนระบบได้อย่างไร มันไม่สมเหตุสมผลสำหรับฉันและมันควรจะเลิกทันทีที่ไม่สามารถล็อคการอ่านในฐานข้อมูล dpkg

ดูเหมือนว่าฉันไม่ใช่คนเดียวที่ประสบปัญหาที่นี่ คำแนะนำทั้งหมดสำหรับคำว่าapt-checkสวย:

ป้อนคำอธิบายรูปภาพที่นี่

(ล้างเบราว์เซอร์ไม่เข้าสู่ระบบไม่มีการค้นหาที่ปรับให้เป็นส่วนตัว)

คำตอบ:


8

การดำน้ำเข้ามาapt-checkทำให้ฉันรู้เบาะแสเหล่านี้เพราะมันเป็นสคริปต์ที่ไม่มีความจำเป็นต้องแก้ไข ด้วยความเคารพจากผู้เขียนมันก็ล้มเหลวบนเซิร์ฟเวอร์ของฉัน นี่คือความคิดของฉัน:

  • apt-check == /usr/lib/update-notifier/apt_check.py
  • กองกำลัง nicelevel 19 สำหรับตัวเอง
  • ไม่มีการตั้งค่าการหมดเวลากับการกระทำ

การรวมกันของทั้งสองที่ผ่านมาช่วยให้กองพะเนินเทินทึกในเกลียวลง หากระบบใช้เพื่อวัตถุประสงค์อื่นที่มีลำดับความสำคัญสูงกว่าจำนวนของกระบวนการจะเพิ่มขึ้นและจะไม่มีที่สิ้นสุดเพราะapt-checkจะไม่มีความสำคัญมากกว่านั้น ปัญหาจะเลวร้ายยิ่งขึ้นเมื่อนักฆ่า OOM ตัดสินใจฆ่ากระบวนการสำคัญของระบบ

หากพฤติกรรมสองอย่างใดอย่างหนึ่งเหล่านี้แตกต่างกันมันจะไม่อนุญาตให้ระบบสิ้นสุดลงในสภาพที่ไม่สมบูรณ์เช่นนี้คือข้อสันนิษฐานของฉัน

ในขณะที่สตริงนั้นถูกต้องเกี่ยวกับกระบวนการหลักที่รับผิดชอบในเรื่องนี้เช่นกันฉันเชื่อว่าจุดด้านล่างเป็นข้อบกพร่องapt-checkและต้องได้รับการรายงานว่าเป็นจุดบกพร่องเพื่อให้ได้รับการแก้ไขอย่างถูกต้อง:

  • ควรให้คำใบ้ว่านักฆ่า OOMต้องฆ่าตัวตายเสียก่อน
  • ไม่ควรตั้งค่านิโคเนลฮาร์โค้ด
  • ควรออกหากใช้เวลาในการรับข้อมูลที่ไม่สมเหตุสมผล

ที่จริงแล้วดูเหมือนว่านักฆ่า Linux OOM กำลังทำการแก้ไขปัญหานี้อยู่ กระบวนการที่ผ่านเกณฑ์จะได้รับคะแนนเพิ่มขึ้นและกระบวนการที่ใช้เวลานานจะลดลง (ที่มา - ขอบคุณUlrich Dangelสำหรับการชี้ให้เห็น )

ทางออกที่เป็นไปได้ฉันอาจเสนอ:

  • ผลลัพธ์แคชหลังจากการประมวลผล
  • เอาต์พุตแคชหากน้อยกว่า N จำนวนวินาทีโดยไม่โหลดไลบรารี Python-APT ทั้งหมดสำหรับการเรียกใช้ (แม้แต่--help) อย่างง่าย
  • ทำการกำหนดค่า nicelevel - อนุญาตให้ฉันเปลี่ยน / ปิดการใช้งานนี้ได้โปรด! ฉันเชื่อว่าการตั้งค่าเป็น 0 จะช่วยได้จริง
  • มันเพิ่มคะแนน OOM killer หรือไม่

ฉันคิดว่าคุณพลาดสิ่งที่ยิ่งใหญ่ที่สุดที่ควรทำ: ใช้ lockfile และไม่อนุญาตให้เรียกใช้มากกว่าหนึ่งอินสแตนซ์ในครั้งเดียว
derobert

@derobert มันเป็นสคริปต์ที่ผู้ใช้ทุกคนสามารถทำงานได้โดยไม่มีสิทธิ์เฉพาะบน Ubuntu ไม่ใช่ daemon หรือฉันสามารถใช้/var/run/ /tmpสำหรับล็อคไฟล์ที่สามารถอ่าน / เขียนได้ทั่วโลกได้อย่างปลอดภัยหรือไม่? มีหลุมขนาดใหญ่: เพิ่มไฟล์ล็อคและผู้ดูแลระบบจะไม่ได้รับแจ้งการอัปเดตระบบ!
gertvdijk

สิ่งที่เปิดตัวโดยอัตโนมัติ (นำไปสู่การทำงาน 30 สำเนา) จำเป็นต้องทำการล็อค หรือมันสามารถทำเองต่อผู้ใช้ ไม่ว่าจะด้วยวิธีใดนั่นเป็นข้อบกพร่องที่ต้องแก้ไข
Derobert

Nagios / Icinga ดูเหมือนว่าจะหลีกเลี่ยงหลุมพราง อย่างน้อยก็มีการหมดเวลา 10 วินาทีและเตือนหากเกิน (แม้ว่าฉันจะไม่สามารถหาวิธีกำหนดค่าการหมดเวลาได้ แต่ฉันต้องการอีกต่อไป) Byobu บน Debian คือสิ่งที่ทำให้เกิดปัญหาสำหรับฉัน บน Ubuntu ก็ควรจะได้รับการแก้ไข
sourcejedi

4

คุณต้องค้นหาว่ากระบวนการใดที่วางไข่ตรวจสอบ apt คุณสามารถใช้บางอย่างเช่น ps เพื่อรับแผนผังกระบวนการ

ps -A --forest

ถ้า apt-check ไม่มีพ่อแม่อาจเป็นปัญหากับ apt-check ด้วยตนเองไม่ใช่โปรแกรมใดโปรแกรมหนึ่ง หากเป็นกรณีนี้ฉันจะลอง debug apt-check


ขอบคุณ ทำให้ฉันมีความคิดที่จะมองเพิ่มเติม อย่างไรก็ตามตะกั่วนี้ผมเชื่อว่ามันเป็นปัญหาของapt-checkจริงๆ - ดูคำตอบของฉันเอง
gertvdijk

ถ้ามันใช้หน่วยความจำและเวลา CPU มันไม่ใช่ซอมบี้
Gilles 'หยุดความชั่วร้าย'

@Gilles จุดที่ดี
สตริง

0

ฐานเขียนบน Ubuntu 12.04

ฉันมีปัญหาเดียวกันและพบว่าเป็นเพราะbyobuถ้าฉันเพิ่งทำงานapt-get updateไม่ได้ใช้byobuจะไม่มีcheck-aptกระบวนการ นอกจากนี้ก็เกี่ยวข้องกับupdate-notifierแพคเกจเมื่อฉันออกแพคเกจเหล่านั้น (ปรับปรุง notifer ทั่วไป, อัพเดท-แจ้ง) โดยใช้byobuและเรียกapt-get updateมันวิ่งคำสั่งอื่น apt-get -s -o Debug::NoLocking=true upgradeแต่ค่อนข้างหน่วยความจำเดียวกันโดยใช้:

บางสิ่งอื่น ๆ อาจทำงานapt-get update(แต่อาจไม่ทำงานcheck-apt)

  • ผ่านอาร์กิวเมนต์เพื่อ check_aptอัปเดต / อัปเกรด pkg
  • หากกำหนดค่าแล้ว/etc/cron.daily/aptอาจอัปเดตรายการแพคเกจด้วยเช่นกัน (ดูhttps://help.ubuntu.com/lts/serverguide/automatic-updates.html ) แต่มันทำงานเพียงวันละครั้งและไม่ควรมีปัญหา

บนเดสก์ท็อปอาจมีหลายสิ่งที่เกี่ยวข้อง

สรุป: byobuจับเหตุการณ์เมื่อคุณเรียกใช้apt-get updateและทริกเกอร์check-aptกระบวนการเหล่านี้อีกครั้งกำหนดค่าแถบสถานะของbyobuเพื่อแก้ไขปัญหานี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.