Score:0

ไฟล์ Cronjob ไม่ปิดและใช้งาน CPU 100%

ธง et

ฉันเรียกใช้ไฟล์ php ทุก ๆ 10 วินาทีด้วย cronjob ในขณะที่ระบบทำงานได้ดีเมื่อคืนนี้ฉันสังเกตเห็นว่า php ใช้ CPU 100% และระบบหยุดทำงาน

เมื่อตรวจสอบกับ ps auxฉันเห็นว่าไฟล์ cron ของฉันมีไฟล์ cron หลายสิบไฟล์ที่อยู่ระหว่างดำเนินการ ไม่มีแม้แต่เหตุผลเมื่อฉันตรวจสอบฐานข้อมูล ดังนั้นหน้า php ของฉันควรจะกลับมาว่างเปล่าและเสร็จสิ้นทันที

ฉันมีคำถามสองสามข้อ:

1- เหตุใดการทำงานผิดพลาดนี้ใน Cron จึงเกิดขึ้นได้

2- เมื่อฉันสร้างระบบคิวสำหรับเช่น codigniter แทนกระบวนการ Cron มันแตกต่างจาก cron อย่างไร

3- ฉันจะปราศจากปัญหาดังกล่าวเมื่อฉันทำให้ PHP เป็นระบบที่ทำงานอยู่เบื้องหลังหรือไม่?

ขอบคุณล่วงหน้า

Score:0
ธง vn
  1. เหตุใดการทำงานผิดปกติใน Cron จึงเกิดขึ้นได้

นี่ไม่ใช่ปัญหา cron

Cron เป็นตัวจัดกำหนดการที่เรียบง่ายมาก ซึ่งเพียงแค่เริ่มชุดงานใหม่ตามเวลา/ช่วงเวลาที่คุณระบุ

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

ขึ้นอยู่กับสมมติฐานและโค้ดของคุณว่าจะทำให้เกิดปัญหาในทันทีหรือไม่

อาจเป็นได้ว่าการวนซ้ำครั้งที่สองทันทีทำให้เกิดการหยุดชะงักและหยุดชะงักอย่างไม่มีกำหนด 10 วินาทีต่อมา การวนซ้ำครั้งที่สามจะหยุดการหยุดชะงักที่เกิดจากการวนซ้ำครั้งที่สอง และ 10 วินาทีต่อมา การวนซ้ำครั้งต่อไปก็หยุดทันทีเช่นกัน ฯลฯ ที่สามารถสโนว์บอลได้อย่างรวดเร็ว

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

  1. เมื่อฉันสร้างระบบคิวสำหรับ เช่น codigniter แทนกระบวนการ Cron มันแตกต่างจาก cron อย่างไร

ดังที่คุณพบที่นี่ cron ไม่ใช่ระบบการรอคิว มันเป็นเพียงตัวกำหนดตารางเวลาที่ง่ายมาก

หากคุณต้องการเพิ่มการควบคุมงานที่ซับซ้อน คุณต้องสร้างมันขึ้นมา ดูตัวอย่างคำตอบนี้ ที่นี่ เกี่ยวกับวิธีป้องกันไม่ให้ชุด cron หลายชุดทำงานพร้อมกันในข้อกำหนดชุดงานของคุณ

มิฉะนั้นการรันสิ่งที่สูงกว่า cron ธรรมดาอาจเป็นวิธีแก้ปัญหา

  1. ฉันจะปราศจากปัญหาดังกล่าวเมื่อฉันทำให้ PHP เป็นระบบที่ทำงานอยู่เบื้องหลังหรือไม่?

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

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา