Tag: timeout

当Memcachier达到缓存限制时,Heroku请求超时

我有一个使用Memcachier(Dalli作为客户端)部署到Heroku的Rails应用程序。 我正在使用免费的附加组件(它提供25 MB的缓存)。 我们开始接收来自heroku的请求超时,经过调试,我们发现手动刷新Memcachier解决了这个问题。 当Memcachier达到接近其限制的水平时发生超时,例如20 MB(当限制为25 MB时)。 为什么Memcachier不会随着时间的推移释放缓存空间? 是否有任何丢失的配置告诉Memcachier 在缓存达到一定大小时刷新 ? 我的conf: application.rb中 config.cache_store = :dalli_store production.rb client = Dalli::Client.new config.action_dispatch.rack_cache = { :metastore => client, :entitystore => client, :allow_reload => false }

调整Nokogiri连接的超时

为什么nokogiri在服务器繁忙时等待几秒钟(3-5)并且我一个接一个地请求页面,但是当这些请求处于循环中时,nokogiri不会等待并抛出超时消息。 我正在使用超时块包装请求,但nokogiri根本不等待那个时间。 有关此的任何建议程序? # this is a method from the eng class def get_page(url,page_type) begin timeout(10) do # Get a Nokogiri::HTML::Document for the page we’re interested in… @@doc = Nokogiri::HTML(open(url)) end rescue Timeout::Error puts “Time out connection request” raise end end # this is a snippet from the main app calling eng class # receives […]

Ruby:open导致死锁

首先,我是Ruby的初学者,并不熟悉Ruby管理代码的方式并使其工作,所以我确实认为问题是我不知道如何正确使用ruby。 我遇到的问题是死锁,但我没有在我的程序中使用任何线程。 此外,错误仅发生在每1000到1500次函数调用一次,这使得查明和纠正非常困难。 发生问题时,这是完整的错误消息: /usr/lib/ruby/2.3.0/timeout.rb:95:in `join’: No live threads left. Deadlock? (fatal) from /usr/lib/ruby/2.3.0/timeout.rb:95:in `ensure in block in timeout’ from /usr/lib/ruby/2.3.0/timeout.rb:95:in `block in timeout’ from /usr/lib/ruby/2.3.0/timeout.rb:101:in `timeout’ from /usr/lib/ruby/2.3.0/net/http.rb:878:in `connect’ from /usr/lib/ruby/2.3.0/net/http.rb:863:in `do_start’ from /usr/lib/ruby/2.3.0/net/http.rb:852:in `start’ from /usr/lib/ruby/2.3.0/open-uri.rb:319:in `open_http’ from /usr/lib/ruby/2.3.0/open-uri.rb:737:in `buffer_open’ from /usr/lib/ruby/2.3.0/open-uri.rb:212:in `block in open_loop’ from /usr/lib/ruby/2.3.0/open-uri.rb:210:in `catch’ from /usr/lib/ruby/2.3.0/open-uri.rb:210:in `open_loop’ from /usr/lib/ruby/2.3.0/open-uri.rb:151:in […]

通过SO_RCVTIMEO套接字选项在Ruby中设置套接字超时

我试图通过SO_RCVTIMEO套接字选项在Ruby中使套接字超时,但它似乎对任何最近的* nix操作系统没有影响。 使用Ruby的Timeout模块不是一个选项,因为它需要为每个超时生成并加入线程,这可能会变得很昂贵。 在需要低套接字超时且具有大量线程的应用程序中,它基本上会导致性能下降。 在许多地方都已经注意到这一点,包括Stack Overflow 。 我已经阅读了Mike Perham关于此主题的优秀post,并努力将问题减少到一个可运行代码文件,创建了一个将接收请求的TCP服务器的简单示例,等待请求中发送的时间量和然后关闭连接。 客户端创建套接字,将接收超时设置为1秒,然后连接到服务器。 客户端告诉服务器在5秒后关闭会话,然后等待数据。 客户端应在一秒钟后超时,但在5之后成功关闭连接。 #!/usr/bin/env ruby require ‘socket’ def timeout sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0) # Timeout set to 1 second timeval = [1, 0].pack(“l_2”) sock.setsockopt Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, timeval # Connect and tell the server to wait 5 seconds sock.connect(Socket.pack_sockaddr_in(1234, ‘127.0.0.1’)) sock.write(“5\n”) # Wait for data to […]