17

Tôi đã tìm kiếm trong nhiều ngày nhưng không thể tìm thấy bất kỳ câu trả lời liên quan đến câu hỏi này.ActionDispatch :: Routing :: RouteSet Rails # gọi 4.1 rất chậm

Trong ứng dụng Rails 4.1 được lưu trữ trên Heroku, khi tải tăng lên, một số yêu cầu PUT nhận được REALLY chậm. Người chậm nhất hôm nay là 53 giây. Tất cả không có cơ sở dữ liệu (MongoDB) đăng ký bất kỳ truy vấn chậm nào. Thông thường, yêu cầu này mất 0.3ms nên khá nhanh. Yêu cầu chậm bất kể trọng tải là bao nhiêu.

Khi cài đặt Di tích mới, nó làm sáng tỏ thêm một chút về tình hình, nhưng tôi vẫn không biết phải khắc phục vấn đề này ở đâu.

Các mã trong bộ điều khiển là nhanh, nhưng theo New Relic, điều đó là chậm là ActionDispatch :: Routing :: RouteSet # gọi

Dưới đây là một bãi chứa những gì New Relic báo cáo:

Slowest components      Count Duration % 
ActionDispatch::Routing::RouteSet#call 1 53,000 ms 100% 
Plugin::FetchablesController#update  1 38 ms  0% 
Rails::Rack::Logger#call    1 1 ms  0% 
ActionDispatch::Cookies#call   1 1 ms  0% 
ActiveSupport::Cache::Strategy::LocalCache::Middleware#call 1 0 ms 0% 
Rack::Runtime#call      1 0 ms  0% 
Total          53,000 ms 100% 

Một số thông tin khác có thể giúp hoặc có thể có liên quan đến việc này. Tôi có một bí danh cho các tuyến đường, nhưng tôi không thể thấy tại sao điều đó lại quan trọng.

namespace :plugin do 
    resources :fetchables, path: :minables 
end 

Bất kỳ ý tưởng nào về những gì có thể xảy ra và những gì tôi có thể làm để khắc phục sự cố sẽ được đánh giá cao.

Cập nhật Vì vậy, có vẻ như đây là bộ nhớ có liên quan. Khi chúng tôi nâng cấp lên Performance Dynos, chúng tôi đã ngừng xem các lỗi này. Nhưng đây là thứ dường như được cấu hình nghiêm túc ở Heroku.

+0

Tôi cũng đang gặp phải vấn đề tương tự. Bạn đã tìm ra được giải pháp nào chưa? Bạn đang sử dụng phiên bản đường ray nào? –

+0

Không có giải pháp nào. Tôi đã thu hẹp vấn đề xuống để điều đó xảy ra khi người dùng thực hiện cập nhật lớn. Đặc biệt là nếu họ đang kết nối chậm. Là đường ray có lẽ dành thời gian của mình trong cuộc gọi RouteSet khi nó đang nhận dữ liệu cho các tham số? Tôi luôn nghĩ rằng nó sẽ được nhận như một phần lớn trong yêu cầu đã hoàn thành? –

+0

Tôi phải đối mặt với kịch bản như vậy với các cuộc gọi đơn giản. Nó không có khối dữ liệu lớn trong các tham số. Tôi nghi ngờ rằng nó có thể là do đối tượng env lớn giữ dữ liệu phiên lớn. –

Trả lời

1

Sự suy thoái là một chỉ báo rằng nó Heroku cụ thể. Có lẽ lý do tại sao bạn thấy vấn đề biến mất khi bạn nâng cấp lên Performance Dynos.