• 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 ", 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",
    ""
                        ]
                    }
                ]
            }
        ]
    }
  • 相关阅读:
    App.js和App.css(用于移动应用的js和css)
    cookie和session使用
    html实现返回上一页的几种方法(javaScript:history.go(-1);)
    sublime找到成对标签(Ctrl+Shift+")
    Java NIO框架Netty课程(一) – Hello Netty
    信息增益的特征选择方法
    Java线程学习笔记(两) 线程异常处理
    薏米红豆粥的功效和实践演示
    文件翻译002片:Process Monitor帮助文档(Part 2)
    Spring MVC 3 深入总结
  • 原文地址:https://www.cnblogs.com/codeape/p/4015872.html
Copyright © 2020-2023  润新知