uWSGI的stats注释,送给需要的人,欢迎指正
吐槽先,对于uWSGI状态信息没有文档说明这样一个现实,我只想说一句:F*CK YOU!!!
花了2天时间,累得眼珠子疼,针对这鬼畜的stats,借助Total Commander和VS大概撸了一边uWSGI的源码。还好C写的,不难。可是,尼玛一个文件几千行代码啊有木有有木有!!!!!FUCK YOU!!!到处return啊有木有!!!
好了心情好多了,;)
博客园代码格式里面没有json,哔...Python代替
Eclipse有个json插件,看起来可能会舒服一些
{
"version":"2.0.7",
"listen_queue":101, //the maximum value of queues in sockets master.c void master_check_listen_queue()
"listen_queue_errors":0, //unused master_utils.c uwsgi_stats_keylong_comma(us, "listen_queue_errors", (unsigned long long) uwsgi.shared->backlog_errors)
"signal_queue":0, //length of master(worker0)'s signal queue
"load":101, //same as listen_queue master.c void master_check_listen_queue()
"pid":13755, //PID of master process
"uid":500,
"gid":500,
"cwd":"/home/robert",
"locks":[
{
"user 0":0 //uwsgi.lock(locknum=0) internal pointer lock.c void uwsgi_setup_locking() uwsgi_pymodule.c PyObject *py_uwsgi_lock(PyObject * self, PyObject * args) uwsgi.c
},
{
"signal":0 //internal pointer lock.c void uwsgi_setup_locking()
},
{
"filemon":0 //internal pointer lock.c void uwsgi_setup_locking()
},
{
"timer":0 //internal pointer lock.c void uwsgi_setup_locking()
},
{
"rbtimer":0 //internal pointer lock.c void uwsgi_setup_locking()
},
{
"cron":0 //internal pointer lock.c void uwsgi_setup_locking()
},
{
"rpc":0 //internal pointer lock.c void uwsgi_setup_locking()
},
{
"snmp":0 //internal pointer uwsgi.c int uwsgi_start(void *v_argv)
}
],
"sockets":[
{
"name":":8080",
"proto":"http",
"queue":96,
"max_queue":100,
"shared":0, //If value was equal to 1,it's shared socket. core/uwsgi.c void uwsgi_opt_add_shared_socket(char *opt, char *value, void *protocol) {"shared-socket", required_argument, 0, "create a shared socket for advanced jailing or ipc", uwsgi_opt_add_shared_socket, NULL, 0}
"can_offload":0 //If value was equal to 1,there're some offload threads. core/uwsgi.c uwsgi.offload_threads master_utils.c uwsgi_sock->can_offload
},
{
"name":":8181",
"proto":"http",
"queue":101,
"max_queue":100,
"shared":0,
"can_offload":0
}
],
"workers":[
{
"id":1,
"pid":13756,
"accepting":1, //mark the worker as "accepting" (this is a mark used by chain reloading) core/uwsgi.c
"requests":1314, //number of closed resuests,summation of cores utils.c void uwsgi_close_request(struct wsgi_request *wsgi_req)
"delta_requests":1314, //this is used for MAX_REQUESTS.if this worker been killed, this value will be reset {"max-requests", required_argument, 'R', "reload workers after the specified amount of managed requests", uwsgi_opt_set_64bit, &uwsgi.max_requests, 0}
"exceptions":7, //summation of core's exceptions master_utils.c uint64_t uwsgi_worker_exceptions(int wid)
"harakiri_count":0, //harakiri count master_utils.c void trigger_harakiri(int i) master.c uwsgi_master_check_workers_deadline()
"signals":0, //number of signals receive uwsgi.register_signal(num, who, function) signal.c int uwsgi_signal_handler(uint8_t sig)
"signal_queue":0, //length of signal queue
"status":"busy", //"cheap" "pause" "sigxx" "busy" "idle" master_utils.c struct uwsgi_stats *uwsgi_master_generate_stats()
"rss":10108928, //in bytes
"vsz":176484352, //in bytes
"running_time":155985031, //in microseconds utils.c void uwsgi_close_request(struct wsgi_request *wsgi_req)
"last_spawn":1412754993, //spawned time in seconds since 1970-1-1 00:00:00 core/uwsgi.c uwsgi_start(void *v_argv)
"respawn_count":1,
"tx":3597862127, //in bytes
"avg_rt":125073, //average response time in microseconds utils.c uwsgi.workers[uwsgi.mywid].avg_response_time = (uwsgi.workers[uwsgi.mywid].avg_response_time + tmp_rt) / 2;
"apps":[
{
"id":0,
"modifier1":0, //utils.c struct uwsgi_app *uwsgi_add_app(int id, uint8_t modifier1, char *mountpoint, int mountpoint_len, void *interpreter, void *callable)
"mountpoint":"", //utils.c struct uwsgi_app *uwsgi_add_app(int id, uint8_t modifier1, char *mountpoint, int mountpoint_len, void *interpreter, void *callable)
"startup_time":0, //total time in seconds during startup pyloader.c wi->startup_time = uwsgi_now() - now; uwsgi_log( "WSGI app %d (mountpoint='%.*s') ready in %d seconds on interpreter %p pid: %d%s\n", id, wi->mountpoint_len, wi->mountpoint, (int) wi->startup_time, wi->interpreter, (int) getpid(), default_app);
"requests":1315, //python/wsgi_handlers.c int uwsgi_request_wsgi(struct wsgi_request *wsgi_req)
"exceptions":7,
"chdir":"" //change work directory
}
],
"cores":[
{
"id":0,
"requests":1314, //utils.c uwsgi.workers[uwsgi.mywid].cores[wsgi_req->async_id].requests++;
"static_requests":0, //static file serving mode static.c int uwsgi_file_serve(...) uwsgi_real_file_serve(struct wsgi_request *wsgi_req, char *real_filename, size_t real_filename_len, struct stat *st)
"routed_requests":0, //route mode routing.c int uwsgi_apply_routes_do(struct uwsgi_route *routes, struct wsgi_request *wsgi_req, char *subject, uint16_t subject_len)
"offloaded_requests":0, //offload.c int uwsgi_offload_enqueue(struct wsgi_request *wsgi_req, struct uwsgi_offload_request *uor)
"write_errors":14,
"read_errors":0,
"in_request":1, //if 1,dealing with request,else 0 utils.c void uwsgi_close_request(struct wsgi_request *wsgi_req) int wsgi_req_async_recv(struct wsgi_request *wsgi_req)
"vars":[
"REQUEST_METHOD=GET",
"REQUEST_URI=/",
"PATH_INFO=/",
"QUERY_STRING=",
"SERVER_PROTOCOL=HTTP/1.1",
"SCRIPT_NAME=",
"SERVER_NAME=localhost.localdomain",
"SERVER_PORT=8080",
"REMOTE_ADDR=10.30.178.33",
"HTTP_ACCEPT_ENCODING=identity",
"HTTP_HOST=10.30.178.174:8080",
"HTTP_CONNECTION=close",
"HTTP_USER_AGENT=Python-urllib/2.7",
""
]
}
]
},
{
"id":2,
"pid":13757,
"accepting":1,
"requests":1495,
"delta_requests":1495,
"exceptions":34,
"harakiri_count":0,
"signals":0,
"signal_queue":0,
"status":"busy",
"rss":10104832,
"vsz":176484352,
"running_time":156051340,
"last_spawn":1412754993,
"respawn_count":1,
"tx":3548600500,
"avg_rt":19505,
"apps":[
{
"id":0,
"modifier1":0,
"mountpoint":"",
"startup_time":0,
"requests":1496,
"exceptions":34,
"chdir":""
}
],
"cores":[
{
"id":0,
"requests":1495,
"static_requests":0,
"routed_requests":0,
"offloaded_requests":0,
"write_errors":62,
"read_errors":0,
"in_request":1,
"vars":[
"REQUEST_METHOD=GET",
"REQUEST_URI=/",
"PATH_INFO=/",
"QUERY_STRING=",
"SERVER_PROTOCOL=HTTP/1.1",
"SCRIPT_NAME=",
"SERVER_NAME=localhost.localdomain",
"SERVER_PORT=8080",
"REMOTE_ADDR=10.30.178.33",
"HTTP_ACCEPT_ENCODING=identity",
"HTTP_HOST=10.30.178.174:8080",
"HTTP_CONNECTION=close",
"HTTP_USER_AGENT=Python-urllib/2.7",
""
]
}
]
},
{
"id":3,
"pid":13758,
"accepting":1,
"requests":1284,
"delta_requests":1284,
"exceptions":7,
"harakiri_count":0,
"signals":0,
"signal_queue":0,
"status":"busy",
"rss":10104832,
"vsz":176484352,
"running_time":156205643,
"last_spawn":1412754993,
"respawn_count":1,
"tx":3636193672,
"avg_rt":2959,
"apps":[
{
"id":0,
"modifier1":0,
"mountpoint":"",
"startup_time":0,
"requests":1285,
"exceptions":7,
"chdir":""
}
],
"cores":[
{
"id":0,
"requests":1284,
"static_requests":0,
"routed_requests":0,
"offloaded_requests":0,
"write_errors":12,
"read_errors":0,
"in_request":1,
"vars":[
"REQUEST_METHOD=GET",
"REQUEST_URI=/",
"PATH_INFO=/",
"QUERY_STRING=",
"SERVER_PROTOCOL=HTTP/1.1",
"SCRIPT_NAME=",
"SERVER_NAME=localhost.localdomain",
"SERVER_PORT=8080",
"REMOTE_ADDR=10.30.178.33",
"HTTP_ACCEPT_ENCODING=identity",
"HTTP_HOST=10.30.178.174:8080",
"HTTP_CONNECTION=close",
"HTTP_USER_AGENT=Python-urllib/2.7",
""
]
}
]
},
{
"id":4,
"pid":13759,
"accepting":1,
"requests":1332,
"delta_requests":1332,
"exceptions":10,
"harakiri_count":0,
"signals":0,
"signal_queue":0,
"status":"busy",
"rss":10108928,
"vsz":176484352,
"running_time":151715232,
"last_spawn":1412754993,
"respawn_count":1,
"tx":3439073176,
"avg_rt":19619,
"apps":[
{
"id":0,
"modifier1":0,
"mountpoint":"",
"startup_time":0,
"requests":1333,
"exceptions":10,
"chdir":""
}
],
"cores":[
{
"id":0,
"requests":1332,
"static_requests":0,
"routed_requests":0,
"offloaded_requests":0,
"write_errors":15,
"read_errors":0,
"in_request":1,
"vars":[
"REQUEST_METHOD=GET",
"REQUEST_URI=/",
"PATH_INFO=/",
"QUERY_STRING=",
"SERVER_PROTOCOL=HTTP/1.1",
"SCRIPT_NAME=",
"SERVER_NAME=localhost.localdomain",
"SERVER_PORT=8080",
"REMOTE_ADDR=10.30.178.33",
"HTTP_ACCEPT_ENCODING=identity",
"HTTP_HOST=10.30.178.174:8080",
"HTTP_CONNECTION=close",
"HTTP_USER_AGENT=Python-urllib/2.7",
""
]
}
]
}
]
}
uWSGI的stats注释,送给需要的人,欢迎指正的更多相关文章
- 成功的背后!(送给所有IT人)
希望自己迷茫的时候,看到能够惊醒 来自CSDN第3名的博主(http://blog.csdn.net/phphot/article/details/2187505) 成功的背后,有着许多不为人知的故事 ...
- Journal of Proteome Research | SAAVpedia: identification, functional annotation, and retrieval of single amino acid variants for proteogenomic interpretation | SAAV的识别、功能注释和检索 | (解读人:徐洪凯)
文献名:SAAVpedia: identification, functional annotation, and retrieval of single amino acid variants fo ...
- UWSGI配置文件---ini和xml示例
一 conf.ini文件: [uwsgi] http = $(HOSTNAME):9033 http-keepalive = 1 pythonpath = ../ module = service ...
- 跨过Nginx上基于uWSGI部署Django项目的坑
先说说他们的关系,Nginx和uWSGI都是Web服务器,Nginx负责静态内容,uWSGI负责Python这样的动态内容,二者配合共同提供Web服务以实现提高效率和负载均衡等目的.uWSGI实现了多 ...
- CentOS下实现Flask + Virtualenv + uWSGI + Nginx部署
一.项目简介 在本文中,将一步一步搭建一个简单的Flask + Virtualenv + uWSGI + Nginx 架构的Web服务,可以作为新手的学习也可作为记录备忘. 如果你安装好了环境并有一定 ...
- nginx+uwsgi+flask
说明:没用虚拟环境 安装nginx,并新建一个conf配置文件,启动nginx # xxx.conf server { listen 80; server_name localhost; locati ...
- VS中如何快捷地给自己的代码添加创建信息注释
VS中如何快捷地给自己的代码添加创建信息注释 Intro 以下讨论的都是没有使用 GIT 来管理源代码的情况,如果使用 GIT 管理源代码可直接使用VS的Git扩展就不需要考虑以下问题. 什么是创建信 ...
- 配置TortoiseSVN客户端, 强制签入前加注释
正如上篇提到, 总有一些人在签入代码到SVN前没有加注释, 然后, 像这样: 鬼才知道改了什么东西. ①有些人可能就是没有写注释的习惯, ②有些人可能是忘记写注释 && SVN服务端和 ...
- java注释规范
前言: 现在java的出产地sun公司并没有定义一个java注释规范,注释规范目前是每个公司自己有自己的一套规范,主要是为了团队之间的协作. 1.基本规则 1.注释应该使代码更加清 ...
随机推荐
- [Animations] 快速上手 iOS10 属性动画
概述 今天要说的UIViewPropertyAnimator, 是iOS10新的API 详细 代码下载:http://www.demodashi.com/demo/10639.html 基础动画, 核 ...
- 二分查找法的C++泛型实现
算法非常easy,直接贴代码啦 #include <iostream> using namespace std; template<typename T> int binary ...
- HDU 1517 A Multiplication Game (博弈)
A Multiplication Game Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- 采用异步来实现重新连接服务器或者重新启动服务 C#中类的属性的获取 SignalR2简易数据看板演示 C#动态调用泛型类、泛型方法 asp .net core Get raw request. 从壹开始前后端分离[.NetCore 不定期更新] 38 ║自动初始化数据库
采用异步来实现重新连接服务器或者重新启动服务 开启异步监听,不会导致主线程的堵塞,在服务异常断开后一直检测重新连接服务,成功连接服务后通知各个注册的客户端! #region 检测断线并重连OPC服务 ...
- 《practical Java》读书笔记
题记: 花了一周把Peter Haggar的<practical Java>看了遍,有所感悟,年纪大了, 写下笔记,方便日后查看.也希望有缘之人可以看看,做个渺小的指路人. 不足之处还望指 ...
- 利用recv和readn函数实现readline函数
在前面的文章中,我们为了避免粘包问题,实现了一个readn函数读取固定字节的数据.如果应用层协议的各字段长度固定,用readn来读是非常方便 的.例如设计一种客户端上传文件的协议,规定前12字节表示文 ...
- react 事件绑定的2种常用方式
方式一:传统 import React, { Component } from 'react'; class App extends Component { handleSubmit (e, args ...
- spring boot实战读书笔记1
1 覆盖起步依赖引入的传递依赖. 以Spring Boot的Web起步依赖为例,它传递依赖了Jackson JSON库.如果不想使用,可以使用 <exclusions>元素去除Jackso ...
- php序列化与反序列化时字符集不一致问题的解决办法
今天的用PHP的时候无意的出现了用unserialize()函数转换老是返回false,我确认我的字符串是没错的,测试了很多次还是一样,没办法,启用了error_reporting(E_ALL)启用错 ...
- spine 2.1.27 Pro 叠加方式(Blending)
将spine更新到2.1.27 Pro,发现有更多的叠加方式可用了,如图: 以前则只有Normal和Additive可选. 更多的叠加方式对于用spine做特效动画还是比较有用的.不过我还没试这些叠加 ...