Điểm:0

Tệp Cronjob không đóng và sử dụng CPU 100%

lá cờ et

Tôi đang chạy một tệp php cứ sau 10 giây với một cronjob. Trong khi hệ thống đang chạy tốt, đêm qua tôi nhận thấy rằng php đã sử dụng 100% CPU và làm hỏng hệ thống.

Khi tôi kiểm tra với phụ trợ ps, tôi thấy rằng tệp cron của tôi có hàng tá tệp cron đang được xử lý. Thậm chí không có lý do cho điều đó khi tôi kiểm tra cơ sở dữ liệu. Vì vậy, trang php của tôi được cho là trả về trống và kết thúc ngay lập tức.

Tôi có một vài câu hỏi:

1- Tại sao có thể gây ra sự cố này trong Cron?

2- Khi mình tạo hệ thống xếp hàng cho ví dụ codigniter thay vì Cron process thì nó khác cron như thế nào?

3- Liệu tôi có thoát khỏi những vấn đề như vậy khi tôi biến PHP thành một hệ thống chạy ngầm không?

cảm ơn bạn trước

Điểm:0
lá cờ vn
  1. Tại sao sự cố này trong Cron có thể được gây ra?

Đây không phải là một vấn đề cron.

Cron là một bộ lập lịch rất đơn giản, chỉ cần bắt đầu một đợt mới vào thời điểm/khoảng thời gian bạn chỉ định.

Khi, vì bất kỳ lý do gì, công việc hàng loạt của bạn không thể hoàn thành kịp thời trước khi lần lặp tiếp theo bắt đầu, bạn sẽ kết thúc với hai quy trình đồng thời. Cron không làm gì để ngăn chặn điều đó.

Nó thực sự phụ thuộc vào các giả định và mã của bạn nếu điều đó ngay lập tức gây ra sự cố hay không.

Có thể ngay lập tức lần lặp thứ hai tạo ra một số dạng bế tắc và dừng vô thời hạn, 10 giây sau, lần lặp thứ ba dừng lại do bế tắc do lần lặp thứ hai gây ra và 10 giây sau, lần lặp tiếp theo cũng dừng ngay lập tức. Vân vân và vân vân Điều đó có thể nhanh chóng lăn cầu tuyết.

Hoặc nó có thể là một quá trình chậm hơn nhiều, trong đó đối với từng lô riêng lẻ, thời gian chạy tăng dần và thay vì bị đình trệ, ngày càng nhiều lô chạy dài hơn kết thúc bằng việc chạy đồng thời.Điều đó (cuối cùng) làm tăng tải nhiều hơn, bắt đầu tranh chấp tài nguyên và dẫn đến các công việc theo lô thậm chí còn mất nhiều thời gian hơn để hoàn thành và nhiều đợt đồng thời/đồng thời hơn và thiếu tài nguyên.

  1. Khi tôi tạo một hệ thống xếp hàng cho ví dụ như codigniter thay vì quy trình Cron, nó khác với cron như thế nào?

Như bạn đã trải nghiệm ở đây, cron không phải là một hệ thống xếp hàng. Nó chỉ là một lịch trình rất đơn giản.

Nếu bạn muốn thêm điều khiển công việc phức tạp hơn, bạn cần tạo điều khiển đó. Xem ví dụ câu trả lời này đây về cách đơn giản ngăn nhiều đợt cron chạy đồng thời trong đặc tả lô của bạn.

Mặt khác, thực sự chạy một thứ gì đó cao cấp hơn cron đơn giản có thể là một giải pháp.

  1. Liệu tôi có thoát khỏi những vấn đề như vậy khi tôi biến PHP thành một hệ thống chạy ngầm không?

Nếu nguyên nhân cốt lõi là do mã của bạn bị hỏng bất cứ khi nào hai lô chạy đồng thời thì các biện pháp được thiết kế để làm cho mã của bạn chạy nhanh hơn sẽ không loại bỏ được lỗ hổng đó cũng như không ngăn được lỗi đó xảy ra lần nữa.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.