@TerritoryOfPeace
Изучаю php

Почему сервер падает через AJAX запросы?

При прокрутке вниз экрана срабатывает функция которая получает данные из БД:

$.ajax({
                url:'ajaxappendindex.php',
                method:'POST',
                data:{"startFrom":startFrom},
                beforeSend:function(){inProgress=true;
                }
            }).done(function(data){
                data=jQuery.parseJSON(data);
                if(data.length>0){
                    $.each(data, function(index, data){
                        $("#div").append('+data.title+'');
                    });

php файл:
$startFrom = $_POST['startFrom'];
$sql = "SELECT * FROM articles DESC LIMIT ".$startFrom.", 4";
$res = mysqli_query($conn, $sql);
$articles = array();
while ($row = mysqli_fetch_assoc($res)){$articles[] = $row;}
echo json_encode($articles);


Почему после 20-30 запросов подряд со страницы падает сервер?

Страница недоступна
Сайт не отправил данных.
ERR_EMPTY_RESPONSE

И приходит в порядок через 2-3 минуты. С чем это может быть связано?
  • Вопрос задан
  • 451 просмотр
Решения вопроса 4
@FaTTeST
Возможно, проблема связана с тем, что на сервере исчерпывается память или другие ресурсы, которые необходимы для обработки запросов. Каждый раз, когда пользователь скроллит вниз, AJAX запрос отправляет новый запрос на сервер, который выполняет запрос к базе данных и возвращает результат. Если это происходит очень часто и быстро, то может быть нагрузка на сервере, особенно если на сервере запущено много других приложений или есть другие пользователи, которые используют те же ресурсы.

Также возможно, что проблема связана с настройками сервера или сетевыми настройками, которые могут ограничивать количество запросов или время выполнения запросов. В таком случае, вам может потребоваться настроить сервер.

Чтобы более точно определить причину проблемы, вам может потребоваться проверить журналы сервера, чтобы увидеть, есть ли какие-либо сообщения об ошибках или исключениях, которые могут помочь вам определить проблему.
Ответ написан
ValeriuCutebov
@ValeriuCutebov
Скорее всего, причина падения сервера связана с тем, что каждый AJAX запрос создает новое соединение с базой данных, и эти соединения не закрываются после обработки запроса. Когда количество открытых соединений достигает определенного предела, сервер может перегрузиться и перестать отвечать на запросы.

Для решения этой проблемы необходимо закрывать соединения с базой данных после обработки каждого запроса. Для этого можно использовать функцию mysqli_close() после выполнения запроса:

$sql = "SELECT * FROM articles DESC LIMIT ".$startFrom.", 4";
$res = mysqli_query($conn, $sql);
$articles = array();
while ($row = mysqli_fetch_assoc($res)){
$articles[] = $row;
}
mysqli_close($conn);
echo json_encode($articles);

Также стоит проверить настройки сервера и базы данных, чтобы убедиться, что максимальное количество одновременных соединений не превышает допустимых значений. Если это не помогает, то может быть необходимо использовать более мощный сервер или оптимизировать запросы к базе данных для уменьшения нагрузки на сервер.
Ответ написан
@Sclifie
У меня есть некоторые предположения что Вы просто отправляете данные в огромном "числе раз". Cкорее всего не верно написан Евент по которому отправляются данные, что приводит к "провисанию" сервера.
1) Скиньте весь код js.
2) Посмотрите в консоли разработчика вкладку Network и кол-во запросов и ответов.
3) Используйте PDO, в данном случае это не имеет отношения, просто совет.
Ответ написан
Комментировать
@TerritoryOfPeace Автор вопроса
Изучаю php
Сменил LIMIT с 4 на 48.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@iljaGolubev
Этот SQL не использует индексы "SELECT * FROM articles DESC LIMIT ".$startFrom.", 4";
Чтобы ускорить запросы лучше `where id>=$startFrom and id<=$startFrom+4`

Используйте persistent-connections.php

Посмотрите соединения. Попробуйте show status where variable_name = 'threads_connected'; или show processlist;

Убедитесь что на сервере нет ограничения количества запросов.


3) Используйте PDO, в данном случае это не имеет отношения, просто совет.

Поддержу. + вставлять POST данные в запрос без проверок - плохо.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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