Apache тяжелой нагрузки VIRT против RES памяти

8

У меня есть сервер Debian 5, который получает много трафика. Сейчас на сервере 4 ГБ оперативной памяти и нет подкачки. Вверху видно, что процессы Apache потребляют примерно 180 МБ виртуальной памяти (VIRT) каждый и 16 МБ реальной ОЗУ (RES). Итак, сколько потоков Apache я могу запустить одновременно? Около 4 ГБ / 180 МБ = 22 или 4 ГБ / 16 МБ = 256?

Пако
источник

Ответы:

10

Размер виртуальной памяти не так важен, как ваш резидентный набор. Виртуальная память будет включать в себя вещи, которые отображаются, такие как разделяемые библиотеки и еще много чего (которые будут храниться в физической памяти только один раз). RSS говорит вам, что на самом деле в памяти, где, как Virt. сообщает вам, какая часть доступного виртуального адресного пространства была проглочена.

Ваш второй расчет будет ближе, хотя он довольно низкий. Сервер с 4 ГБ ОЗУ может выполнять более 256 процессов Apache. В зависимости от ваших шаблонов трафика и ограничений ожидания ввода-вывода, запуск более 256 может быть хорошей идеей, так как большое количество этих процессов может просто сидеть и ждать, пока ядро ​​перенаправит данные с устройства на устройство. Также учитывайте такие вещи, как COW и тот факт, что все указывает на один и тот же двоичный файл httpd, и вы получаете больше эффективности.

Теперь иди и перестрой свою систему с хорошими 2 ГБ пространства подкачки. Своп больше не действует как «медленная память».

Как заявление об отказе от ответственности, Прошло много времени с тех пор, как я заботился об особенностях управления памятью в Linux, и, возможно, я немного ошибаюсь в моих фактах, но суть солидна!

McJeff
источник
почему он может запускать более 256 процессов Apache? У меня есть приложения, которые 8Gb может работать только около 8.
GCB
-1. «Сервер с 4 ГБ оперативной памяти может выполнять гораздо больше, чем 256 процессов Apache» с его 16 МБ на процесс, это приведет к перестановке, что является основным грехом, согласно всем руководствам по производительности, которые я читал по этому вопросу.
коза
Что произойдет, если вы запустите 4 ГБ JVM-кучи (с неограниченным количеством потоков) в системе с общим объемом доступной памяти 16 ГБ и freeсообщит, что вся память заполнена? 0 или несколько 100мб свободной памяти? Каково хорошее соотношение используемой / свободной памяти для jvm-контейнера?
Никен
1

Это значение в основном зависит от экспериментальной нагрузки на ваш текущий сервер.

попробуйте собрать некоторые данные с помощью «apache top». Сделайте некоторые изменения конфигурации и попробуйте снова. Поскольку я не знаю, какой у вас конкретный вариант использования, сложно придумать конкретные цифры.

Если вы хотите предсказуемое потребление памяти для вашего веб-сервера, пожалуйста, посмотрите на http://wiki.nginx.org/Main

Это решает некоторые проблемы масштабируемости очень классным способом.

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

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

Дай вихрь, это бесплатно :-)

Уникс Дворник
источник