2008-10-21 22 views
5

Tôi đang cố gắng xác định lý do cho quá trình bị trì hoãn trên Linux. Nó là một ứng dụng viễn thông, chạy dưới tải khá nặng. Có một quy trình riêng biệt cho mỗi 8 nhịp T1. Thường xuyên như vậy, một trong các quy trình sẽ rất không phản hồi - có thể lên đến 50 giây trước khi một sự kiện được ghi lại trong nhật ký của quá trình thường rất bận.Xác định lý do cho quá trình bị trì hoãn trên Linux

Có thể một số tài nguyên hệ thống sắp hết. Điều hiển nhiên - việc sử dụng CPU - có vẻ ổn.

Tiện ích Linux nào có thể là tốt nhất để bắt và phân tích loại điều này và không phô trương về điều đó càng tốt, vì đây là một hệ thống được tải cao? Nó sẽ cần phải được các quá trình chứ không phải là hệ thống định hướng, nó sẽ có vẻ. Có thể giám sát liên tục của/proc/pid/XX? Đầu trang dường như không quá hữu ích ở đây.

Trả lời

2

Bạn có thể truy tìm chương trình được đề cập và xem hệ thống đang thực hiện cuộc gọi nào.

8

Nếu bạn có thể để phát hiện này "khoảnh khắc unresponsiveness", sau đó bạn có thể sử dụng strace để đính kèm vào quá trình này trong câu hỏi trong thời gian đó và cố gắng tìm ra nơi nó "ngủ":

strace -f -o LOG -p <pid> 

hơn trọng lượng nhẹ, nhưng ít đáng tin cậy phương pháp:

  1. Khi quá trình bị treo, sử dụng đầu/ps/GDP/strace/ltrace để tìm hiểu tình trạng của quá trình này (ví dụ như cho dù đó chờ đợi trong "chọn" hoặc tiêu thụ 100% cpu trong một số cuộc gọi thư viện)

  2. Biết tính chất chung của cuộc gọi được đề cập, điều chỉnh yêu cầu strace để ghi nhật ký hoặc các nhóm syscall cụ thể. Ví dụ, để đăng nhập chỉ tập tin truy cập liên quan đến syscalls, sử dụng:

    strace -e file -f -o LOG .... 
    

Nếu strace là quá nặng một công cụ cho bạn, hãy thử theo dõi:

  1. Sử dụng bộ nhớ với "vmstat 1>/some/log "- có thể quá trình đang được đổi chỗ trong (hoặc ra ngoài) trong thời gian đó

  2. Sử dụng IO với vmstat/iotop - có thể một số quy trình khác đang đập đĩa

  3. /proc/interrupts - có thể trình điều khiển cho thẻ T1 của bạn đang gặp sự cố?

0

Thanks - strace có vẻ hữu ích. Bắt quá trình vào đúng thời điểm sẽ là một phần của niềm vui. Tôi đã đưa ra một kế hoạch để định kỳ viết một dấu thời gian vào bộ nhớ chia sẻ, sau đó theo dõi với một quá trình khác. Gửi một SIGSTOP sau đó sẽ cho tôi ít nhất là kiểm tra stack ứng dụng với gdb. Tôi không biết liệu có chạy theo một tiến trình tạm dừng hay không sẽ cho tôi biết nhiều, nhưng sau đó tôi có thể bật strace và xem nó sẽ nói gì. Hoặc bật strace và nhấn quá trình với một SIGCONT.

+0

quên thêm - đó cũng là công cụ đồng hành "ltrace", để theo dõi cuộc gọi thư viện (chỉ theo dõi dấu vết syscalls) – ADEpt

Các vấn đề liên quan