Pull to refresh

Comments 10

Ох, спасибо за nginx-sla и nginx-statsd!
По поводу nginx-sla еще надо покопаться, а statsd у нас уже активно используется, и теперь я имею шансы выкинуть костыли в виде скриптов на sh, которые считают статусы ответов по логам nginx, и отдают их в zabbix. Теперь можно просто все отправлять в statsd, а механизм statsd -> zabbix у нас уже работает.
Ну и красивые графики в graphite, конечно, лишними не будут.
Искренне в конце статьи ожидал увидеть примеры настроек и рисовалок…
Отличная статья, интересно и приятно было читать. Лично для себя полезными нашел источники по оценке результатов измерений.
у нас рельные требования для WEB APP выше:
— до 20 ms в среднем 5 -7 на AJAX
— до 40 — 50 ms на отдачу сервером страницы
Добрый день.

А вы тестировали модуль для случае, когда количество виртуальных хостов > 4?
У вас в модуле есть баг на эту тему. Когда инициализируется конфигурация main, то создается array на 4 элемента типа pool: ngx_array_init(&config->pools, cf->pool, 4, sizeof(ngx_http_sla_pool_t).
Когда встречается директива sla_pool, вызывается ngx_http_sla_pool(), вконце которой происходит следующее:
shm_zone = ngx_shared_memory_add(cf, &pool->name, size, &ngx_http_sla_module);
shm_zone->data = pool;
shm_zone->init = ngx_http_sla_init_zone;

т.е. адрес очередного пула ngx_http_sla_pool_t добавляется в описатель зоны. НО, как только количество виртуальных серверов становится больше чем было инициализировано в ngx_http_sla_create_main_conf, то создается новый array, а старый уничтожается, при этом все ранее созданные описатели зоны хранят указатели на старые пулы…
и начинает происходить SIGSEGV.
У нас именно виртуальных хостов больше 4 используется. Возможно речь идет не о виртуальных хостах?
По этому поводу завели багу. Будет замечательно, если вы приложите ваш конфиг на котором это стабильно воспроизводится в комментариях к issue на github
Да я не корректно поставил вопрос.

На самом деле от количества вирт. хостов не зависит, зависит от количества созданных пулов.

Вот пример конфига:
http {
sla_pool one;
sla_pool two;
sla_pool three;
sla_pool four;
sla_pool five;
sla_pool six;

server {
listen 192.168.10.10:80 default_server;
server_name "";

location /one {
sla_pass one;
}

location /two {
sla_pass two;
}

location /three {
sla_pass three;
}

location /four {
sla_pass four;
}

location /five {
sla_pass five;
}

location /six {
sla_pass five;
}

location /sla_status {
sla_status;
sla_pass off;
}

}
}

Вот что выдает gdb (если зайти на 192.168.10.10:80/sla_status):
gdb /usr/local/nginx/bin/nginx /usr/local/nginx/logs/coredump/core

Program terminated with signal 11, Segmentation fault.
#0 ngx_shmtx_lock (mtx=0x28) at src/core/ngx_shmtx.c:78
78 if (*mtx->lock == 0 && ngx_atomic_cmp_set(mtx->lock, 0, ngx_pid)) {
(gdb) bt
#0 ngx_shmtx_lock (mtx=0x28) at src/core/ngx_shmtx.c:78
#1 0x080c7fe7 in ngx_http_sla_status_handler (r=0x9e35908) at /home/fervid/distrib/src/modules/sla/ngx_http_sla.c:793
#2 0x0807d2a9 in ngx_http_core_content_phase (r=0x9e35908, ph=0x9e47098) at src/http/ngx_http_core_module.c:1410
#3 0x080784c3 in ngx_http_core_run_phases (r=r@entry=0x9e35908) at src/http/ngx_http_core_module.c:888
#4 0x080785d4 in ngx_http_handler (r=r@entry=0x9e35908) at src/http/ngx_http_core_module.c:871
#5 0x08083780 in ngx_http_process_request (r=r@entry=0x9e35908) at src/http/ngx_http_request.c:1852
#6 0x08083dfb in ngx_http_process_request_headers (rev=rev@entry=0xb26ee070) at src/http/ngx_http_request.c:1283
#7 0x08084331 in ngx_http_process_request_line (rev=rev@entry=0xb26ee070) at src/http/ngx_http_request.c:964
#8 0x08084924 in ngx_http_wait_request_handler (rev=0xb26ee070) at src/http/ngx_http_request.c:486
#9 0x0806571e in ngx_event_process_posted (cycle=cycle@entry=0x9e30798, posted=0x81132cc) at src/event/ngx_event_posted.c:40
#10 0x0806524d in ngx_process_events_and_timers (cycle=cycle@entry=0x9e30798) at src/event/ngx_event.c:275
#11 0x0806c96a in ngx_worker_process_cycle (cycle=cycle@entry=0x9e30798, data=data@entry=0x0) at src/os/unix/ngx_process_cycle.c:816
#12 0x0806b013 in ngx_spawn_process (cycle=cycle@entry=0x9e30798, proc=proc@entry=0x806c88f <ngx_worker_process_cycle>, data=data@entry=0x0, name=name@entry=0x80e502d «worker process», respawn=respawn@entry=-3)
at src/os/unix/ngx_process.c:198
#13 0x0806bd27 in ngx_start_worker_processes (cycle=cycle@entry=0x9e30798, n=4, type=type@entry=-3) at src/os/unix/ngx_process_cycle.c:364
#14 0x0806d23b in ngx_master_process_cycle (cycle=cycle@entry=0x9e30798) at src/os/unix/ngx_process_cycle.c:136
#15 0x0804e539 in main (argc=1, argv=0xbf8e2f14) at src/core/nginx.c:407
Sign up to leave a comment.

Articles