CPU bị kẹt ở mức 99% trong vài giờ: tìm ra nhật ký


8

trích xuất từ syslog:

CRON[pid]: (user) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -
execdir fuser -s {} 2>/dev/null \; -delete)

CPU của tôi đã bị kẹt ở mức 99% trong vài giờ và tôi cho rằng đó là vì điều này. Có ai tình cờ biết đây là gì, nó bắt đầu như thế nào và làm thế nào để ngăn chặn nó?

EDIT: Tôi đã thử top -n1và tôi thấy điều này trở lại nhiều lần:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
PID user      20   0     0    0    0 Z 99.9  0.0   0:00.00 fuser <defunct>

dòng này lặp lại khoảng 8 lần.

EDIT2:

uname-a:

user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux`
lsb_release -a:
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 11.10
Release:    11.10
Codename:   code

EDIT 3:

Sau khi khởi động lại, hệ thống trở lại như cũ 99% cpu usagetop -n1kết quả tương tự .


3
Có một lỗi trong lệnh đó. Đầu ra stderr của fuser đang được gửi tới / dev / null, như được thiết kế. Nhưng đầu ra của stderr cũng vậy, có lẽ là không. (Vì -execdir thực sự không khởi chạy lệnh thông qua shell, nên 2> / dev / null đang được xử lý bởi shell được gọi trực tiếp bởi cron). Tuy nhiên, trong khi điều này có thể che giấu các triệu chứng có liên quan, việc định vị 2> / dev / null không phải là nguyên nhân của việc sử dụng CPU của bạn.
James Youngman

3
Điều này rất kỳ lạ: một quá trình zombie không nên sử dụng thời gian của CPU (thậm chí nó không có mã để thực thi). Bạn có một lỗi trong các công cụ báo cáo quá trình hoặc trong kernel của bạn. Hệ điều hành này là gì (phiên bản, kernel, v.v.)? Có ảo hóa không? Đầu ra của uname -avà là lsb_release -agì?
Gilles 'SO- ngừng trở nên xấu xa'

1
Các fuserlệnh có lẽ là rất ngắn ngủi. Nó dành thời gian sử dụng hết thời gian CPU (thời gian hệ thống, không phải thời gian của người dùng) để tạo / mua dữ liệu mà nó (tầm thường) tiêu thụ. Mỗi trường hợp fusercó thể kết thúc rất nhanh. Nhưng nó có thể đang được chạy nhiều lần vì có, tôi cho rằng, nhiều tệp phiên trong đó. Con số 99,9% có lẽ chỉ có nghĩa là trường hợp fuserCPU được sử dụng mạnh mẽ trước khi nó chết. findcó lẽ không phải là rất khó chịu về việc gặt hái trẻ em; nó chỉ có thể gọi waitpidlại khi rời khỏi thư mục hoặc chạy fuserlại.
James Youngman

uname-a: user SMP Tue Feb 14 13:27:41 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux lsb_release -a: Không có mô-đun LSB nào khả dụng. ID nhà phân phối: Ubuntu Mô tả: Ubuntu 11.10 Phát hành: 11.10 Tên mã: mã
Jack

Rất tiếc, điều chỉnh: vì -execdir ... \;sự chờ đợi phải ngay lập tức, vì mã trả về là cần thiết do kết quả của vị từ (tôi đã trộn cái này với -execdir ...+cái luôn luôn trả về đúng, tôi nghĩ vậy).
James Youngman

Câu trả lời:


5

Đây là một công việc định kỳ giúp dọn sạch các tệp phiên cũ từ / var / lib / php5 /. Nếu nó bị treo ở mức 99%, có lẽ bạn nên kiểm tra thư mục đích (/ var / lib / php5 /) để biết số lượng tệp quá mức hoặc thậm chí có thể làm hỏng hệ thống tệp.

Quá trình được bắt đầu từ crontab. Xem danh sách crontab (mô tả ở đây ). Bạn kan giết tiến trình và xóa nó khỏi crontab, nhưng nhiều khả năng là bạn có một vấn đề tiềm ẩn như số lượng tệp quá mức cần phải sửa.


1
Nếu bạn kết thúc với nhiều quá trình dọn dẹp đang chạy, chúng có thể can thiệp lẫn nhau bằng cách tạo các khóa trên thư mục khi chúng xóa các tệp. Hãy thử tạm thời gỡ bỏ nó khỏi crontab cho đến khi tải hết. Sau đó thêm nó với một khoảng thời gian dài hơn giữa các lần chạy. Bạn có thể muốn chuyển nó sang một tập lệnh với cơ chế khóa để đảm bảo chỉ có một phiên bản đang chạy. Tiêu diệt bất kỳ trường hợp nào của lệnh bây giờ.
BillThor

2

Tìm thấy câu trả lời ở đây: http://www.flynsarmy.com/2011/11/fuser-USE-100-cpu-in-ub Ubuntu-11-10 /

trong /etc/cron.d/php5 on Ubuntu 11.10:

Thay thế
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] &amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2&gt;/dev/null \; -delete

Với
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] &amp;&amp; [ -d /var/lib/php5 ] &amp;&amp; find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete


Điều này đã làm việc, vấn đề dường như được giải quyết.
Jack
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.