zoukankan      html  css  js  c++  java
  • 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",
    ""
                        ]
                    }
                ]
            }
        ]
    }
  • 相关阅读:
    B.Icebound and Sequence
    Educational Codeforces Round 65 (Rated for Div. 2) D. Bicolored RBS
    Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution
    Educational Codeforces Round 65 (Rated for Div. 2) B. Lost Numbers
    Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number
    Codeforces Round #561 (Div. 2) C. A Tale of Two Lands
    Codeforces Round #561 (Div. 2) B. All the Vowels Please
    Codeforces Round #561 (Div. 2) A. Silent Classroom
    HDU-2119-Matrix(最大匹配)
    读书的感想!
  • 原文地址:https://www.cnblogs.com/codeape/p/4015872.html
Copyright © 2011-2022 走看看