たごもりすメモ

コードとかその他の話とか。

workerごとのカウンタの話

どのworkerに配送するかの判定にはリクエスト数および転送量でのバランシングがデフォルトで提供されており、ということはつまり、いつかは溢れる。

ちょっと気になったので定義を調べてみた。mod_proxy.h内。

/* Runtime worker status informations. Shared in scoreboard */
typedef struct {
    int             status;
    apr_time_t      error_time; /* time of the last error */
    int             retries;    /* number of retries on this worker */
    int             lbstatus;   /* Current lbstatus */
    int             lbfactor;   /* dynamic lbfactor */
    apr_off_t       transferred;/* Number of bytes transferred to remote */
    apr_off_t       read;       /* Number of bytes read from remote */
    apr_size_t      elected;    /* Number of times the worker was elected */
    char            route[PROXY_WORKER_MAX_ROUTE_SIZ+1];
    char            redirect[PROXY_WORKER_MAX_ROUTE_SIZ+1];
    void            *context;   /* general purpose storage */
    apr_size_t      busy;       /* busyness factor */
    int             lbset;      /* load balancer cluster set */
} proxy_worker_stat;

リクエストカウンタ

apr_size_tの実体はsize_tなので、符号無し32bit整数値だとすると、最大で4294967296となる。
workerあたり1日に30万ヒットの場合は39年再起動無しだと溢れるらしい。

……Googleが使うなら現実的に注意すべきかなあ、とかそれくらい?w

転送量カウンタ

apr_off_tの実体はoff64_tなので、……これって符号無し64bitだよね。
workerあたり、2GBのファイルが1日に30万回ダウンロードされると、78年再起動無しで溢れるらしい。

さすがのGoogle様でもなかなか厳しそうだ。

結論

心配しなくてヨシ。