繁体   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