作用:可以开更多的python项目
https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html
pip install uwsgi
如果不可以:
apt-get install build-essential python3.x-dev
python3.x-dev自己改
作用:分配工作的人
https://uwsgi-docs.readthedocs.io/en/latest/Download.html
放到 /usr/local
cd /usr/local
tar zxvf uwsgi-2.0.18.tar.gz # 解压文件夹
cd uwsgi-2.0.18
make
baidu.ini放在与baidu.py同一个文件夹
[uwsgi]
socket =127.0.0.1:8000
pythonpath =/xxx/xxx/XXX/venv # 这里填python的虚拟环境
wsgi-file =/var/www/XXX/xxx/baidu.py
processes =4
threads =2
home = /var/www/XXX
master = true #启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程。
callable =app
enable-threads=true # 允许程序内部启动多线程,为定时器
preload=true #用--preload启动uWSGI,确保scheduler只在loader的时候创建一次,为定时器
lazy-apps=true
max-requests =5000# 每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启)
reload-on-rss=500#设置工作进程使用物理内存超过N MB就回收重启
reload-on-as= 500#设置工作进程使用虚拟内存超过N MB就回收重启
#python-autoreload=1#这是自动重启,有新文件替换可以自动重启,上线后就要取消掉
命令:lscpu
Architecture: i686 #架构686
CPU(s): 2 #逻辑cpu颗数是2
Thread(s) per core: 1 #每个核心线程数是1
Core(s) per socket: 2 #每个cpu插槽核数/每颗物理cpu核数是2
CPU socket(s): 1 #cpu插槽数是1
Vendor ID: GenuineIntel #cpu厂商ID是GenuineIntel
CPU family: 6 #cpu系列是6
Model: 23 #型号23
Stepping: 10 #步进是10
CPU MHz: 800.000 #cpu主频是800MHz
Virtualization: VT-x #cpu支持的虚拟化技术VT-x(对此在下一博文中解释下http://hi.baidu.com/sdusoul/blog/item/5d8e0488def3a998a5c272c0.html)
L1d cache: 32K #一级缓存32K(google了下,这具体表示表示cpu的L1数据缓存为32k)
L1i cache: 32K #一级缓存32K(具体为L1指令缓存为32K)
L2 cache: 3072K #二级缓存3072K
服务器有2个实物cpu,每个cpu有8个核心,每个核心虚出(超线程数)2个逻辑cpu,所以一共有32个cpu
2*8*2 = 32
processes = 32
128G内存
每个cpu平均分配到的内存为4G,系统占用2GB空间,用户占用2GB空间
那么根据linux的默认进程和线程大小计算:
默认一个进程的堆栈大小是2GB
默认一个线程的堆栈大小是1MB
所以一个进程可以开2G/1M=2048个线程,但实际上内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小,一般情况会达到1500个线程。
threads = 1500
阿哈,我1核1g,只可以开processes=4,threads=4,threads=30会点一下就蹦一个processes,就直接502