我有一个web项目,使用nginx,uwsgi,web.py,nginx用于负载均衡,uwsgi用作web服务器,web.py是web框架
我从这个版本开始“/ usr / local / bin / uwsgi -d /home/sheng/www/lr-server/../log/lr-server/uwsgi.log -s 127.0.0.1:8666 -w rc_main -t 20 -M -p 20 --pidfile /home/sheng/www/lr-server/master.pid --enable-threads -R 800“
这个commond意味着它将产生二十个进程来接收请求,并且每个进程最多接收800个请求
如下所示是正常过程
sheng 12414 15051 21 10:04 ? 00:01:45 /usr/local/bin/uwsgi -d /home/sheng/www/lr-server/../log/lr-server/uwsgi.log -s 127.0.0.1:8666 -w rc_main -t 20 -M -p 20 --pidfile /home/sheng/www/lr-server/master.pid --enable-threads -R 800
15051是父母pid
通常它工作正常,但是当服务器非常繁忙并且许多请求需要很长时间时会产生奇怪的过程,如下所示是奇怪的过程:
sheng 23370 1 0 09:08 ? 00:00:00 /usr/local/bin/uwsgi -d /home/sheng/www/lr-server/../log/lr-server/uwsgi.log -s 127.0.0.1:8666 -w rc_main -t 20 -M -p 20 --pidfile /home/sheng/www/lr-server/master.pid --enable-threads -R 800
你会注意到,这个进程的pid是23370,但是它的父pid是1,它就像一个已经失效的进程。但是,实际上,这个进程占用内存并且不会收到任何请求
我曾希望产生20个正常流程来接收请求,但是现在,它处理了超过80个starnge流程,谁能告诉我为什么以及我该怎么做才能解决这个问题
答案 0 :(得分:0)
我找到了原因
在我的python项目中,有时候python会使用R来进行科学计算
R很慢,所以我的同事使用并行技术,R会分叉一些子进程来计算
不幸的是,如果请求超过20秒,uwsgi会杀死python进程,但由于原因不明,那些R分叉的子进程不会被杀死,它们只是我看到的奇怪过程