Hi, Everyone: I use libev in my network server. I have one main thread with default event loop for bind/listen/accept, then dispatch the cilent fd to 4 worker thread, using ev_async and a blocking queue. Each of the worker has a ev_base_new(0). Worker monitor the client fd's EV_READ and EV_WRITE, parsing data into data structure, write response back, in ansyc-callback way.
Everything goes will when startup. After several client connections, the CPU are higher and higher. Something must be wrong. 1. I kill -SIGSEGV the process, gdb it, found it's busy on epoll_wait() 2. I use strace/lstrace -f -p the process, it's also busy on epoll_wait() 3. After a lot of client connections, libev abort with: libev: cannot allocate 2147479536 bytes, aborting. 4. the epoll_wait() somethings are empty, somethings has 1 or 2 or more active fd's POLL_IN or POLL_OUT not handled, but i haven't receive any callback call 5. The one-thread version is ok. 6. I guess, that maybe something wrong when i using libev in mutil-thread env, or some fd are wrongly closed, or some fd are missing but events continue coming. Sorry for my english. Could anyone help?
_______________________________________________ libev mailing list [email protected] http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev
