Несколько асинхронных запросов от javascript к PHP apache не были асинхронными - PullRequest
0 голосов
/ 14 мая 2018

Такое поведение отсутствовало все время, просто появилось из ничего около месяца назад, а затем внезапно исчезло. Проблема в том, что я не могу определить, что случилось. У меня нет инструмента отладки сервера, потому что это происходит только на производстве. Примерно 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. Это абсолютно одинаковое поведение с обоими клиентами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...