Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[apache-talk] mod_accel MC & MW
Добрый день!
Ситуация: [MC=1,MW=32,MP=P]. Медленный backend.
При более чем одном одновременном запросе получаем 503 на "лишние" запросы. То
есть запросы в очередь на ожидание освобождения backend не встают...
Документацию можно интерпретировать и таким образом:
"можно указать флаги MC и MW, позволяющие ограничить соответственно число
соединений с бэкендом и число процессов, ждущих этот бэкенд в busy lock'е. Если
достигнут максимум по одному из параметров и (skip) если ответа в кэше нет, то
возвращается ошибка 503 (HTTP_SERVICE_UNAVAILABLE)."
Но на самом деле вероятно правильнее вести себе так:
"Если достигнут максимум по параметру MW и (skip) если ответа в кэше нет, то
возвращается ошибка 503 (HTTP_SERVICE_UNAVAILABLE)."
То есть если достигнут MC, остальные запросы просто становятся в ожидание.
Если посмотреть на код accel_lock.c, то он по-моему себя так и ведет:
if (!busy && !a->max_connected) {
accel_state[accel_slot_num].state = ACCEL_BUSY_LOCK;
accel_state[accel_slot_num].time = a->time;
accel_state[accel_slot_num].sum = a->pass->sum;
ap_cpystrn(accel_state[accel_slot_num].md5, a->md5, MD5_LEN + 1);
a->busy_lock = 1;
} else if (wait && !a->max_waiting) {
accel_state[accel_slot_num].state = ACCEL_WAIT;
accel_state[accel_slot_num].time = a->time;
accel_state[accel_slot_num].sum = a->pass->sum;
a->busy_lock = 1;
}
То есть если запрос передать нельзя (busy || a->max_connected), и если не
достигнут MW, он ставится в ожидание.
Но далее в mod_accel.c:
/* too many connections to backend */
if ((a->pass->max_conn && a->max_connected_checked && a->max_connected)
|| (!a->busy_lock
&& accel_max_connected(a))){
....
return HTTP_SERVICE_UNAVAILABLE;
}
То есть независимо от всего, если просто достигнут MC, выдается 503.
Добавление в это условие && a->max_waiting в каком-то смысле помогает ситуации
(запросы не отваливаются с 503 а ждут освобождения backend и потом успешно
отрабатываются), но вероятно это не совсем корректный патч...
WBR, MoKo
|