HTTP-сервер с одним клиентом висит на 16000 запросов последовательно [дублировать]

Короткий ответ: вам нужно выполнить обратный вызов следующим образом:

function callback(response) {
    // Here you can do what ever you want with the response object.
    console.log(response);
}

$.ajax({
    url: "...",
    success: callback
});
18
задан Bob Aman 20 May 2015 в 14:32
поделиться

1 ответ

Короче говоря, у вас закончились порты.

Диапазон эфемерных портов по умолчанию osx равен 49152-65535, что составляет только 16 383 порта. Поскольку каждый запрос ab равен http/1.0 (без сохранения в ваших первых примерах), каждый новый запрос принимает другой порт.

Поскольку каждый порт используется, он попадает в очередь, где он ожидает tcp «Максимальное время жизни сегмента», которое настроено на osx на 15 секунд. Таким образом, если вы используете более 16 383 порта за 15 секунд, вы эффективно будете получать дросселирование ОС при дальнейших соединениях. В зависимости от того, какой процесс выходит из портов, вы получите ошибки соединения с сервером или зависает с ab.

Вы можете смягчить это, используя генератор нагрузки http/1.1, такой как wrk , или используя опцию keepalive (-k) для ab, чтобы соединения повторно использовались на основе параметров параллелизма инструмента.

Теперь код сервера, который вы сравниваете, делает так мало, что генератор нагрузки облагается налогом так же сильно, как сам терминал, а местный стек и сетевой стек, вероятно, вносят хороший вклад. Если вы хотите сравнить HTTP-сервер, лучше сделать некоторую значимую работу от нескольких клиентов, не работающих на одной машине.

29
ответ дан JimB 28 August 2018 в 02:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: