簡體   English   中英

當許多工人時,延遲工作運行緩慢

[英]delayed_job running slow when many workers

我們的應用程序有一個搜索任務,運行時間不到30秒。 我們使用delay_job將任務移至后台,效果很好。 為了處理更多的搜索請求,我們打開了60個delayed_job工人,當更多的工人同時工作時,就會出現問題。

如果我向服務器發送一個請求,則大約需要30秒才能完成工作; 然后,我嘗試向服務器發送10個請求,每個作業需要3分鍾以上才能完成...如果我嘗試同時向服務器發送30個請求,則每個作業需要26分鍾才能完成..... .....天哪...

我們的搜索任務可以分為兩部分。 首先,使用線程(http://www.tutorialspoint.com/ruby/ruby_multithreading.htm)向第三方服務器發送10-20個API請求,然后等待響應,大約需要15秒。 其次,我們處理響應數據,搜索本地的mySQL DB,進行一些循環和計算,最后將結果保存到文件系統(文件位置是使用NFS的共享空間),大約需要10秒鍾才能完成。

我使用Linux的“ top”命令,發現運行1個作業時,有時需要100%的cpu功耗。 當我同時運行30個作業時,每個作業占用<10%的cpu功率,我想這就是每個作業需要26分鍾的原因...

目前我不知道如何提高速度,使其支持更多的用戶,速度約為30秒...

我們使用的是Rails 3.0.x,Ruby 1.9.2p290(真正的線程?),這是一台運行4個VM(DB,Ngnix,Ruby / Unicorn,Ruby / delayed_job)的服務器。

我現在的想法是:-真正的線程(如何測試我們是否是?)-jRuby(在這種情況下有幫助嗎?)-網絡IO(服務器管理員說不太可能)-文件系統/ NFS IO(服務器管理員說沒有)可能)

任何有類似經驗的人都可以給我一些想法,以便我深入探討問題所在? 非常感謝!

New Relic可以讓您了解工作在哪里花費時間。 您可以對其進行設置以監視您的作業並記錄每個作業的詳細跟蹤。 有14天的免費試用期,其中包括詳細的跟蹤功能(“事務跟蹤”)。

瓶頸可能在您提到的任何領域。 如果數據庫是您的瓶頸,則可以通過添加索引來優化查詢。 如果您的Web請求不是真正並行執行(不確定代碼的樣子),則可以使用typhoeus之類的東西為您處理所有並行業務。

Savon正在處理來自SOAP請求的XML,因此請確保您使用的是更快的XML庫,例如libxml或nokogiri。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM