Такое поведение отсутствовало все время, просто появилось из ничего около месяца назад, а затем внезапно исчезло. Проблема в том, что я не могу определить, что случилось. У меня нет инструмента отладки сервера, потому что это происходит только на производстве.
Примерно 100 ajax-запросов запускаются одновременно с использованием некоторого цикла вроде:
let url = "example.com/";
var methods = ["method1", "method2", "method3", "method4"]; //Roughly 100
$.each(methods, function(index, value) {
$.ajax({
url: url + value,
method: "POST",
data: { params: "whatever", otherParams: "whatever" }
}).done(function(data) {
console.log(data);
});
});
На стороне сервера (apache + php) есть выборки, обновления и вставки в реляционную базу данных. Каждый запрос выполняет отдельный поток, так как Apache слушает.
Когда я вижу сетевую консоль, все запросы запускаются одновременно (примерно), но здесь есть проблема. Ответ происходит один за другим финиша. Если запрос 1 начинается с 0 и тратит 5 секунд, запрос 2 начинается с 5, а запрос 3 начинается после завершения запроса 2. Все браузеры ведут себя одинаково.
Лучшее логическое объяснение, которое я подумал, заключается в том, что база данных блокирует некоторую таблицу, когда выполняет обновление или вставку. Некоторые таблицы огромны и без индексов могут потратить слишком много времени. Хорошо, промежуточная среда указывает на одну и ту же базу данных и работает идеально асинхронно. Так, что происходит? Возможно ли, что php или Apache застряли таким образом по какой-то причине? Я подумал о другой сумасшедшей идее - о некоторых проблемах с записью файлов журнала в ОС (Debian), но я понятия не имею, как это работает. Поэтому я был бы рад, если бы кто-нибудь мог дать мне какое-либо предложение. Возможно, я мог бы воспроизвести проблему в контролируемой среде и сделать что-то, чтобы это не повторилось.
Некоторая дополнительная информация, у API есть два клиента, один в угловых, другой в javascript + php. Это абсолютно одинаковое поведение с обоими клиентами.