On Wed, Jul 4, 2012 at 5:20 PM, Chuck Remes <[email protected]> wrote:
>
> On Jul 4, 2012, at 5:05 AM, Raphael Bauduin wrote:
>
>> Hi,
>>
>> I'm using the ruby zmq bindings in a web application. I regularly get
>> error message "ZMQ::Error: Interrupted system call" related to a send.
>> This is in a Ruby on Rails application served with passenger, which
>> spawns worker processes. I think I have identified a process that
>> generated this error, and an strace on it shows no activity at all.
>> This process however keeps open a connection to the mysql server. An
>> accumulation of such errors will eventually become problematic server
>> side, in addition to clients getting an error page and messages being
>> lost.
>
> I'm assuming this happens under MRI. Is it 1.8.x or 1.9.x?

It is REE: ruby 1.8.7 (2012-02-08 MBARI 8/0x6770 on patchlevel 358)
[x86_64-linux], MBARI 0x6770, Ruby Enterprise Edition 2012.02

>
> Do you see the same behavior when running your app with JRuby or Rubinius?
>

The problem is that I don't have the problem systematically. It
happens once every x days in production where there are thousands of
page views that run the code in question. So it's very hard to
reproduce.

>> I'm looking for advice in avoiding this error and possibly for further
>> debugging hints. Related to that I have several questions:
>> - Should I simply catch this exception, and retry the send if needed?
>> As this is done in the process sending the page content back to the
>> client, won't it possibly make some requests too slow? (This could
>> still be better than an error as we have currently)
>
> Using exception handling for flow control in Ruby can be slow. But unless you 
> are building the next amazon.com then it probably won't hurt you too much. 
> You could give this a try though it's always better to figure out the actual 
> underlying cause and fix it. Using exceptions here is just a band-aid.
>
>> - If my understanding is correct, the problem occurs with blocking
>> syscalls, and requests having the error don't return any content to
>> the client. But what happens if I make the send non blocking?
>> (http://zeromq.github.com/rbzmq/classes/ZMQ/Socket.html#M000010)
>
> Try it and see.

My question was more about knowing if the same problem could occur. As
mentioned above, I can't reproduce the problem systematically.

>
>> - Finally, what might interrupt the syscall? Any interesting read about this?
>
> Something in your app is generating a signal. The technique I use to figure 
> out these kinds of errors is to run my app under other Ruby runtimes. Most of 
> the time they will fail differently and/or give me an exact backtrace 
> pointing to the source of the problem.

Can it also be a signal coming from outside the app, eg passenger?

Or can it be due to the fact that I set the LINGER option?
  s.setsockopt(ZMQ::LINGER,100)
  ..
  s.send(m)
  s.close

Any suggestion on this would be really welcome!

>
> Lastly, you may want to look at the ffi-rzmq gem (disclaimer: I'm its 
> maintainer). It has a different API from the zmq gem but it appears to enjoy 
> wider usage by the community so it may be a bit more stable.

Thanks for the tip, I add it as an option, but I'd like to understand
what's going on too.

Raph


>
> cr
>
> _______________________________________________
> zeromq-dev mailing list
> [email protected]
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev



-- 
Web database: http://www.myowndb.com
Free Software Developers Meeting: http://www.fosdem.org
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to