[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Luasocket: poll vs select
- From: Tim Caswell <tim@...>
- Date: Tue, 21 Feb 2012 10:22:16 -0600
If you want to switch to a system with epoll/kqueue (depending on the arch), libuv is great. I maintain a version of lua that has libuv at it's core for single-threaded and highly efficient parallel I/O. It can easily handle 500 concurrent users and thousands of requests per second. The down side is that it's not stock lua and most existing third-party lua modules won't work out of the box. (different I/O model, slightly different module system) http://luvit.io/
I don't think this will be easy to integrate with freeswitch since the luvit binary replaces the lua binary.
As far as the original question, I'm afraid I am unable to help there.
On Tue, Feb 21, 2012 at 9:13 AM, Javier Gallart <firstname.lastname@example.org>
we are running a freeswitch based application that uses intensively the Lua XML-RPC library. Everything runs perfectly fine until we reach 12-15 calls/sec, which can be safely assumed to mean to 12-15 http requests/seq. At that point some of the invocations of xmlrpc.http "call" method fails with either with "Resource Temporarily unavailable" or "Bad file descriptor". If we push it a bit harder, freeswitch dies:
Core was generated by `./freeswitch -nc -ncwait -nonat'.
Program terminated with signal 11, Segmentation fault.
#0 0x00002aaab291dd70 in socket_recv () from /usr/local/lib/lua/5.1/socket/core.so
I read here: http://wiki.voiceworks.pl/display/~pawel/Luasocket+core+dumps+in+socket_waitfd
that usage of poll instead of select was preferred. I just tried it and in a test environment it woks perfect, I've been able to reach more than 20 calls/sec without a single failure. However, I'm not really sure of what I'm doing and I'd like to know if this change could have any side effect. What do you think?