我現在有一個問題,並會很高興與任何想法人可能有。來自運動鞋工作人員的Rails網絡電話極其緩慢
問題:在運動鞋工作人員中運行時,網絡調用非常慢(Redis,HTTP)。例如,在redis中設置密鑰需要約20秒,而HTTP獲取約38秒。從rails c
開始,同樣的redis調用需要1秒鐘的時間,而HTTP調用則需要1秒鐘的時間。
設置:將盡可能簡潔,因爲我可以在這裏。
- 一切都在泊塢運行(滑軌+工人,Redis的,Postgres的等)
- 的Rails 4.2.7是主要的Web應用程序,使用作爲PUMA作爲Web服務器
- 有兩個背景通過運動鞋處理並通過RabbitMQ消息觸發的作業。這些「工作人員」包括對從ActiveRecord繼承的類進行實際活動(即進行HTTP調用或與Redis進行交互)的調用
- 我已經簡化並且只在Worker類中進行HTTP調用(它什麼都不做) 。我也將它移到前臺進行調試。
Puma配置爲以「單一」模式運行(無人員,1個線程)。這是我目前的鞋的配置:
# config/initializers/02_sneakers.rb
Sneakers.configure daemonize: false,
amqp: "amqp://rabbitmq",
# log: "log/sneakers.log",
log: STDOUT,
pid_path: "tmp/pids/sneakers.pid",
threads: 2,
workers: 1,
durable: true,
vhost: '/',
exchange: 'exchange',
exchange_type: 'direct'
Sneakers.logger.level = Logger::DEBUG
我的工人:
class StepWorker
include Sneakers::Worker
from_queue "queue", env: nil, timeout_job_after: 5.minutes, durable: true, ack: true
def work(raw_event)
logger.info { 'StepWorker received params: ' + raw_event }
message = JSON.parse(raw_event)
response = ""
time = Benchmark.measure {
response = RestClient.get('http://store/', { accept: :json })
}
logger.info { "response: #{response.length} in #{time.real}" }
ack!
end
end
我也有一個issue用在運動鞋的一些人去。任何想法都非常感謝!
只是添加另一條信息。通過在'development.rb'中更改以下內容,我的性能問題得到解決(擊倒木頭):'config.assets.debug = false' – krsyoung