Несколько асинхронных запросов от javascript к PHP apache не были асинхронными

Такое поведение не проявлялось постоянно, просто появилось из ничего около месяца назад, а затем внезапно исчезло. Проблема в том, что я не могу определить, что произошло. У меня нет инструмента отладки сервера, потому что он выполняется только в производственной среде. Примерно 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.info(data);
  });
});

На стороне сервера (apache + php) есть выборки, обновления и вставки в реляционной базе данных. Каждый запрос выполняет отдельный поток, так как apache слышит.

Когда я вижу сетевую консоль, все запросы запускаются одновременно (примерно), но вот в чем проблема. Ответы приходят один за другим финишем. Если запрос 1 начинается с 0 и занимает 5 секунд, запрос 2 начинается с 5, а запрос 3 начинается после завершения запроса 2. Все браузеры ведут себя одинаково.

Лучшее логическое объяснение, которое я подумал, заключается в том, что база данных блокирует некоторую таблицу при выполнении обновления или вставки. Некоторые таблицы огромны и без индексов могут провести слишком много времени. Ну, промежуточная среда указывает на ту же базу данных и работает идеально асинхронно. Так, что происходит? Возможно ли, что php или Apache по какой-то причине застряли таким образом? Я подумал о другой безумной идее, что некоторые проблемы с записью файлов журнала в ОС (debian), но я понятия не имею, как это работает. Так что я был бы рад, если бы кто-нибудь мог дать мне какое-нибудь предложение. Возможно, я смогу воспроизвести проблему в контролируемой среде и сделать что-нибудь, чтобы это не повторилось.

Некоторая дополнительная информация, у API есть два клиента, один в angular, другой в javascript + php. Точно такое же поведение с обоими клиентами.

Если у вас есть возможность воспроизвести его в производственной среде, вы, вероятно, будете контролировать свой веб-сервер и сервер баз данных. Без какого-либо мониторинга действительно сложно найти, что это такое. Но, как вы сказали, это май из-за блокировки таблицы. Это не из-за одного запроса, если ваш сервер работает медленно, а из-за набора запросов, поэтому их трудно воспроизвести. Попробуйте зарегистрировать список процессов вашего сервера, и вы увидите, действительно ли таблица используется и нуждается в индексе или чем-то подобном.

AnthonyB 14.05.2018 16:20

Вы используете какие-либо фреймворки на бэкэнде? Может быть Symfony?

mochalygin 14.05.2018 16:27

@AnthonyB Я не могу воспроизвести это, потому что не знаю, что делать. Я должен регистрировать каждый раз, когда трачу на каждый процесс, я не вижу возможности, но, может быть, это единственный способ.

Emeeus 14.05.2018 16:36

@mochalygin без рамки.

Emeeus 14.05.2018 16:36

Трудно исправить то, что мы не можем воспроизвести. В MySQL вы можете регистрировать запросы, которые занимают более X секунд, это конфигурация в my.cnf. Это может помочь вам регистрировать запросы, которые занимают слишком много времени.

AnthonyB 14.05.2018 16:52

Взгляните на это: stackoverflow.com/questions/15686572/…

xyzale 14.05.2018 16:55

@xyzale Интересно, что ответил Дариен. У меня нет проблем с сессией (у одного клиента вообще нет сессии). К сожалению, я не работаю с xdebug или zend, но это интересная точка зрения.

Emeeus 14.05.2018 17:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
42
0

Другие вопросы по теме