uwsgitop 127.0.0.1:5000
linux
uwsgitop输出信息git
WID -> worker id % -> percentage of served requests by the worker PID -> process id of the worker REQ -> number of managed requests RPS -> number of current requests handled per second EXC -> number of raised exceptions SIG -> number of managed uwsgi signals (NOT unix signals !!!) STATUS -> can be idle, busy, pause, cheaped or sig AVG -> average response time for the worker RSS -> RSS memory (need --memory-report) VSZ -> address space (need --memory-report) TX -> transmitted data RunT -> running time
uwsgitop 后面的地址为下方的statjson
[uwsgi] # 容许主进程存在 master=true # chdir=/root/project virtualenv=/root/project/venv # “mount”参数表示将”/”地址路由到”run.py”中,”manage-script-name”参数表示启用以前在Nginx里配置的”SCRIPT_NAME”参数。再次重启Nginx和uWSGI,你就能够经过”http://localhost/app”来访问应用了 mount=/=run.py # mount和wsgi-file用其中一个就好了,最好用wsgi-file wsgi-file=run.py manage-script-name=true # 监控参数或py文件的修改,当有修改时会触发重载,生产环境不容许设为1 (只在开发时使用) py-autoreload=0 # uWSGI试图在一切可能的状况下(滥)用 fork() 调用的写时拷贝语义。默认状况下,它会在加载你的应用以后进行fork,以尽量的共享它们的内存。若是出于某些缘由,不指望这个行为,那么使用 lazy-apps 选项。这将会指示uWSGI在每一个worker的 fork() 以后加载应用 lazy-apps=true # 设置在收到请求时,uWSGI加载的模块中哪一个变量将被调用,默认是名字为“app”的变量 callable=app # 指定uwsgi的客户端将要链接的socket的路径(使用UNIX socket的状况)或者地址(使用网络地址的状况) socket=127.0.0.1:5003 # 使用HTTP协议绑定到指定UNIX/TCP socket上 # http-socket=127.0.0.1:5003 # 设置socket的监听队列大小 listen = 65535 # uwsgi进程数 processes=16 # 记录uwsgi的master进程的pid pidfile = /data/project_logs/project_uwsgi.pid # 设置请求的最大大小 (排除request-body),这通常映射到请求头的大小。默认状况下,它是4k buffer-size=32768 # 将日志打到指定的日志文件,若是使用“daemonize =”的话会致使supervisor守护进程失败,由于设置daemonize在将日志记录到文件的同时,也会让uWSGI进程进入后台守护uWSGI,而supervisor自己就已经起到了守护进程的做用 logto = /data/project_logs/uwsgi.log # 以固定的文件大小(单位KB),切割日志文件 log-maxsize = 1000000 # 当启动时切分日志 log-truncate = true # 不记录请求信息request的日志。只记录错误以及uWSGI内部消息到日志中 disable-logging = true # 将uWSGI状态做为一个JSON对象导出到一个socket,使用uwsgi --connect-and-read /data/project_logs/uwsgi_stats.sock能够获取这个json对象 stats = /data/project_logs/uwsgi_stats.sock 或者 stats=127.0.0.1:5000 # 启用gevent循环引擎,使用指定数目的异步核心数和优化参数 gevent=1000 # 启动时自动调用gevent.monkey.patch_all() gevent-monkey-patch=true # 容许用内嵌的语言启动线程。这将容许你在app程序中产生一个子线程 enable-threads = true # uwsgi的单个进程worker占用物理内存达到1024M,会自动重启这个worker(防止内存泄露致使worker所占内存愈来愈多) reload-on-rss = 1024 # uwsgi的单个worker占用虚拟内存达到2048M,会自动重启这个worker(防止内存泄露致使worker所占内存愈来愈多) reload-on-as = 2048
[program:project] directory=/root/project environment=LB_ADX_CONFIG=production command=/root/project/venv/bin/uwsgi --ini project_uwsgi.ini stopasgroup=true stopsignal=QUIT autostart = true startsecs = 5 autorestart = true redirect_stderr = true
配置详解:
stopasgroup=true
这个东西主要用于,supervisord管理的子进程,这个子进程自己还有子进程。那么咱们若是仅仅干掉supervisord的子进程的话,子进程的子进程有可能会变成孤儿进程。因此咱们能够设置这个选项,把整个该子进程的整个进程组都干掉。 设置为true的话,通常killasgroup也会被设置为true。须要注意的是,该选项发送的是stop信号。
若是不加这个的话,可能会有老的uwsgi进程的子进程杀不死的状况发生,从而占用端口,致使新的uwsgi进程启动不起来网络
stopsignal=QUIT
干掉进程的信号,默认为TERM,好比设置为QUIT,那么若是QUIT来干这个进程那么会被认为是正常维护,退出码也被认为是expected中的。app
之因此要设置environment参数的缘由是,我在项目中要读取LB_ADX_CONFIG这个环境变量,supervisord在linux中启动默认继承了linux的环境变量,在这里能够设置supervisord进程特有的其余环境变量。异步