2012-11-13 42 views
7

Chúng tôi có ứng dụng đường ray lớn và từ vài ngày, từng người một, quy trình ruby ​​của chúng tôi dường như chặn trong vòng lặp và ăn 100% CPU cho đến khi hành khách máy chủ chết nâng 502 erros.Cách hiểu lý do tại sao khối xử lý ruby ​​ở 100% CPU

Bạn có biết cách tốt nhất để tìm hiểu lý do tại sao không?

Tôi đã thử di tích mới nhưng đó chỉ là công cụ hiệu suất và lỗi của chúng tôi là quá nhiều để cố gắng đoán sự cố là gì. (Chúng tôi có rất nhiều yêu cầu một ngày và rất nhiều lỗi UTF-8 BSON bởi vì chúng ta đang sử dụng UTF-8 url)

Sử dụng:

  • Rails 3.2.6 với Ruby 1.9.2p290
  • Hành khách 3.0.13
  • MongoDB 2.0.1 với Mongoid 2.4.11
  • Nginx
  • FreeBSD 8,2

Trả lời

8

Một cách thuận tiện để tìm ra nơi ruby ​​của bạn bị mắc kẹt là đính kèm gdb vào quy trình đang chạy và call rb_backtrace(). Điều đó sẽ in dấu vết stack hiện tại để stderr, mà có khả năng hướng đến một tập tin log. Đây là một số short walk through Tôi tìm thấy trên blog. Theo dõi ngăn xếp sẽ giúp bạn bản địa hóa nơi quá trình của bạn bị kẹt và cho phép bạn tìm ra những gì đang xảy ra thông qua kiểm tra mã hoặc bằng cách thêm công cụ ghi nhật ký xung quanh đường dẫn mã quan trọng.

Aman Gupta có thư viện gdb to ruby ​​hooks gdb.rb Đôi khi tôi thấy tiện dụng.

+0

wahoo, chính xác những gì tôi đang tìm kiếm, cảm ơn! – Hartator

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