Сотни процессов Apache, торчащие после запросов Ajax, когда используется переменная сеанса - PullRequest
5 голосов
/ 16 августа 2011

После того, как веб-страница PHP с сервера Apache загружена браузером, клиентский javascript отправляет запросы AJAX каждые 5 секунд в скрипт обновления PHP.Ответ AJAX, закодированный в JSON, может быть довольно большим, поэтому я хочу просто отправить пустой массив '[]', если нет изменений с момента предыдущего запроса AJAX, или весь массив, содержащий различные объекты JSON, если былизменить с момента последних запросов AJAX.

Для реализации отправки '[]' или полного массива я использую переменную сеанса.Мой скрипт обновления выглядит следующим образом:

<?php
session_start();
$output = '[]'; // server is running PHP 5.1 so can't use built in JSON encode
// code here queries a database and updates $output based on the query result
if (isset($_SESSION['previous_output'])) {
    if ($_SESSION['previous_output'] == $output) {
        echo '[]';
    } else {
        $_SESSION['previous_output'] = $output;
        echo $output;
    }
}
?>

После реализации вышеописанного сценария администратор веб-сервера заметил, что "слишком много" процессов httpd создаются и зависают, что в конечном итоге приводит к остановке сервера.

Когда я удаляю код, включающий переменные сеанса, некоторые процессы httpd все еще зависают, но «отставание» не так уж плохо, и в конечном итоге процессы уходят до того, как на сервер будет оказано заметное влияние.

Веб-сервер не используется интенсивно, обслуживая, может быть, полдюжины «посетителей» в любое время. Веб-страница, выполняющая 5-секундные запросы AJAX, «защищена», что означает, что только один пользователь-администратор может получить к нему доступ одновременно.

Я нашел еще одну публикацию на PHP MySQLi Singleton для Ajax-запросов завершается во многих процессах , что звучит похоже, и это относится к проекту AJAX Push Engine (APE), который я хотел бы исследоватьдальше, в конце концов. Однако, я в настоящее время не хватает времени и ресурсов (например, не могу настроить APE сервер ...), так что я в растерянности относительно того, что можно сделать.

Любой совет, как выполнять 5-секундные запросы AJAX, не оказывая негативного влияния на производительность сервера?Почему использование переменной сеанса имеет такое заметное значение?

1 Ответ

2 голосов
/ 16 августа 2011

Apache пытается поддерживать набор незанятых работников для обработки входящих запросов.Эти настройки могут быть изменены (минимальное количество неработающих работников, максимальное количество работников - особый интерес MaxRequestsPerChild, попробуйте уменьшить это значение).Это не должно вызывать проблем - при условии, что ваш скрипт завершается правильно (это не должно быть проблемой для типичного веб-приложения).Вы можете получить исчерпывающий ответ от сообщества serverfault .

Кроме того, в зависимости от нагрузки на сервер (количество активных пользователей, ресурсы, используемые API и т. Д.), Вам может потребоваться масштабированиеваше приложение (исследуйте автомасштабирование с помощью сервиса ec2 от amazon).

http://httpd.apache.org/docs/2.0/mod/worker.html

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