Nginx 실행 중 상태 정보


    Nginx 실행 중 일부 상태 정 보 를 메모리 에 저장 합 니 다. ngx 를 통 해http_stub_status_module 모듈 에서 확인 합 니 다.
 
    이 상태 정 보 를 보 려 면 먼저 configure 를 실행 할 때 지정 합 니 다 -- with - httpstub_status_module 인자, 그리고 Nginx 프로필 에 location 를 추가 합 니 다. 다음 과 같 습 니 다.
    location /status {

        stub_status  on;

    }

 
    현재 볼 수 있 는 상태 정 보 는 다음 과 같 습 니 다.
Active connections: xxx 
server accepts handled requests
 xxx xxx xxx 
Reading: xxx Writing: xxx Waiting: xxx 

1) Active connections - 현재 열 린 연결 수 (이벤트 / 비활성) 는 백 엔 드 서버 에 포 함 된 연결 입 니 다.
2) accepts - 시작 부터 지금까지 받 은 모든 연결 수 입 니 다.
3) handled - 시작 할 때 부터 지금까지 처 리 된 모든 연결 수 는 '2)' 와 같 습 니 다. 받 아들 여 졌 지만 바로 끊 긴 연결 을 줄 입 니 다.
4) requests - 시작 부터 지금까지 처 리 된 모든 요청 수 입 니 다.
5) Reading - 현재 요청 헤더 의 연결 수 를 읽 고 있 습 니 다.
6) Writing - 현재 요청 체, 처리 요청, 출력 응답의 연결 수 를 읽 고 있 습 니 다.
7) Waiting - 비활성 / 비어 있 는 Keepalive 연결 수 는 '1)' 에서 '5)' 와 '6)' 을 뺀 연결 수 와 같다.
 
    단일 프로 세 스 작업 모드 에서 상태 정 보 는 전역 변수 에 저 장 됩 니 다. 다음 과 같 습 니 다.
ngx_atomic_t   ngx_stat_accepted0;
ngx_atomic_t  *ngx_stat_accepted = &ngx_stat_accepted0;
ngx_atomic_t   ngx_stat_handled0;
ngx_atomic_t  *ngx_stat_handled = &ngx_stat_handled0;
ngx_atomic_t   ngx_stat_requests0;
ngx_atomic_t  *ngx_stat_requests = &ngx_stat_requests0;
ngx_atomic_t   ngx_stat_active0;
ngx_atomic_t  *ngx_stat_active = &ngx_stat_active0;
ngx_atomic_t   ngx_stat_reading0;
ngx_atomic_t  *ngx_stat_reading = &ngx_stat_reading0;
ngx_atomic_t   ngx_stat_writing0;
ngx_atomic_t  *ngx_stat_writing = &ngx_stat_writing0;

 
    주 프로 세 스 작업 모드 에서 상태 정 보 를 공유 메모리 에 저장 합 니 다. 다음 과 같 습 니 다.
    /* cl should be equal or bigger than cache line size */

    cl = 128;

    size = cl            /* ngx_accept_mutex */
           + cl          /* ngx_connection_counter */
           + cl;         /* ngx_temp_number */

#if (NGX_STAT_STUB)

    size += cl           /* ngx_stat_accepted */
           + cl          /* ngx_stat_handled */
           + cl          /* ngx_stat_requests */
           + cl          /* ngx_stat_active */
           + cl          /* ngx_stat_reading */
           + cl;         /* ngx_stat_writing */

#endif

    shm.size = size;
    shm.name.len = sizeof("nginx_shared_zone");
    shm.name.data = (u_char *) "nginx_shared_zone";
    shm.log = cycle->log;

    if (ngx_shm_alloc(&shm) != NGX_OK) {
        return NGX_ERROR;
    }

    shared = shm.addr;

    ngx_accept_mutex_ptr = (ngx_atomic_t *) shared;
    ngx_accept_mutex.spin = (ngx_uint_t) -1;

    if (ngx_shmtx_create(&ngx_accept_mutex, (ngx_shmtx_sh_t *) shared,
                         cycle->lock_file.data)
        != NGX_OK)
    {
        return NGX_ERROR;
    }

    ngx_connection_counter = (ngx_atomic_t *) (shared + 1 * cl);

    (void) ngx_atomic_cmp_set(ngx_connection_counter, 0, 1);

    ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                   "counter: %p, %d",
                   ngx_connection_counter, *ngx_connection_counter);

    ngx_temp_number = (ngx_atomic_t *) (shared + 2 * cl);

    tp = ngx_timeofday();

    ngx_random_number = (tp->msec << 16) + ngx_pid;

#if (NGX_STAT_STUB)

    ngx_stat_accepted = (ngx_atomic_t *) (shared + 3 * cl);
    ngx_stat_handled = (ngx_atomic_t *) (shared + 4 * cl);
    ngx_stat_requests = (ngx_atomic_t *) (shared + 5 * cl);
    ngx_stat_active = (ngx_atomic_t *) (shared + 6 * cl);
    ngx_stat_reading = (ngx_atomic_t *) (shared + 7 * cl);
    ngx_stat_writing = (ngx_atomic_t *) (shared + 8 * cl);

#endif

좋은 웹페이지 즐겨찾기