2015-08-07 13 views
5

लेती है मेरे पास Nginx, uWSGI और एक पायथन फ्लास्क ऐप के साथ एक सेटअप है। नीचे आप Nginx विन्यास से सर्वर निर्देश पा सकते हैं:Nginx की कार्यकर्ता प्रक्रिया लटकती है और पूर्ण CPU

location /api { 
    try_files $uri @api; 
} 

location @api { 
    include uwsgi_params; 
    uwsgi_pass 127.0.0.1:3031; 
} 

मैं uwsgi --ini /etc/uwsgi.ini साथ uWSGI शुरू करते हैं। यही कारण है कि फ़ाइल इस तरह दिखता है: / काम ठीक करने के लिए

[uwsgi] 
uid = root 
gid = root 
socket = 127.0.0.1:3031 
module = iris.api 
callable = app 

अनुरोध, Nginx रिटर्न "में आपका स्वागत है Nginx करने के लिए" -page। लेकिन /api पर अनुरोध विफल रहे हैं। /api/analog_output/1 पर पहला अनुरोध यूडब्ल्यूएसजीआई के माध्यम से पाइथन ऐप में पारित किया गया है। पाइथन ऐप HTTP 200 प्रतिक्रिया के साथ लौटाता है, लेकिन Nginx क्लाइंट को यह प्रतिक्रिया वापस भेजकर अनुरोध को पूरा नहीं करता है।

--- Operational MODE: single process --- WSGI app 0 (mountpoint='') ready in 11 seconds on interpreter 0x1567e8 pid: 957 (default app) 
--- uWSGI is running in multiple interpreter mode --- spawned uWSGI worker 1 (and the only) (pid: 957, cores: 1) 
[pid: 957|app: 0|req: 1/1] 10.0.0.125() {42 vars in 712 bytes} [Sun Jan 14 17:22:49 2007] GET /api/analog_output/1 => generated 135 bytes in 66 msecs (HTTP/1.1 200) 2 headers in 72 bytes (1 switches on core 0) 

आप नीचे Nginx कार्यकर्ता को strace बाँध के उत्पादन में पा सकते हैं।

17:27:39.127453 gettimeofday({1168795659, 128279}, NULL) = 0 
17:27:39.129180 write(4, "2007/01/14 17:27:39 [info] 970#0"..., 83) = 83 
17:27:39.130169 epoll_wait(8, {{EPOLLIN, {u32=651592, u64=2410198208213320}}}, 512, -1) = 1 
17:27:44.680001 gettimeofday({1168795664, 680353}, NULL) = 0 
17:27:44.682734 accept4(6, {sa_family=AF_INET, sin_port=htons(53845), sin_addr=inet_addr("10.0.0.125")}, [16], SOCK_NONBLOCK) = 3 
17:27:44.685625 epoll_ctl(8, EPOLL_CTL_ADD, 3, {EPOLLIN|EPOLLRDHUP|EPOLLET, {u32=651816, u64=651816}}) = 0 
17:27:44.688045 epoll_wait(8, {{EPOLLIN, {u32=651816, u64=651816}}}, 512, 60000) = 1 
17:27:44.690552 gettimeofday({1168795664, 691682}, NULL) = 0 
17:27:44.693043 recv(3, "GET /api/analog_output/1 HTTP/1."..., 1024, 0) = 426 
17:27:44.695848 stat64("/usr/html/api/analog_output/1", 0xbeb8f730) = -1 ENOENT (No such file or directory) 
17:27:44.698599 epoll_ctl(8, EPOLL_CTL_MOD, 3, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=651816, u64=13170497834292212264}}) = 0 
17:27:44.701146 getsockname(3, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("10.0.0.195")}, [16]) = 0 
17:27:44.703848 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 10 
17:27:44.706386 ioctl(10, FIONBIO, [1]) = 0 
17:27:44.708823 epoll_ctl(8, EPOLL_CTL_ADD, 10, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=651928, u64=2525337691484824}}) = 0 
17:27:44.711468 connect(10, {sa_family=AF_INET, sin_port=htons(3031), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress) 
17:27:44.714574 epoll_wait(8, {{EPOLLOUT, {u32=651816, u64=13170497834292212264}}, {EPOLLOUT, {u32=651928, u64=2525337691484824}}}, 512, 60000) = 2 
17:27:44.717109 gettimeofday({1168795664, 718064}, NULL) = 0 
17:27:44.719461 recv(3, 0xbeb8f89c, 1, MSG_PEEK) = -1 EAGAIN (Resource temporarily unavailable) 
17:27:44.721999 getsockopt(10, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 
17:27:44.724476 writev(10, [{"\0\310\2\0\f\0QUERY_STRING\0\0\16\0REQUEST_ME"..., 716}], 1) = 716 
17:27:44.729618 epoll_wait(8, {{EPOLLIN|EPOLLOUT, {u32=651928, u64=2525337691484824}}}, 512, 60000) = 1 
17:27:44.793473 gettimeofday({1168795664, 794585}, NULL) = 0 
17:27:44.796026 recv(10, "HTTP/1.1 200 OK\r\nContent-Type: a"..., 4096, 0) = 207 

लेकिन अब Nginx का कार्यकर्ता पूर्ण CPU के साथ लटकता है। आगे के अनुरोध संसाधित नहीं किए जाते हैं।

क्या चल रहा है? और मैं इसे कैसे ठीक कर सकता हूं?

उत्तर

0

आपका स्थान ब्लॉक अपूर्ण दिखता है। इस समय एक मशीन के सामने नहीं, लेकिन जोड़ने का प्रयास करें:

proxy_redirect बंद;

संपादित करें: @app स्थान ब्लॉक

+0

दुर्भाग्यवश, यह काम नहीं करता है। – OrangeTux

संबंधित मुद्दे