簡體   English   中英

為什么我的Rack應用程序掛起?

[英]Why is my Rack app hanging?

我編寫了一個開源的Rack應用程序和核心程序庫,以傳輸Tradeking.com的股票報價。 這是機架應用程序: https : //github.com/chaddjohnson/trading_websocket_service 這是核心庫: https : //github.com/chaddjohnson/trading_core

我修改了trading_core / lib / trading_core / quote_streamer / tradeking.rb以將流數據輸出到控制台,如下所示:

@http.stream do |data|
  puts data

流式傳輸幾個小時並輸出到控制台后,它只是凍結了。 我完全不知道為什么。 我已盡力確保任何循環都不是無限的。 我已經調試了一個多星期了。

任何想法為什么會這樣?

以下是我認為可能會發生的主要文件:

第一次查看您的代碼時,我可以想象出出現問題的兩個原因:

  1. 您正在通過Tradeking達到速率限制(可能使用了256個以上的符號或腳本的多個實例(他們不喜歡這樣)或更新符號的速度太快(更改它們)
  2. 解析每個傳入消息時,您可能會“阻塞”流。 我看到很多人使用Twitter流,解析結果並將其寫入數據庫。 它太慢了,然后開始阻塞。

很高興我可以將您推向正確的方向!

我最初的預感是關於開放連接的:

您可能需要確保關閉連接:@ http.close在您引用的方法末尾的suresure塊中

然后進行一些取證:

聽起來,您必須深入研究正在運行的紅寶石流程,以找出造成阻塞的原因。 當然,取決於您所使用的操作系統,在Mac和Linux上,您可以使用gdb,strace,dtrace等工具。例如:ruby.dzone.com/articles/debugging-stuck-ruby-processes

我們發現select被稱為很多東西,這使我們對連接保持懷疑。 原來問題出在通過@api ||= ...init code...重用@api ||= ...init code...連接@api ||= ...init code...

很高興您能夠找到它是什么! 感謝您發布解決方案!

暫無
暫無

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

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