当前位置: 首页 > 后端技术 > Python

uwsgi注意事项

时间:2023-03-25 23:09:53 Python

http,http-socket,sockethttp和http-socket选项的区别是完全不同的。第一个产生一个额外的进程,将请求转发给一组工作人员(将其视为一种防护形式,与apache或nginx处于同一级别),而第二个设置工作人员以本地使用http协议。Socket方式:接收uwsgi协议的数据包,前台需要配合nginx做负载均衡转发。nginx)转发uwsgi协议数据包给worker,http模式也可以只作为nginx使用。使用http方式启动时,worker进程会随机监听一个端口。当curl测试返回curl:(52)Emptyreplyfromserver,一般可能是iptables防火墙的原因,导致请求无法到达workerj进程;uwsgi加载app失败,InternalError是因为wsgiapp在加载app时依赖中间件。中间件未就绪时,app加载失败,uwsgi还在运行,但部分或全部worker无法访问,解决方法;增加参数lazy-apps和need-app参数,当一个worker加载失败时,会kill所有worker,整个uwsgi退出业务应用trycatch,遇到异常,直接os._exit(1),master会接主动拉起;lazy-apps/lazy比较,lazy不推荐使用编译好的uwsgi打包进新环境,找不到python解释器;问题找不到平台独立库找不到平台相关库考虑将$PYTHONHOME设置为[:]FatalPythonerror:initfsencoding:UnabletogetthelocaleencodingModuleNotFoundError:Nomodulenamed'encodings'两种解决方法:python安装到,python编译uwsgi环境时路径指定PYTHONHOME环境变量,exportPYTHONHOME=python安装路径,PYTHONHOME下必须有bin/和lib/,必须启动mastermanager来管理subprocessworker,--masterHowtousekeep-alive使用http代理方式,keep-alive=100(int,默认4),http-auto-chunked=true;add-header=Connection:Keep-Alive如果使用Http11-socket模式,默认开启keep-alive,但timeout=4,不可修改;=============参考链接:https://uwsgi-docs-zh.readthe...[uwsgi]master=truecallable=app;套接字=0.0.0.0:8082;http=0.0.0.0:8082chdir=$(PATH)wsgi-file=modules/webserver/app.py;logto=/logs/%n.log;processes=8threads=1lazy=truelog-maxsize=102400000;启用线程=真;pidfile=$(ST_DATA_PATH)/%n.pid;查看pod中的进程监控:uwsgitop127.0.0.1:8300stats=0.0.0.0:8300;不记录uwsgi请求日志,只记录错误日志disable-logging=true;相当于lazy=true。在每个worker中Reload所有的apps,不仅在master上,可能会消耗更多的内存,但是可以优雅的重启,并且服务不会停止lazy-apps=true;如果没有加载应用程序,则退出need-app=true;超时也是没有收到响应,客户端直接连接端口,但是服务端还在计算;http超时=2;相当于http-timeout;套接字超时=2;超过3s后服务器不直接计算harakiri=2;当a请求为"harakiri”会在uwsgi日志中记录信息harakiri-verbose=true;如果有多个线程,uwsgi会自动开启thunder-lock,但如果有多个进程,则需要手动开启;解决雷电组问题:多个进程或线程在等待同一个事件,当事件发生时,所有的线程和进程都会被内核唤醒;唤醒后,通常只有一个进程获取事件并处理,其他进程继续发现事件获取失败后进入等待状态;Listen同一个事件的进程越多,CPU争用越严重(虽然实际上只有一个进程能成功获取事件并处理),导致上下文严重switchingcosts.实验发现request可以平均分配给很多workerthunder-lock=true;spare2:适合较快增加worker数量和减少worker数量cheaper-algo=sp是2;启用更便宜的模式,它代表保留工人的最小数量,小于processescheaper=4;第一次启动时Quantitycheaper-initial=8;每次需要增加的worker个数cheaper-step=2;调整周期,单位:秒idle=30;上限应该尽可能高,以应对意外的高并发进程=25#当worker进程常驻物理内存超过2048MB时,重启,evil-reload-on-rss是暴力重启,不等待当前要处理的请求;reload-on-rss=2048#uwsgitop可以显示内存状态memory-report=true