Авторские статьи Снижение нагрузки на VPS (OpenVZ)

Discussion in 'Статьи' started by iron-viper, 10 Aug 2009.

  1. iron-viper

    iron-viper Elder - Старейшина

    Joined:
    13 Nov 2007
    Messages:
    166
    Likes Received:
    45
    Reputations:
    3
    Снижение нагрузки на VPS (OpenVZ)

    Задача:
    Снизить потребление памяти на VPS построенной по технологии OpenVZ, снижение нагрузки.

    Вступление:
    Купил недавно себе VPS построенный на технологии OpenVZ, конфигурация – CPU 1100 Mhz / RAM 512 Mb. Технология виртуализации OpenVZ отличается к примеру от XEN тем, что в OpenVZ ограничивается виртуальная память и это снижает производительность, в моменты когда системе нужно больше ресурсов, а их нету. Изначально не настроенный VPS с ОС Debian Lenny и установленным LAMP со всеми приблудами потреблял около 300 – 350 Mb RAM, что было очень странно. После оптимизации потребление сократилось вдвое. В статье я опишу как снизить потребление памяти путем уменьшения размера стека выделяемого под каждый запущенный процесс, ускорить обработку PHP скриптов средствами eAccelerator.

    1. Подрежем стек
    Итак как я выше писал, на каждый запущенный тред в виртуальной памяти выделяется место под стек. В моем случае в Debian Lenny размер стека равен 10 Mb. Это очень много и при большом количестве тредов потребление памяти будет огромным. Просмотреть размер стека можно командой:

    Code:
    root@vds:~# ulimit –s
    1024
    в ответ будет получен объем в килобайтах. У меня это уже измененный размер.
    Размер стека в 10 Mb велик и его можно и нужно снизить, дабы не порождались пустые выделения памяти на каждый тред. Погуглив и почитав манов я остановился на размере в 1 Mb. Уменьшить его можно командой:

    Code:
    ulimit -s <размер стека на тред в Кб>
    В итоге пописываем ulimit -s 1024 в файле /etc/init.d/rc (по выше), ребутим сервер и радуемся снижением потребления памяти.

    2. eAccelerator
    eAccelerator по сути своей является PHP-акселератором, основное назначение которого состоит в кэшировании бинарного представления кода. Каждый раз при выполнении скрипта, PHP читает все подключаемые файлы и переводит их в бинарный код, при запросе скрипта операция повторяется. Задача eAccelerator состоит в сохранении бинарного кода для повторного использования, уменьшая время выполнения скрипта.
    Установка и настройка его довольно проста и не должна вызвать никаких проблем.
    Для установки и компиляции акселератора понадобится пакет php5-dev, устанавливаем его:

    Code:
    apt-get install build-essential php5-dev
    Теперь нужо скачать и становить акселератор, так как он не входит в состав репозиторий для Debian:

    Code:
    cd /tmp
    wget http://bart.eaccelerator.net/source/0.9.5.2/eaccelerator-0.9.5.3.tar.bz2
    tar xvfj eaccelerator-0.9.5.2.tar.bz2
    cd eaccelerator-0.9.5.2
    phpize
    ./configure
    make
    make install
    После удачной установки необходимо создать файл конфигурации :

    Code:
    vi /etc/php5/conf.d/eaccelerator.ini
    И внести в него строки:

    Code:
    extension="eaccelerator.so"
    eaccelerator.shm_size="16"
    eaccelerator.cache_dir="/var/cache/eaccelerator"
    eaccelerator.enable="1"
    eaccelerator.optimizer="1"
    eaccelerator.check_mtime="1"
    eaccelerator.debug="0"
    eaccelerator.filter=""
    eaccelerator.shm_max="0"
    eaccelerator.shm_ttl="0"
    eaccelerator.shm_prune_period="0"
    eaccelerator.shm_only="0"
    eaccelerator.compress="1"
    eaccelerator.compress_level="9"
    Директория /var/cache/eaccelerator будет испотзоваться акселератором для хранения кэша, поэтому ее необходимо создать и выставить на нее права 0777:

    Code:
    mkdir -p /var/cache/eaccelerator
    chmod 0777 /var/cache/eaccelerator
    После всех действий рестартим апач и наблюдаем работу акселератора:

    Code:
    /etc/init.d/apache2 restart
    Выводы: данная статья написана для тех, кто еще не постиг основы работы систем симейства Unix в среде OpenVZ, нацелена на новичков коим являюсь и я сам. Данные методы помогли мне снизить потребление памяти на VPS до 200-230 Mb + снижение нагрузки на процессор.

    Используемые материалы при написании:

    http://www.howtoforge.com/eaccelerator_php5_debian_etch
    http://www.eaccelerator.net/wiki/Settings
     
    #1 iron-viper, 10 Aug 2009
    Last edited: 10 Aug 2009
    5 people like this.
  2. inlanger

    inlanger Elder - Старейшина

    Joined:
    7 Jan 2007
    Messages:
    1,009
    Likes Received:
    286
    Reputations:
    27
    Супер! Теперь сервер потребляет около 150мб оперативы!
     
    2 people like this.
  3. Foka

    Foka Banned

    Joined:
    13 Feb 2008
    Messages:
    0
    Likes Received:
    43
    Reputations:
    5
    спасибо оч полезная статейка) лови хрестики)
     
    2 people like this.
  4. .Striker

    .Striker Elder - Старейшина

    Joined:
    11 Nov 2007
    Messages:
    82
    Likes Received:
    63
    Reputations:
    -4
    ulimit –s
    помогает только для уменшения нагрузки от веб сервера?
    как по поводу скула?
     
  5. iron-viper

    iron-viper Elder - Старейшина

    Joined:
    13 Nov 2007
    Messages:
    166
    Likes Received:
    45
    Reputations:
    3
    скул надо разгружать настройками. отключением поддержки ненужных форматов таблиц и БД
     
    1 person likes this.
  6. .Striker

    .Striker Elder - Старейшина

    Joined:
    11 Nov 2007
    Messages:
    82
    Likes Received:
    63
    Reputations:
    -4
    поподробнее можешь?
    стукни в асю 108373 или дай свою
     
    1 person likes this.
  7. Slon

    Slon Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    123
    Likes Received:
    21
    Reputations:
    3
    Еще пару советов от меня :)

    Апач советую сразу грохнуть и перевести сервер на nginx+fastcgi дает заметный прирост в производительности и снижает потребление ОЗУ.

    Очень часто кол-во открытых одновременно соединений на ВПС ограничено. Поэтому MySQL и fastcgi лучше всего перевести на unix-сокеты.

    После этого в my.cnf можно добавить
    Code:
    skip-innodb 
    skip-bdb 
    skip-networking
    В nginx.conf можно добавить так же
    Code:
    keepalive-timeout 0;
    Сервер будет сразу разрывать соединение, после того, как отправил ответ клиенту
     
    #7 Slon, 3 Sep 2009
    Last edited: 3 Sep 2009
    1 person likes this.
  8. Витюшка

    Joined:
    12 Aug 2009
    Messages:
    0
    Likes Received:
    216
    Reputations:
    -13
    Хорошая статейка постарался!
     
    3 people like this.