<br><br><div class="gmail_quote">On Thu, Jan 24, 2013 at 3:57 PM, Lukasz Flis <span dir="ltr">&lt;<a href="mailto:l.flis@cyf-kr.edu.pl" target="_blank">l.flis@cyf-kr.edu.pl</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi All,<br>
<br>
This is the question for experienced torque developers before I<br>
brake something up by fixing it wrong.<br>
<br>
We are facing pbs_server lockups from time to time. In such case server<br>
restart is required to make it work again.<br>
<br>
We are running torque 2.5.12<br>
<br>
strace of the locked pbs_server process shows unfinished write() syscall<br>
which waits this way forever.<br>
<br>
gdb backtrace tells more:<br>
warning: no loadable sections found in added symbol-file system-supplied<br>
DSO at 0x7fffcf371000<br>
0x0000003b300c6860 in __write_nocancel () from /lib64/libc.so.6<br>
(gdb) bt<br>
#0  0x0000003b300c6860 in __write_nocancel () from /lib64/libc.so.6<br>
#1  0x00000033dcc13f67 in write_nonblocking_socket (fd=165,<br>
buf=0x283a9ac4, count=10205738)<br>
    at ../Libifl/nonblock.c:31<br>
#2  0x00000033dcc1f7ef in DIS_tcp_wflush (fd=165) at ../Libifl/tcp_dis.c:377<br>
#3  0x000000000042869a in dis_reply_write (sfds=165, preply=0x134e3748)<br>
at reply_send.c:188<br>
#4  0x0000000000428815 in reply_send (request=0x134e32d0) at<br>
reply_send.c:283<br>
#5  0x0000000000443aea in req_stat_job_step2 (cntl=0x1089a940) at<br>
req_stat.c:725<br>
#6  0x0000000000442ebd in req_stat_job (preq=0x134e32d0) at req_stat.c:308<br>
#7  0x00000000004272f5 in dispatch_request (sfds=165,<br>
request=0x134e32d0) at process_request.c:984<br>
#8  0x000000000042701e in process_request (sfds=165) at<br>
process_request.c:730<br>
#9  0x00000033dcc2cdca in wait_request (waittime=1, SState=0x747418) at<br>
../Libnet/net_server.c:508<br>
#10 0x0000000000423b6c in main_loop () at pbsd_main.c:1203<br>
#11 0x0000000000424b07 in main (argc=3, argv=0x7fffcf288e58) at<br>
pbsd_main.c:1802<br>
(gdb)<br>
<br>
<br>
For me it looks like write_nonblocking_socket function sometimes is<br>
getting blocking socket for some reason and then waits on write forever<br>
<br>
In such case timeout check doesn&#39;t work because it is constructed with<br>
assumption that write never blocks here<br>
<br>
This way some misbehaving client with unstable network of firewall<br>
problems can cause pbs_server to stop serving requests<br>
<br>
I see no checks whether socket is blocking or not in this function.<br>
On the other hand read_nonblocking_socket is doing such checks and turns<br>
O_NONBLOCK if necessary<br>
<br>
As write_nonblocking_socket is quite frequently used piece of code I<br>
would like to ask if changing blocking-mode settings for socket inside<br>
the function may brake some functionality or slow things down significantly?<br>
<br>
Any one can confirm such pbs_server hangs has been seen around the globe?<br>
<br>
<br>
PS&gt; I would like to remind you of unnoficial #torque IRC channel on<br>
freenode network where you sometimes can get quick help :)<br>
<br>
Best Regards<br>
--<br>
Lukasz Flis<br>  </blockquote><div><br>Lukasz,<br><br>From what you are describing and the backtrace I would say you are correct. it seems we are getting stuck on a blocking write. Ensuring this is non-blocking is the right thing to do.<br>
<br>Something else to think about, if a write gets blocked it is because the receiving side is not reading the data.<br><br>Regards<br><br>Ken<br></div></div><br>