I am using CentOS 7 with uwsgi(2.0.17.1), uwsgi-plugin-python2 (2.0.17) and Flask (1.0.2).

I have a flask application that runs many shell commands. Some of them hangs indefinitely. I am sharing one of them as an example below, it is easy to reproduce.
I am using uwsgi in threaded mode.

*    #!/usr/bin/python**
**    from flask import Flask**
**    import subprocess**
****
**    app = Flask(__name__)**
****
**    @app.route("/test/")**
**    def test():**
**        print 'state 1'**
**        p = subprocess.Popen(['ntpdate', '-u', '0.pool.ntp.org'],close_fds=True)**
**        print 'state 2'**
**        out, err = p.communicate()**
**        print 'state 3'**
****
**        print 'output: {}'.format(out)**
**        print 'error: {}'.format(err)**
**        return 'finish'*

uwsgi command:

*> \# uwsgi --ini uwsgi.conf --http-socket :8001*

uwsgi conf file:

*   [uwsgi]**
**    #virtual env's base folder**
**    base = /root/plaground**
**    home = /usr/**
****
**    #cmd options**
**    bin = /usr/sbin/uwsgi**
****
**    #python module to import**
**    module = app:app**
****
**    pythonpath = /root/playground**
****
**    catch-exceptions = true**
****
**    plugins-dir = /usr/lib64/uwsgi/**
**    plugins = python**
****
**    need-app = true**
****
**    master = true**
**    threads = 10*

After starting uwsgi, first request to /test route completes succesfully, Second one stucking on command line execution and holds response forever.

The first call output:

*state 1**
**    state 2**
**    21 Sep 16:02:48 ntpdate[19943]: adjust time server 78.46.53.11 offset -0.000224 sec**
**    state 3**
**    output: None**
**    error: None*

The second call output:

*state 1**
**    state 2*


ps aux output after second call:

*# ps aux | grep ntpdate**
**    root     20820  0.0  0.0  23632  1516 pts/3    S<+ 16:03   0:00 ntpdate -u 0.pool.ntp.org*

strace -p 20820 output:

*   # strace -p 20820**
**    strace: Process 20820 attached**
**    restart_syscall(<... resuming interrupted call ...>) = 0 **
**    poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}], 2, 60000) = 0 (Timeout)** **    poll([{fd=3, events=POLLIN}, {fd=4, events=POLLIN}], 2, 60000) = 0 (Timeout*)

process fd list:

*    # ls -l /proc/20820/fd**
**    total 0**
**    lr-x------ 1 root root 64 Eyl 21 16:05 0 -> /dev/null**
**    lrwx------ 1 root root 64 Eyl 21 16:05 1 -> /dev/pts/3**
**    lrwx------ 1 root root 64 Eyl 21 16:03 2 -> /dev/pts/3**
**    lrwx------ 1 root root 64 Eyl 21 16:05 3 -> socket:[463358]**
**    lrwx------ 1 root root 64 Eyl 21 16:05 4 -> socket:[463359]*

lsof output:

*# lsof -p 20820**
**    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME**
**    ntpdate 20820 root  cwd    DIR  253,0       53 17726086 /root/playground**
**    ntpdate 20820 root  rtd    DIR  253,0      244       64 / **
**    ntpdate 20820 root  txt    REG  253,0   110240   224413 /usr/sbin/ntpdate ** **    ntpdate 20820 root  mem    REG  253,0   106848   361769 /usr/lib64/libresolv-2.17.so ** **    ntpdate 20820 root  mem    REG  253,0    31824    31549 /usr/lib64/libnss_dns-2.17.so ** **    ntpdate 20820 root  mem    REG  253,0    62184    31551 /usr/lib64/libnss_files-2.17.so ** **    ntpdate 20820 root  mem    REG  253,0    19896   142588 /usr/lib64/libattr.so.1.1.0 ** **    ntpdate 20820 root  mem    REG  253,0    90664   142317 /usr/lib64/libz.so.1.2.7 ** **    ntpdate 20820 root  mem    REG  253,0    19776    95386 /usr/lib64/libdl-2.17.so ** **    ntpdate 20820 root  mem    REG  253,0  2173512    95380 /usr/lib64/libc-2.17.so ** **    ntpdate 20820 root  mem    REG  253,0    20032   142590 /usr/lib64/libcap.so.2.22 ** **    ntpdate 20820 root  mem    REG  253,0  2512832   190324 /usr/lib64/libcrypto.so.1.0.2k ** **    ntpdate 20820 root  mem    REG  253,0   164240    95374 /usr/lib64/ld-2.17.so **
**    ntpdate 20820 root    0r   CHR    1,3      0t0     5078 /dev/null **
**    ntpdate 20820 root    1u   CHR  136,3      0t0        6 /dev/pts/3 **
**    ntpdate 20820 root    2u   CHR  136,3      0t0        6 /dev/pts/3 **
**    ntpdate 20820 root    3u  sock    0,7      0t0   463358 protocol: UDP ** **    ntpdate 20820 root    4u  sock    0,7      0t0   463359 protocol: UDPv6 *

If I try ntpdate command with shell or flask builtin web server, this problem is not occuring. I found similar problem on uwsgi github (https://github.com/unbit/uwsgi/issues/1034) page but this fix does not solve my problem.

I also tried it with uwsgi parameters close-on-exec and close-on-exec2. No luck with these also.

Thanks for helping.

_______________________________________________
uWSGI mailing list
uWSGI@lists.unbit.it
http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi

Reply via email to