Что могло вызвать нехватку памяти на VPS? [закрыто]

У меня есть пакет VPS.

Я не могу войти в свой lxadmin, потому что ему « не хватает памяти ».

В HyperVM я вижу, что мой VPS использует 240 МБ из 256 МБ.

Когда я перезагружаю HyperVM, объем памяти уменьшается до 2 МБ .

Но затем он медленно ползет назад, минута за минутой, и через 15 минут он достигает 127 МБ и набирает высоту.

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

Исходя из опыта, что, по вашему мнению, может быть причиной этого быстрого расползания памяти?

Что я могу сделать, чтобы изолировать причину?

Вот результат сверху, похоже, что все экземпляры apache складываются, что это значит?

альтернативный текст http://tanguay.info/web/external/lxadminMemoryProblemTop.png

альтернативный текст http://tanguay.info/web/external/lxAdminMemoryProblem.jpg

1
задан 9 April 2015 в 22:55
5 ответов

Войдите в оболочку SSH и работайте top. Это даст Вам общее представление о том, какие процессы в особенности вызывают проблемы здесь.

1
ответ дан 3 December 2019 в 16:42
  • 1
    спасибо, я отправил результат главной команды выше, кажется, что существует много апачских экземпляров каждое потребление приблизительно 5% памяти, действительно ли это нормально? что это говорит мне? –  Edward Tanguay 31 May 2009 в 22:22
  • 2
    Это говорит мне, что у Вас есть слишком много апачских процессов, работающих за той суммой RAM! См. tjofras' ответ. –  Alex J 1 June 2009 в 10:15

Apache породит несколько процессов, который нормален. Можно управлять этим в апачской конфигурации. Настройки зависят от того, какой MPM (Многопроцессорный Модуль) Вы используете.

При использовании Apache рабочий MPM (http://httpd.apache.org/docs/2.0/mod/worker.html), можно управлять им со следующими настройками:

ServerLimit 16, Сколько процессов это позволяется когда-то (это должно быть больше или равным MaxClients/ThreadsPerChild),

StartServers 2, Сколько процессов для запуска, когда Вы запускаете апача

MaxClients 150, Скольким запросу можно одновременно служить

MinSpareThreads 25 Apache попытается сохранить, по крайней мере, это многими потоками неактивный

MaxSpareThreads 75 Apache попытается сохранить меньше затем это многими потоками неактивный

ThreadsPerChild 25, Сколько потоков для каждого процесса (один поток может сервер один запрос в то время),

Таким образом, если у Вас нет достаточной памяти для выполнения всех тех процессов попытка понизить MaxClients и ServerLimit.


При использовании Apache предварительное ветвление MPM (http://httpd.apache.org/docs/2.0/mod/prefork.html), можно управлять им со следующими настройками:

StartServers 20, Сколько процессов для порождения, когда Вы запускаете апача

MinSpareServers 10 Apache будет автоматический корректироваться для хранения по крайней мере этого многим неактивным выполнением процессов

MaxSpareServers 20 Apache будет автоматический корректироваться для хранения меньше затем этого многими неактивными процессами

ServerLimit 150 Это должно быть равно MaxClient для предварительного ветвления MPM

MaxClients 150 Это - максимальное количество процессов, которые породит апач

MaxRequestsPerChild 10000, Сколько обработает запрос процесс, прежде чем он будет завершен.

MaxRequestsPerChild нужно еще некоторое объяснение, скажите, что у Вас есть большое другое выполнение Сценариев PHP и один или два из этого использования намного больше памяти затем остальные. После того как каждый обрабатывает, запустил тот конкретный скрипт, процесс останется в том использовании памяти, пока это не умрет. При использовании этой опции можно установить, как часто Вы хотите, чтобы процессы перезапустили.


Таким образом, как Вы знаете, что настроить эти значения также? Во-первых, фигура, сколько свободной памяти Вы имеете, когда апач не работает. Во-вторых, фигура, какого количества память каждый процесс httpd требует на среднем числе. (похож на somehwere приблизительно 15 МБ от Вашей вершины),

Таким образом, если у Вас есть 150 МБ, свободных, когда апач не работает, необходимо ограничить апача, чтобы только породить 150/15 = 10 процессов.

Таким образом, при выполнении рабочего MPM, это могло бы работать:

ServerLimit 10  
StartServers 2 
MaxClients 150  
MinSpareThreads 25  
MaxSpareThreads 75  
ThreadsPerChild 25 

И если Вы выполняете предварительное ветвление MPM, это могло бы работать лучше:

StartServers 5  
MinSpareServers 2  
MaxSpareServers 8  
ServerLimit 10  
MaxClients 10  
MaxRequestsPerChild 1000
6
ответ дан 3 December 2019 в 16:42

Попытайтесь использовать

pstree

узнать, какой апачский процесс запускает других. Я предполагаю, что у Вас есть в сайте инструкция, которая раздваивает процесс, и породите несколько экземпляров.

0
ответ дан 3 December 2019 в 16:42

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

Мой совет состоит в том, чтобы обновить Ваш VPS. Или если Вы хотите получить лучший удар для маркера, Apache канавы и использовать nginx/lighttpd с php-fpm. Я лично использую выпуск Стандарта веб-сервера Litespeed на своем VPS, и он качается. Единственный недостаток - то, что это - если Ваши сайты выращивают предел прошлого Litespeed (150 параллельных соединений), необходимо будет заплатить за Enterprise Edition или переключиться на другие веб-серверы.

0
ответ дан 3 December 2019 в 16:42

Здесь существует две проблемы:

  • memory_limit размер в PHP.
  • Процессы Apache та загрузка mod_php выполнять PHP.

Для решения первой проблемы необходимо установить memory_limit размер в php.ini, или a .htaccess файл, который может перезаписать значения по умолчанию. Сообщение об ошибке, которое Вы видите, мог легко быть вызван предельной установкой памяти PHP, не пределом VPS.

Можно легко увеличить предел. Истинно фиксация его требует фиксации кода приложения.


Вторая проблема с mod_php более сложно, и требует изменения Вашей установки Apache. mod_php расширение это добавляет использование памяти к каждому процессу Apache, который начинает обслуживать PHP. Сначала, у Вас есть нетронутые процессы Apache, которые обслуживают файлы, и некоторые это служило PHP. Когда объем увеличений запросов, более устаревшие процессы начинают загружать PHP. В какой-то момент Вы излишне используете большую память.

Поэтому я был бы рекомендовать постараться не работать mod_php и выполненные PHP как FastCGI обрабатывают вместо этого.

Таким образом, Вы управляете объемом процессов, которые обслуживают PHP, и все апачские процессы остаются чистыми с низким использованием памяти. Мой весь сервер разработки работает в 250 МБ, размещая веб-сайты, базы данных, электронную почту и redmine.

Apache conf файлы должен иметь следующее содержание:

<IfModule fcgid_module>
    FcgidIPCDir /var/lib/apache2/fcgid/
    FcgidProcessTableFile /var/lib/apache2/fcgid/shm
    FcgidMaxProcessesPerClass 1
    FcgidIOTimeout 600

    AddHandler fcgid-script .fcgi

    <FilesMatch "\.php$">
        AddHandler fcgid-script .php
        Options +ExecCGI
        FcgidWrapper /srv/www/cgi-bin/php5-wrapper.sh .php
    </FilesMatch>

    # Added explicitly, by default it was added by mod_php.conf
    DirectoryIndex index.php
</IfModule>

И php5-wrapper.sh сценарий похож:

#!/bin/sh
#export PHPRC=/etc/php/fastcgi/
export PHP_FCGI_CHILDREN=5
export PHP_FCGI_MAX_REQUESTS=5000
exec /usr/bin/php-cgi5

В некоторых дистрибутивах, php-fastcgi отдельный пакет от php-cgi.

В какой-то момент можно принять решение пойти даже шаг вперед и изменить модель рабочего Apache на поточную обработку (так как PHP не учтен теперь), или переключатель к легкому серверу, такому как nginx.

0
ответ дан 3 December 2019 в 16:42

Теги

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