2009-03-08 41 views
19

Tôi đang có trường hợp ruby ​​từ mod_rails đi "rogue" - các quá trình này không còn được liệt kê trong tình trạng hành khách và sử dụng 100% cpu.modrails - rogue ruby ​​quy trình tiêu thụ 100% cpu

Khác với cài đặt thần/đơn vị để giết dụ, bất cứ ai có thể cho tôi một số lời khuyên về cách ngăn chặn điều này? Tôi đã không thể tìm thấy bất cứ điều gì trong các bản ghi giúp.

+0

cho tôi điều này chỉ xảy ra khi tôi khởi động lại apache cho các yêu cầu đầu tiên - một khi quá trình thực hiện những gì nó đang làm ứng dụng chạy tốt. Nhưng nó có thể mất từ ​​10 phút (không có giao thông) đến 3-6 giờ (với lưu lượng truy cập) đến trang web - đối với tôi đây không phải là một lựa chọn, nhưng muốn hiểu điều gì đang xảy ra và tại sao nó xảy ra – Spasm

Trả lời

9

Nếu bạn đang sử dụng Linux, bạn có thể cài đặt tiện ích "strace" để xem quá trình Ruby đang làm gì tiêu thụ tất cả CPU. Điều đó sẽ cho bạn một cái nhìn tốt ở mức độ thấp. Nó sẽ có sẵn trong trình quản lý gói của bạn. Sau đó, bạn có thể:

$ sudo strace -p 22710 
Process 22710 attached - interrupt to quit 
...lots of stuff... 
(press Ctrl+C) 

Sau đó, nếu bạn muốn dừng quá trình này ở giữa và đổ một đống dấu vết, bạn có thể làm theo các hướng dẫn về việc sử dụng GDB trong Ruby tại http://eigenclass.org/hiki.rb?ruby+live+process+introspection, cụ thể thực hiện:

gdb --pid=(ruby process) 
session-ruby 
stdout_redirect 
(in other terminal) tail -f /tmp/ruby_debug.(pid) 
eval "caller" 

bạn cũng có thể sử dụng Gem ruby-debug để kết nối từ xa tới ổ cắm debug bạn mở lên, được mô tả trong http://duckpunching.com/passenger-mod_rails-for-development-now-with-debugger

Ngoài ra còn có vẻ là một dự án trên Github liên quan đến việc gỡ lỗi các trường hợp hành khách có vẻ thú vị, nhưng documentat ion thiếu: http://github.com/ddollar/socket-debugger/tree/master

+0

các liên kết đã chết .. bất cứ ai có một bản sao? –

2

Chúng tôi đã thấy một cái gì đó tương tự như vậy với các truy vấn SQL đang chạy rất dài.

MySQL sẽ hủy truy vấn vì chúng vượt quá giới hạn chạy dài và luồng không bao giờ nhận ra rằng truy vấn đã chết.

Bạn có thể muốn kiểm tra nhật ký cơ sở dữ liệu.

+0

Làm cách nào nó tự hiển thị trong nhật ký? Bất kỳ chỉ số nào khác? –

4

Tôi đã có một quy trình ruby ​​liên quan đến Phusion Passenger, tiêu thụ rất nhiều CPU, mặc dù nó đã không hoạt động.

Vấn đề đi xa sau khi tôi chạy

date -s "`date`" 

như đề xuất trong this thread. (Đó là trên Debian Squeeze)

Rõ ràng, sự cố liên quan đến bước nhảy vọt thứ hai và có thể ảnh hưởng đến nhiều ứng dụng khác như MySQL, Java, v.v. Thông tin thêm trong this thread on lklm.

+0

Cảm ơn cuộc sống! –

+0

Tuyệt vời, cảm ơn! Ai đó cho người đàn ông này một điếu xì gà! – Joe

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