2015-07-12 82 views
1

由于CVE使我们的应用程序升级到Rails 4.1.12和Rack 1.5.5,我们似乎会随机出现502。约1%的请求,我不能一直重新创建的问题,只有观察它(这是非常令人沮丧的,你可以想象)。我们一直在运行4.1.8和机架1.5.2 ...我尝试降级Rack,但仍然观察问题,但由于遵从的性质等原因,返回到Rails 4.1.8可能会非常复杂。乘客EBADF文件描述符异常502

我们使用带有nginx的Ruby 2.1.5的Passenger 5.0.6(prod)和5.0.13(staging)。

我看到的模式是:

nginx-error: [ 2015-07-12 16:12:05.3947 2176/7f97fb7fe700 age/Hel/Req/Utils.cpp:89 ]: [Client 7-50] Sending 502 response: application did not send a  complete response 
nginx-error: App 2210 stderr: [ 2015-07-12 16:12:05.9232 2813/0x007f6eb5056088(Worker 1) utils.rb:85 ]: *** Exception Errno::EBADF in Passenger  RequestHandler's client socket (Bad file descriptor - writev()) (process 2813, thread 0x007f6eb5056088(Worker 1)): 
nginx-error: App 2210 stderr: #011from /usr/lib/ruby/vendor_ruby/phusion_passenger/ruby_core_io_enhancements.rb:41:in `writev' 
nginx-error: App 2210 stderr: #011from /usr/lib/ruby/vendor_ruby/phusion_passenger/ruby_core_io_enhancements.rb:41:in `writev' 
nginx-error: App 2210 stderr: #011from /usr/lib/ruby/vendor_ruby/phusion_passenger/utils/unseekable_socket.rb:126:in `writev' 
nginx-error: App 2210 stderr: #011from /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/thread_handler_extension.rb:177:in `process_body' 
nginx-error: App 2210 stderr: #011from /usr/lib/ruby/vendor_ruby/phusion_passenger/rack/thread_handler_extension.rb:104:in `process_request' 
nginx-error: App 2210 stderr: #011from /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:149:in  `accept_and_process_next_request' 
nginx-error: App 2210 stderr: #011from /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler/thread_handler.rb:110:in `main_loop' 
nginx-error: App 2210 stderr: #011from /usr/lib/ruby/vendor_ruby/phusion_passenger/request_handler.rb:414:in `block (3 levels) in start_threads' 
nginx-error: App 2210 stderr: #011from /usr/lib/ruby/vendor_ruby/phusion_passenger/utils.rb:111:in `block in create_thread_and_abort_on_exception' 

我已经提高了IRC#passenger这个问题,并没有看到任何人遇到同样的问题。有关如何确定究竟是什么造成这一点的任何提示?

+0

Passenger是否以Nginx作为模块编译?如果是这样,请显示Nginx的版本和这个特定的Passenger模块 – Anatoly

+0

我们使用Phusion的官方deb回购安装了乘客... – bruno

回答

1

乘客作者在这里。

我相信这个问题是由应用程序中的东西造成的,也许是宝石 - 不是乘客。 EBADF错误是由应用程序引发的,所以很可能某些gem(可能是具有本机扩展的gem)关闭了错误的文件描述符。但是,它是什么宝石,我不知道。调试这个标准的方法是一个接一个地禁用宝石,直到找到罪魁祸首。如果你的代码依赖于宝石,这可能很难,但是处理这个问题的方法并不多。

+0

谢谢@hongli ...真的很感激,我们一直在撞墙,但我们一直在撞墙正在慢慢地得出相同的结论,然而这种调试可能是痛苦的。当我们发现发生了什么或者至少我们如何神奇地修复它时,我会回复:) – bruno