Apache KeepAlive на сервере API - PullRequest
0 голосов
/ 04 июня 2011

У меня есть сервер LAMP (Quad Core Debian с 4 ГБ ОЗУ, Apache 2.2 и PHP 5.3) с Rackspace, который используется в качестве сервера API.Я хотел бы знать, что является лучшим вариантом KeepAlive для Apache, учитывая нашу настройку.

  • Сервер API содержит один файл PHP, который отвечает простым JSON.Это довольно здоровенный файл, который выполняет некоторые операции чтения / записи MySql и довольно часто выполняет поиск в Memcache.
  • У нас есть около 90 клиентов, которые одновременно подключены к системе.
  • Примерно 1/3 клиентов будет бездействовать.
  • Из активных клиентов (примерно 60) они отправляют запрос в API каждые 3 секунды.
  • Клиенты переключаются с активного на незанятый режим и обратно каждые 15 или 20 минут или около того.

При включенном KeepAlive сервер отключается и пики памяти составляют почти 4 ГБ (подкачказанимается и т. д.).При KeepAlive Off объем памяти составляет 3 ГБ, однако я заметил, что Apache постоянно убивает и создает новые процессы для обработки каждого соединения.

Итак, у меня есть три варианта:

  1. KeepAlive On и KeepAliveTimeout Default - В этом случае, я думаю, мне просто нужно получить больше оперативной памяти.
  2. KeepAlive On и KeepAliveTimeout Low (возможно, 10 секунд?) Если KeepAliveTimeout установлен на 10 секунд, будет ли клиент поддерживать постоянное соединение с этим одним процессом, получая регулярный доступ к ресурсу 3вторые интервалы?Когда этот клиент простаивает дольше 10 секунд, будет ли этот процесс завершен?Если так, то я думаю, что вариант 2 выглядит как лучший?

  3. KeepAlive Off Это явно лучше для оперативной памяти, но будет ли это влиять наВремя ответа из-за работы, связанной с настройкой нового процесса для каждого запроса?

Какой вариант лучше?

Ответы [ 3 ]

0 голосов
/ 04 июня 2011

Вместо того, чтобы управлять настройками KeepAlive, которые явно не имеют реального преимущества в вашей конкретной ситуации между этими 3 вариантами, вам следует рассмотреть возможность переключения Apache на событие или MPM на основе потоков, где вы могли бы легко использовать KeepAlive On установите значение Timeout на максимум.

Я бы даже подумал о переходе на Apache в Windows. Преимущество заключается в том, что MPM полностью основан на потоках и использует предпочтения Windows для потоков перед процессами. Вы можете легко выполнить 512 потоков с помощью KeepAlive On и времени ожидания 3-10 секунд на 1-2 ГБ ОЗУ.

WampDeveloper Pro - Xampp - WampServer

В противном случае ваши единственные другие варианты - переключить MPM с Prefork на Worker ... http://httpd.apache.org/docs/2.2/mod/worker.html

Или к событию (которое также стало лучше с Apache 2.4) ... http://httpd.apache.org/docs/2.2/mod/event.html

0 голосов
/ 05 июня 2011

Самое первое, что вы должны проверить, это то, что клиенты фактически используют функцию keepalive вообще.Я не уверен, что вы подразумеваете под «сервером API», но если это своего рода веб-сервис, то (IME) довольно сложно реализовать клиентов с хорошим поведением, используя keepalive (см. Директиву% k для mod_log_config).

Кроме того, нам действительно нужно знать, каковы ваши цели и ограничения?Производительность / емкость / низкая стоимость?

Работает ли это по HTTP или HTTPS - есть большая разница в задержке.

Я бы сказал, что 10-секундное время ожидания остается невероятно высоким -совсем не низкий.

Даже если у вас есть 90 клиентов с открытыми соединениями, 4Gb кажется довольно большим объемом памяти для них - я использую системы с 150-200 одновременными соединениями со сложнымиPHP-скрипты, использующие примерно 0,5 ГБ по сравнению с отдыхом.Ваши цифры 250 + 90 x 20M дают вам только размер около 2 Гб (я знаю, что это не так просто - но это не намного сложнее).

Для приведенных вами цифр я бы не ожидал никакой выгоды - но значительно большего объема памяти - используя что-то более 5 секунд для поддержки активности.Возможно, вы могли бы использовать время поддержки активности в 2 секунды без существенной потери пропускной способности, но ничто не заменит измерение эффективности различных конфигураций - и анализ данных, чтобы найти оптимальную конфигурацию.

Конечно, если вы обнаружите, что ваши клиенты могут воспользоваться преимуществами keepalive и получить ощутимую выгоду от этого, вам нужно найти наилучший способ обеспечить это.Использование многопоточного сервера может немного помочь с использованием памяти, но вы, вероятно, найдете гораздо больше преимуществ при использовании обратного прокси-сервера перед веб-сервером, особенно в том, что касается SSL.

Кроме того, вы можете получить значительные преимущества.через обычную настройку - профилирование кода, сжатие вывода и т. д.

0 голосов
/ 04 июня 2011

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

Если у вас нет хорошего представления об использовании памяти на запрос и от запроса к запросу, добавление памяти не является реальным решением. Это может помочь сейчас и снова сломаться на следующей неделе.

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

...