问题描述
当根据第二课时的内容去试项目的时候,发现uwsgi打开时不起作用了,网站也打不开了,
gg,然后去看端口,端口也是ok的,然后ps -ef 了一下,发现有好多个<font color=#FF0000>uwsgi --ini </font> ,真的好多个,傻傻的kill了半天,之前以为uwsgi运行完就结束了,,没想到它并不会结束,而是一直存在。知道了原因,这次出现问题就迎刃而解了。
其实原因如下:
可以通过uwsgi --ini /etc/uwsgi.ini,来产生一个主进程uwsgi.ini进程,进程号会出现在uwsgi.ini中配置的pid文件中。
由于每次关闭shell时都没有 uwsgi --stop 但是每次开启shell时都有进行--ini /etc/uwsgi.ini 导致产生多个uwsgi进程
并且另一个原因,请看配置:
uwsgi 的配置:
[uwsgi]
socket= :8000 #内网也是可以的
chdir=/home/ljh/project/Hello
wsgi-file=Hello/wsgi.py
processes=4 #为我们的项目开启了4个可以并发的进程,可以很快的响应,但是比较耗内存
threads=2 #为每个进程开启了两个线程
master=True
pidfile=/usr/local/uwsgi/uwsgi.pid
daemonize=/usr/local/uwsgi/uwsgi.log
从上面的配置内容看到,相当于一次开了8个线程,这样的话,相当于uwsgi --ini /etc/uwsgi.ini 执行一次就产生4个进程,8个线程(但是事实好像不止8个,后面再详细看原因)
解决方法
step1. 降低配置
其实高配置真的对于这种自己玩的小服务器是不太合适的,首先我决定配置改低一点:
[uwsgi]
socket= :8000 #内网172.21.*.*:8000也是可以的 (*是被我隐藏了,这里填自己的内网就行)
chdir=/home/ljh/project/Hello
wsgi-file=Hello/wsgi.py
processes=2 #为我们的项目开启了2个可以并发的进程,可以很快的响应,但是比较耗内存
threads=2 #为每个进程开启了两个线程
master=True
pidfile=/usr/local/uwsgi/uwsgi.pid
daemonize=/usr/local/uwsgi/uwsgi.log
step1. 改进开启方式
每次打开uwsgi之后可能会忘了关,那么每次开启一个shell时,可以直接先运行下面的命令:
uwsgi --reload $uwpid
#$uwpid是我把uwsgi的pid文件路径加进了~/.bashrc之后的变量名,这样方便后面用
#加入的方法是打开~/.bashrc然后再文件的后面追加一句export $uwpid="/usr/local/uwsgi/uwsgi.pid"
#然后 source ~/.bashrc就可以了
step2. uwsgi关闭和重启
uwsgi --reload $uwpid #重启
uwsgi --stop $uwpid #关闭,这样就不用一个个kill了