Оптимизация веб сервера под высокие нагрузки. Оптимизация web сервера


Оптимизация веб-сервера | Информационный портал К2®

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

1. Оптимизация CMS-системы.

Как было показано опытами, которые я проводил несколько лет назад, наибольшая скорость загрузки и пропускная система — у статических файлов. Скорость cms-систем и статических файлов отличается в 1000-10 000 раз. Причем, это еще сильней сказывается при применении системы веб-сервера NGinx.

Зная это, я переработал систему кеширования в нашей cms-системе Корпорация 2 таким образом, чтоб генерировался статический сайт из динамического содержимого. Это дало значительный прирост скорости и значительное уменьшение нагрузки на сервере.

2. Оптимизация работы веб-сервера. Связка Apache-Nginx.

Мы давно практикуем систему 2-х уровневого веб-сервера. Эта система дает устойчивость к большому количеству посещений, и как результат — скорость работы веб-сервера.3. Оптимизация работы базы данных. Связка PostgreSQL-PGBouncer.

Связка о которой многие забывают, но которая просто необходима при большом количестве работающих пользователей в online. Эта связка прекрасно себя проявила и сейчас реально у нас реально выдерживается более 500 пользователей в online. Причем, есть возможность выдерживать еще гораздо большие нагрузки!4. Оптимизация работы с файлами Nginx.

Если не правильно настроить Nginx, то он будет загружать не нужной работой Apache. Поэтому, мы настроили Nginx так, чтоб он как можно реже переводил управление на Apache. В идеале — работая вообще без Apache!

5. Системы кеширования PHP. Остановились на xCache.

Значительное время веб-сервера тратится на компиляцию PHP-кода. Поэтому, я решил установить систему кеширования PHP-кода. Рассматривая ряд вариантов остановился на xCache. Но, ниже дам выдержки из статей для настройки нескольких разных систем кеширования php-кода. Может, в некоторых случаях, они будут более эффективны…

По настройке админки xcache, советую прочитать документацию: http://xcache.lighttpd.net/wiki/InstallAdministration

Установка и настройка xCache

Оптимизация работы вебсерверов, ускорение их работы тема очень интересная, возможности развернуться в этой области предостаточно, инструментов тоже хватает. XCache относится к средствам ускорения работы PHP. Устанавливается XCache как дополнительный модуль PHP и служит для кеширования результатов выполнения скриптов в шаред мемори. По сравнению с eAccelerator, XCache показывает более ощутимые результаты, но в проектах, где объемы кеша очень большие – не совсем подходит. Все таки оперативная память не бесконечна. Установим XCache из портов:

cd /usr/ports/www/xcache/make install clean

При установке доступен диалог настройки сборки, с единственным пунктом Enable code coverage dumper, по умолчанию она включена и служит для определения.предотвращения переполнения памяти.По окончании установки, нужно скопировать файл настройки xcache.ini в /usr/local/etc/php/:

cp /usr/local/share/examples/xcache/xcache.ini /usr/local/etc/php/

и немного исправить.У меня получился такой файл настроек:

[xcache-common]extension = xcache.so#Включим админ интерфейс[xcache.admin]xcache.admin.enable_auth = Onxcache.admin.user = «admin»#В качестве пароля укажем md5 хеш, создать его можно с#помощью команды md5 -s «ваш пароль»xcache.admin.pass = «XXXXXX»

[xcache]xcache.shm_scheme = «mmap»#Выделим для кеша 128 мегабайтxcache.size = 128Mxcache.count = 1xcache.slots = 8Kxcache.ttl = 0xcache.gc_interval = 0xcache.var_size = 0Mxcache.var_count = 1xcache.var_slots = 8Kxcache.var_ttl = 0xcache.var_maxttl = 0xcache.var_gc_interval = 300xcache.test = Offxcache.readonly_protection = Offxcache.mmap_path = «/dev/zero»xcache.coredump_directory = «»xcache.cacher = Onxcache.stat = Onxcache.optimizer = On

[xcache.coverager]xcache.coverager = Onxcache.coveragedump_directory = «»

Настройка самого XCache закончена, остается сделать доступным админ интерфейс. Для этого я у себя скопировал /usr/local/share/examples/xcache/admin в документ рут своего вебсервера www.hilik.org.uaПосле этого админ интерфейс станет доступным по URL http://www.hilik.org.ua/admin/Конечно через этот интерфейс доступна только статистика, но все равно, это полезная функция.Да и авторизация определена вами в xcache.ini.

Взято на сайте http://www.hilik.org.uaУстановка Eaccelerator

PHP — язык интерпретируемый. Это значит, что каждый раз, когда происходит вызов скрипта на этом языке, запускается PHP-интерпретатор, который проводит полный анализ исходного кода. Причем, если спустя секунду произойдет второй запуск того же скрипта, вся процедура будет повторена заново. Это нерациональное использование ресурсов, поэтому мы применим инструмент под названием eAccelerator, который скомпилирует исходные тексты PHP в двоичное представление, оптимизирует их и будет бережно хранить в оперативной памяти для более быстрого доступа. Благодаря только этому скорость обработки PHP-скриптов вырастет в десятки раз (подтверждено тестами).

Пакета eAccelerator нет в репозиториях популярных дистрибутивов, поэтому его придется собрать самостоятельно. Сначала устанавливаем необходимые для сборки утилиты:

$ sudo apt-get install php5-dev build-essential

Далее получаем исходные тексты eAccelerator:

$ cd /tmp/$ wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2$ tar xvjf eaccelerator-0.9.6.1.tar.bz2$ cd eaccelerator-0.9.6.1$ phpize$ ./configure —enable-eaccelerator=shared$ make$ sudo make install

Создаем каталог для хранения кэша:

$ sudo mkdir -p /var/cache/eaccelerator$ sudo chmod 0777 /var/cache/eacceleratorИ, наконец, подключаем eAccelerator к PHP (добавить в начало файла):# vi /etc/php5/apache2/php.ini[PHP]; Подключаем расширениеextension = «eaccelerator.so»eaccelerator.enable = «1»; Максимальный размер дискового кэша (Мб)eaccelerator.shm_size = «64»; Каталог для хранения кэшаeaccelerator.cache_dir = «/var/cache/eaccelerator»; Включаем оптимизатор кодаeaccelerator.optimizer = «1»; Перекомпилировать модифицированные скриптыeaccelerator.check_mtime = «1»; Отключаем режим отладкиeaccelerator.debug = «0»; Кэшировать все файлы (пустой фильтр)eaccelerator.filter = «»; Неограниченный размер кэша в памятиeaccelerator.shm_max = «0»; В случае отсутствия места в кэше удалять объекты старше1 часа (3600 секунд)eaccelerator.shm_ttl = «3600»eaccelerator.shm_prune_period = «0»; Кэшировать данные и в памяти, и на дискеeaccelerator.shm_only = «0»; Сжимать кэшированные данные с максимальным уровнем компрессииeaccelerator.compress = «1»eaccelerator.compress_level = «9»

Установка APC

Статья по адресу: http://phpcoder.ws/2009-02/apc-setup.html

APC (Alternative PHP Caching – это Альтернативный ПХП Кешер, руководство по использованию на английском языке). Входит в число трех наиболее популярных способов кеширования опкодов для выполненных php скриптов. Его ближайшими конкурентами являются XCache и eAccelerator. О последнем я уже писал недавно на этом блоге, а статья об XCache, который имеет несколько очень существенных преимуществ перед конкурентами, будет опубликована здесь в ближайшее время. Короче говоря, APC это еще один способ повысить быстродействие вашего сайта в том случае если он расположен на вашем сервере, вы являетесь админом своего хостинга и вас волнуют вопросы быстродействия размещенных на нем сайтов…

Установка APC

Одним из основных преимуществ APC является его простота установки. Если вы являетесь пользователем Debian/Ubuntu, то вполне вероятно что для установки вам будет достаточно набрать в консоли команду sudo aptitude install php-apc или установить этот пакет через synaptic. Если вы используете другой дистрибутив, или по какой-то причине не можете установить “родной” deb-пакет, то у вас есть другой путь – установка из PECL. Для этого нужно набрать команду: sudo pecl install apc, которая скачает нужные архивы из сети, распакует, откомпилирует и установит полученный файл apc.so в нужную директорию.Проверка установки APC

Во-первых, проверьте что строчка загрузки расширения extension=apc.so действительно прописалась в php.ini (или создан файл apc.ini с этой строчкой в папке с конфигами расширений php – зависит от вашего дистрибутива. Для Debian, например, этой папкой будет /etc/php5/apache2/conf.d/

Если строчка успешно найдена/добавлена, то перезапускаем сервер apache и переходим к проверке самого расширения. Для этого находим папку в которую было установлено расширение. В этой папке будет лежать файл apc.php (файл так же можно взять в архиве установки), копируем его в public директорию любого из сайтов на этом веб-сервере и заходим браузером по адресу http://сайт/apc.php. Если расширение было установлено корректно, то вы увидите на загруженной странице статистику по APC (скриншоты приведены ниже).Общая информация об APC

Общая информация об APCПодробная информация об APC

Подробная информация об APCИнформация о хосте

Информация о хостеЗамеры изменения производительности

Для проверки была выбрана CMS Joomla1.5.9 с демонстрационным набором данных после установки и с шаблоном дизайна по умолчанию. При тестировании производительности при помощи утилиты ab2 (было выполнено 1000 обращений к главной странице сайта в 5 потоков) скорость генерации страниц увеличилась на 40%Недостатки APC

Объективности ради отмечу и недостатки APC…

* отсутствует поддержка FastCGI* кеширование работает только с модулем apache mod_php (в режиме cli ускорения не будет)* работает с версиями PHP<=5.2 С версией 5.3 отмечаются проблемы, а что касается 6.0 — будущее совсем туманно. Возможно какой-то механизм кеширования будет интегрирован в само ядро…

Заключение

По-моему стоит установить APC на своем веб-сервере и попробовать – подойдет ли оно именно вам. Несмотря на ряд описанных выше ограничений APC считается наиболее надежным из тройки основных реализаций кеширования для языка PHP…

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

corp2.info

Оптимизация веб приложения - настройка сервера для HIGHLOAD

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

 

 

 

Любой проекта редким исключением целесообразно запускать на виртуальном сервере с минимальной конфигурацией. Об архитектуре и развитии стоит задумываться тогда когда популярность проекта возрастает и серверу не хватает ресурсов для работы.

 

 

Для веб-сервера обычно используется связка Nginx+Apache, при росте проекта от последнего часто отказываются. В качестве сервера баз данных применяют обычно MySQL.

 

Nginx+Apache

Максимальную производительность можно получить используя Nginx с PHP-FPM, но такая конфигурация менее устойчива и сложнее поддерживается ввиду невозможности использования файлов .htaccess .

Nginx с PHP-FPM — лучшее решение для сервера, с которого работает один сайт и который постоянно поддерживается профессионалами.

 

Веб-сервер — только один из элементов системы, обслуживающей приложение. Ниже приведены основные принципы работы, которые применимы к приложению в целом.

 

 

Как контролировать ситуацию когда проект растет

При росте ресурса архитектуру системы следует совершенствовать — делается это за счет тюнинга ПО и заточки для работы с учетом выделенных серверу ресурсов (особенно это актуально для MySQL), и масштабированием — вертикальным или горизонтальным.

 

Вертикальное масштабирование — увеличение количества ресурсов.Горизонтальное масштабирование — вынос части проекта на отдельные сервера.

 

Для того чтобы проверить как существующая конфигурация сервера поведет себя при возникновении высокой нагрузки можно сымитировав такие условия используя ab или Siege.

 

Для обеспечения быстродействия используется Memcached и нереляционные СУБД такие как MongoDB и Redis. Также часто создается несколько бэкенд и фронтэнд серверов запросы между которыми распределяются по предусмотренной заранее логике для того чтобы уменьшить нагрузку на инфраструктуру.

 

Нагруженные веб-проекты существуют на выделенных серверах или, чаще, на VPS и VDS. Облачные технологии становятся все дешевле и избавляют от необходимости иметь свой физический сервер. Арендовать мощности у специализированной компании, которая занимается поддержкой железа значительно выгоднее.

 

 

Вертикальное масштабирование в этом случае реализуется сменой тарифа — обычно без простоя в работе.

Когда увеличивать ресурсы более некуда (возможности железа не безграничны) или нецелесообразно — начинается масштабирование горизонтальное — вынос частей проекта на другие машины. Хорошее архитектурное решение помимо решения основной задачи позволит увеличить отказоустойчивость, скорость работы.

 

 

 

 

При планировании архитектуры окажутся полезны статья категории HIGHLOAD.

Прежде всего читайте про тонкую настройку Nginx. Он используется в абсолютном большинстве проектов.

server-gu.ru

Установка и оптимизация Web сервера Apache

Дрезюля Дмитрий

FreeUnix Team

Сервер имеет следующую конфигурацию:

CPU: 2xPIII 1133 Mhz 512k кэш RAM: 2x512 DIMM ECC HDD: Seagate Barracuda IV 7200 rpm 40 Gb MB: Intel Server Board SAI2 ServerWorks ServerSet III LE chipset+LAN 100Mbit(Intel 82559)+Video

Сервер будет поддерживать несколько виртуальных хостов, сайты написанына PHP 4.0 и обращаются к базе данных mysql и pgsql. Также будет поддерживаться протокол https.

Устанавливаем FreeBSD в минимальной конфигурации с разделом swap в 2 Gb.

Для того чтоб сравнить выигрыш в производительности от тюнинга FreeBSDперекомпиляцию ядра и тюнинг FreeBSD буду производить после установки итестирования на производительность веб сервера и самой системы.

Для установки требуются следующие пакеты:

На момент написания статьи Apache 1.3.27 была последней версией.

Apache 1.3.27 http://www.apache.org пакет apache_1.3.27.tar.gz ftp://apache.secsup.org/pub/apache/dist/httpd

Поддержка протокола шифрования необходима для интерфейса управления контентом наших сайтов.

Mod_ssl http://www.modssl.org пакет mod_ssl-2.8.12-1.3.27.tar.gz ftp://ftp.cronyx.ru/pub/mirror/modssl/source

openssl http://www.openssl.org пакет openssl-engine-0.9.6b.tar.gz ftp://ftp.cronyx.ru/pub/mirror/modssl/

Перл не был нужен нам для работы но перл является распространенным языком для написания скриптов и возможно в будущем он нам потребуется.

mod_perl http://perl.apache.org пакет mod_perl-1.27.tar.gz ftp.csua.berkeley.edu/pub/.1/ports/distfiles

mod_php http://www.php.net php-4.3.0.tar.gz ftp.cronyx.ru/.2/mirror/php/distributions

mysql http://www.mysql.com mysql-3.23.54.tar.gz ftp://ftp.dn.ru/pub/MySQL/Downloads/MySQL-3.23/

PostgresSQL-7.1 http://www.postgresql.com/ postgresql-7.1.tar.gz ftp://ftp.dn.ru/pub/PgSQL/source/v7.1

- Сборка веб сервера

создаю в корне директорию src

#cd / #mkdir src #cd /src

Распаковываю архивы:

#tar xvfz apache_1.3.27.tar.gz #tar xvfz mod_perl-1.27.tar.gz#tar xvfz php-4.3.0.tar.gz#tar xvfz mod_ssl-2.8.12-1.3.27.tar.gz#tar xvfz openssl-engine-0.9.6b.tar.gz#tar xvfz mysql-3.23.54.tar.gz#tar xvfz postgresql-7.1.tar.gz

Устанавливаем openssl

#cd openssl-engine-0.9b#sh config no-idea no-threads -fPIC#make#make test

Внедрение модуля mod-ssl в исходные коды apache

#cd ../mod_ssl-2.8.12-1.3.27#./configure --with-apache=../apache_1.3.27 --with-ssl=../openssl-engine-0.9.6b --prefix=/usr/local/apache

Выполняю конфигурацию apache

#cd ../apache_1.3.27#./configure --prefix=/usr/local/apache --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/usr/local/apache/conf --logfiledir=/var/log/apache --datadir=/usr/local/apache/data

Часть наших сайтов написаны под MySQL и часть под PostgreSQL. Поэтому необходимо установить обе базы данных. Дело в том что MySQL не поддерживает вложенные запросы кроме MySQL 4 версии которая на момент написания статьи находилась в разработке. Поэтому встала необходимость выбора второй базы данных которая поддерживает вложенные запросы.

Устанавливаю базы данных:

#cd mysql-3.23.54#./configure#make#make install#./scripts/mysql_install_db#mysqladmin -u root password 'ввести пароль администратора'#safe_mysqld --user=root& Данную строку необходимо добавить в автозагрузку.

У меня много памяти и много таблиц поэтому использую следующую оптимизацию.Запуская mysqld следующим образом.

#safe_mysqld -O key_buffer=16M -O table_cache=128 -O sort_buffer=4M -O record_buffer=1M &

key_buffer Величина буфера в байтах который используется для индексов. Рекомендуется увеличить его используется много insert и delete запросов.

sort_buffer Под каждый поток который использует сортировку order by group by выделяется количество памяти определенное этим параметром поэтому при большом количестве памятиследует увеличить этот параметр.

record_buffer При последовательном сканировании таблиц например при использовании insert под каждую таблицу выделяется память определяемая этим параметром. Его также следует увеличить в целях увеличения производительности базы данных.

Для компиляции PostgreSQL нужен gmake

Устанавливаю его с портов.

#cd /usr/ports/devel/gmake#make#make install

Для того чтоб обновились пути к gmake перевхожу в систему.

Устанавливаю PostgreSQL

#cd ../postgesql-7.1#./configure#gmake#gmake install#adduser postgres#chown -R /usr/local/pgsql#su postgres#cd /usr/local/pqsql/bin#./initdb -D /usr/local/pgsql/data#./postamster -D /usr/local/pgsql/data & эту строку следует включить в автозагрузку системы#./createdb test

Устанавливаю PHP

#cd /src/php-4.3.0#./configure --prefix=/usr --with-apache=../apache_1.3.27 --with-config-file-path=/usr/local/apache/conf --disable-debug --enable-safe-mode --enable-inline-optimization --with-gnu-ld --enable-memory-limit --with-mysql --with-pgsql#make #make install

Внедрение модуля mod_perl в исходный коды apache

#cd ../mod_perl-1.27#perl Makefile.PL EVERYTHING=1 APACHE_SRC=../apache-1.3.27/src USE_APACI=1 PREF_HTTPD=1 DO_HTTPD=1#make#make install

На этом все приготовления закончены перехожу к компиляции apache

#cd ../apache_1.3.27#./configure --prefix=/usr/local/apache --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/usr/local/apache/conf --logfiledir=/var/log/apache --datadir=/usr/local/apache/data --localstatedir=/var --runtimedir=/var/run --enable-module=ssl enable-rule=SSL_SDBM --desable-rule=SSL_COMPAT --activate-module=src/modules/php4/libphp4.a --enable-module=php4 --activate-module=src/modules/perl/libperl.a --enable-module=perl --disable-module=status --disable-module=userdir --disable-module=autoindex --disable-module=asis --disable-module=imap --disable-module=env --disable-module=actions

На момент конфигурирования веб сервера libphp4.a libperl.а еще не созданы и если у вас появится ошибка то не удивляйтесь если не найдете их в каталоге откуда якобы они должны подключаться:src/modules/php4/libphp4.asrc/modules/perl/libperl.а

Но если в этих каталогах пусто то вы сделали что то не так и ошибку следует искать в инсталлировании mod-perl либо в pod-php в зависимости от того какая директория пуста. Я например почему то забыл выполнить make install для mod-php после инсталляции и повторном конфигурировании apache все прошло успешно.

#make#make certificate

Последуют вопросы о фирме месте расположения и т.д. для сертификата.На вопрос Encrypt the private key now? ответить нет на остальные вопросы отвечать по вкусу.

#make install

Все apache скомпилирован и установлен.Запуск apache с поддержкой протокола https

#cd /usr/sbin#./apachectl startssl

Для проверки работоспособности сервера набераю адрес сервера в броузере.

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

Во первых поменял группу и пользователя под которым запускается apache с nobody на wwwОсновной файл моего сайта называется index.php поэтом тоже добавляю его после index.html

DirectoryIndex index.html index.php

Для того чтоб выполнялись файлы написанные на php добавляю следующие записи

AddType application/x-httpd-php .phpAddType application/x-httpd-php-source .phps

Детальное описание к файлу конфигурации сервера можно найти тут http://freeunix.unicor.ru/content.php?page=Apache&id=57Пример конфигурационного файла Apache.

Оптимизация системы.

Обычная инсталляция FreeBSD имеет ядро GENERIC которое должно запускаться практически на всех машинах и имеет поддержку всех распространенных устройств необходимых для запуска системы. Но данное ядро не оптимизировано под вашу систему и имеет поддержку многих лишних устройств которые не присутствуют в системе. Дальше я рассмотрю как перекомпилировать ядро для двухпроцессорного сервера и некоторые параметры которые также влияют на производительность сервера.

Для начала проведу тест на производительность веб сервера с ядром GENERIC которое неимеет мультипроцессорной поддержки.

Для теста используется программа http_loadТест запускается на отдельном сервере который соединен с данным по 100Мбит сети.Тест генерирует множество запросов к серверу и выдает подробный результат.тест запускался с следующими параметрами:

http_load -rate 10 -seconds 300 urls

Рэйт может меняться от 1 до 10. То есть тест проводился максимально возможном количестве запросов.Время теста 300 секунд или 5 минут.Файл urls содержит адрес сервера по протоколу http и httpsВ моем случае файл выглядел следующим образом:http://192.168.0.3https://192.168.0.3

Для начала я проводил тестирование на веб сервере где стояла стандартная страница Apache то есть не использовался PHP и не было обращений к базе данных.

Загрузка системы составляла около 30% и было использовано лишь 12М оперативной памяти

Тест выдал следующие результаты:

2997 fetches, 10 max parallel, 8.01098e+06 bytes, in 300.06 seconds2673 mean bytes/connection9.98799 fetches/sec, 26697.9 bytes/secmsecs/connect: 30.2372 mean, 1137.94 max, 0.43 minmsecs/first-response: 135.683 mean, 1290.3 max, 3.522 min

Второй этап тестирования. Размещаю на веб сервере сайт написанный на языке PHP и имеющий большое количество обращений к базе данных MySQL

Запускаю тестирование с теме же параметрами.

Загрузка системы так же составляет около 30% использовано памяти 15М Тест выдал следующие результаты:

2999 fetches, 2 max parallel, 3.68358e+07 bytes, in 300.014 seconds12282.7 mean bytes/connection9.99621 fetches/sec, 122780 bytes/secmsecs/connect: 0.535904 mean, 2.25 max, 0.471 minmsecs/first-response: 6.98476 mean, 1008.83 max, 5.491 min

Преступаю к оптимизации системы.

Утилитой sysinstall устанавливаю исходные кода ядра системы.создаю файл настроек нового ядра

#cd /usr/src/sys/i385/conf#cp GENERIC new#ee new

Ниже приводится содержимое файла:

machine i386cpu I686_CPUident mymaxusers 512

options NMBCLUSTERS=65536

Параметры maxusers и NMBCLUSTERS являются самыми важными в оптимизации системы.

options MATH_EMULATE options INET options FFS options FFS_ROOT options SOFTUPDATES options UFS_DIRHASH options MFS options MD_ROOT options PROCFS options COMPAT_43 options UCONSOLE options USERCONFIG options VISUAL_USERCONFIG options KTRACE options SYSVSHM options SYSVMSG options SYSVSEM options P1003_1B options _KPOSIX_PRIORITY_SCHEDULINGoptions ICMP_BANDLIM Включает лимитирование ICMP пакетов в дальнейшем будет показано как выставлять значение на количество входящих пакетов. options KBD_INSTALL_CDEV

options SMP Включает поддержку нескольких процессоров. В данной версии FreeBSD процессы распределяются между процессорами т.е. часть процессов запущена на одном процессоре а другая часть на другом . Ожидается равномерная нагрузка процессоров в FreeBSD 5.0 options APIC_IO

device isa Поддержка isa и pci интерфейсовdevice pci

Поддержка АТА устройств

device ata0 at isa? port IO_WD1 irq 14device ata1 at isa? port IO_WD2 irq 15device atadevice atadisk options ATA_STATIC_ID

device atkbdc0 at isa? port IO_KBDdevice atkbd0 at atkbdc? irq 1 flags 0x1device psm0 at atkbdc? irq 12

device vga0 at isa?

pseudo-device splash

device sc0 at isa? flags 0x100

device npx0 at nexus? port IO_NPX irq 13 Поддержка мат. сопроцессора.

Поддержка сети и сетевого интерфейсаdevice miibus device fxp pseudo-device looppseudo-device ether

Поддержка файрвола.

pseudo-device bpf options IPFIREWALLoptions IPFIREWALL_VERBOSEoptions IPFIREWALL_VERBOSE_LIMIT=100

На веб сервере мне не нужна поддержка дисководов портов ввода вывода USB и т.д. поэтому все ненужные мне устройства я удалил из конфигурации ядра.

Сохраняю файл компилирую и инсталлирую новое ядро.

#config new#cd ../../compile/new#make depend#make #make install

Перезагружаю сервер с новым ядром.

#reboot

Новое ядро имеет файрвол который по умолчанию закрывает все. И не дает подключатся ксистеме по сети.

добавляю правило разрешающее все подключения к системе.

#ipfw add 1 allow ip from any to any

Для того чтоб просмотреть список правил файрволла воспользуюсь опцией show

#ipfw show

Запускаю тест http_load с теми же опциями.Загрузка системы составляет 15% и используется 11М памяти против 30% и 15М до тюнинга.

Тест выдал следующие результаты.

2999 fetches, 3 max parallel, 3.68367e+07 bytes, in 300.014 seconds12283 mean bytes/connection9.9962 fetches/sec, 122783 bytes/secmsecs/connect: 1.6749 mean, 3000.79 max, 0.493 minmsecs/first-response: 7.15033 mean, 1006.84 max, 5.857 min

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

Оптимизация файловой системы.

Включение soft updates т.н. мягкие обновления tunefs изменяет динамические параметры файловой системы повышается скорость работы файловой системы особенно если это связано с большим количеством маленьких файлов и повышается надежность файловой системы.

Для этого надо размонтировать файловые системы командой umount

#umount -f /usr#umount -f /tmp#umount -f /var

Включаю soft updates утилитой tunefs. Подробную информацию по ключам можно найти в manстранице документации.

#tunefs -n enable /usr#tunefs -n enable /var#tunefs -n enable /tmp

По умолчянию FreeBSD работает с диском в синхронном режиме и включив асинхронный режим можно выиграть в производительности. Но появляется вероятность появления ошибок. Поэтому следует переводить в асинхронный режим работы только те разделы работоспособность которых не так важна. Например /tmp

#mount -u -o async /tmp

Или в файле /etc/fstab в поле options после rw указать async: rw,async.

Изменение значений переменных Sysctl.

Следующие строки необходимо добавить в файл /etc/sysctl.conf

vfs.vmiodirenable=1kern.maxfiles=65536net.inet.icmp.icmplim=300kern.ipc.maxsockbuf=2097152kern.ipc.somaxconn=8192kern.ipc.maxsockets=16424net.inet.tcp.rfc1323=1net.inet.tcp.delayed_ack=0net.inet.tcp.sendspace=65535net.inet.tcp.recvspace=65535net.inet.udp.recvspace=65535net.inet.udp.maxdgram=57344net.local.stream.recvspace=65535net.local.stream.sendspace=65535

Перезагружаю систему.

Запускаю тест с теми же параметрами.

Загрузка системы снизилась на 2% использование памяти осталось на прежнем уровне.

Результаты теста приведены ниже

2999 fetches, 3 max parallel, 3.68376e+07 bytes, in 300.005 seconds12283.3 mean bytes/connection9.99651 fetches/sec, 122790 bytes/secmsecs/connect: 3.53642 mean, 3000.73 max, 0.45 minmsecs/first-response: 7.59055 mean, 1006.91 max, 5.769 min

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

Автор: Дрезюля ДмитрийE-mail: [email protected]

yapro.ru

Оптимизация web-сервера: eAccelerator | Шпаргалки админа

Оптимизация web-сервера: eAccelerator

Опубликовал(а): admin в: 26 ноября 2008

продолжаю облегчать жизнь серверу.eAccelerator — все мы знаем что при обращении к файлу пхп вэб сервер компилирует пхп файл в некую программу, которая в дальнейшем, что-то делает и выдаёт нам результат в виде html, ну и кто-то задумался(может отбукился 🙂 ): «а зачем постоянно делать одну и туже работу — компилировать при каждом обращении один и тот же файл», и вот eAccelerator берёт откомпилированный php файл и складывает во временную папку и когда пользователь обращается к очередному пхп файлу в дело вступает eAccelerator, который проверяет есть ли уже «готовый» запрашиваемый файл, если находит готовый то сразу запускает его, тем самым облегчает жизнь серверу (значительно снижает нагрузку на процессор) например у меня нагрузка в часы пик с 70% упала до 7-25%

ставим php5-dev

apt-get install php5-dev

берём свежий дистрибутив с http://eaccelerator.net/распаковываем, заходим в извлечённый каталог

phpize

./configure —enable-eaccelerator=shared

make

make install

cd /etc/php5/conf.d

Создаём конфигурационный файл для акселератора

touch eacclerator.ini

вставляем в него содержимое

zend_extension = «/usr/lib/php5/20060613+lfs/eaccelerator.so»eaccelerator.shm_size = «0»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 = «7»eaccelerator.allowed_admin_path = «/var/www/»

создаю каталог для кэша

mkdir /var/cache/eaccelerator

chmod 777 /var/cache/eaccelerator

теперь можно перезапустить apache

для контроля над тех процессом есть файл control.phpв нём находим логин пароль и перекидываем в нужную нам папку на территории вэб сервера ну и заходим 🙂

www.odmin4eg.ru

Оптимизация веб сервера под высокие нагрузки

Медленная работа сайта — зачастую, это первое что приводит нас к оптимизации работы сервера.

Большинство хостингов, VPS и выделенных серверов требуют дополнительной оптимизации. Также, хостеры, зачастую отключают важные модули для уменьшения нагрузки на их сервера. Как правило, по умолчанию в базовый пакет поставки услуг входят исключительно необходимые приложения со стандартной конфигурацией. Большинство из них в реальной жизни требуется настраивать под определенный движок сайта.

Зачастую, такие действия в состояние повысить производительность сайта без затрат на дополнительное железо в десятки раз! Постоянно разрабатывая сайты, наша компания сталкивается с разнообразными хостингами, VPS серверами и dedicated серверами. По роду своей деятельности нам пришлось открыть отдельное направление работ по оптимизации хостингов и серверов. И мы добились отличных результатов.

Ускорение работы сервера

Качество оптимизации сервера зависит от нескольких параметров.

Оценив основные параметры, мы даем четкий ответ о возможности оптимизации данного сервера, а также, в ряде случаев конкретную цифру увеличения производительности. Средняя величина прироста производительности колеблется от 300% до 5000%. Столь сильный разброс зависит от ряда факторов.

Оценка существующей конфигурации

Оценка производится по целому ряду параметров:

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

Результат ускорения сайта

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

klondike-studio.ru

Оптимизация настроек web-сервера [Colobridge WIKI]

Применимость: nginx, ApacheСлова для поиска: веб, веб-сервер

Задача:

Увеличение производительности сайта.

Решение:

Для увеличения производительности и скорости работы веб-приложения можно произвести оптимизацию веб-сервера, который отвечает за его работу. Распространенными веб-серверами являются nginx и Apache. Параметры, приведенные в данной статье проверены на тестовом приложении и для конкретного проекта должны подбираться опытным путем. Перед началом оптимизации можно проверить скорость загрузки приложения на данном ресурсе http://www.webpagetest.org/

Оптимизация настроек nginx

Для начала необходимо сохранить старый конфигурационный файл:

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.back

Теперь следует открыть файл конфигурации nginx текстовым редактором:

# vim /etc/nginx/nginx.conf

Далее приступим к редактированию основных параметров:

Максимальное количество одновременных соединений, рекомендованное значение равно количеству ядер процессора в системе:

worker_processes 4;

Включение логирования только критических ошибок:

error_log /var/log/nginx/error.log crit

Далее необходимо отредактировать блок настроек events:

events { # максимальное число соединений одного рабочего процесса worker_connections 2048; # приём максимально возможного количества соединений multi_accept on; # максимальное значение файловых дескрипторов для nginx, должно быть равным удвоенному # значению максимального количества клиентов (worker_processes * worker_connections) worker_rlimit_nofile 17000; }

Произведем настройки кэширования:

http{ # Максимальное количество файлов в кэше open_file_cache max=200000 inactive=20s; # Через какое время будет удалён кэш open_file_cache_valid 30s; # Кэширование информации использованной хотя бы 2 раза open_file_cache_min_uses 2; # Кэширование информации об отсутствующих файлах open_file_cache_errors on;

Позаботимся о базовой безопасности:

# скрыть версию nginx для безопасности server_tokens off; # защита от Poodle ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Настроим отправку данных и заголовков

# метод отправки данных, эффективнее чем read + write sendfile on; # Отправка заголовков начала и конца в одном пакете tcp_nodelay on; tcp_nopush on;

Включим сжатие контента для уменьшения трафика

# проверка сжатия: http://highloadtools.com/gzip gzip on; gzip_disable "msie6"; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

Настроим параметры соединений и запросов клиента

# ждать перед закрытием keepalive соединения keepalive_timeout 30; # максимальное количествоо keepalive запросов от одного клиента keepalive_requests 100; # если нет ответа от клиента - сброс соединения reset_timedout_connection on; # ждать тело запроса клиента, затем сброс соединения client_body_timeout 10; # таймаут при чтении заголовка запроса клиента client_header_timeout 10; # если клиент прекратит чтение ответа - сброс соединения send_timeout 10; # не принимать запрос размером более 2 Мб client_max_body_size 2048k; # максимальный размер буфера для хранения тела запроса клиента client_body_buffer_size 1k; # максимальный размер буфера для хранения заголовков запроса клиента client_header_buffer_size 1k; # число и размер буферов для чтения большого заголовка запроса клиента large_client_header_buffers 4 8k; }

Оптимизация настроек Apache

Для начала сохраним старый конфигурационный файл:

cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.back

Отключение модулей Apache

Отключайте модули, которые Вам не нужны. Это сэкономит множество ресурсов на обработке запросов. Модули Apache обычно поставляются как плагины (DSO), поэтому их включение и отключение делается через конфигурационный файл. Обычно достаточно следующих модулей:

* mod_alias, * mod_authz_host, * mod_deflate, * mod_dir, * mod_expires, * mod_headers, * mod_mime, * mod_rewrite, * mod_log_config, * mod_autoindex, * mod_negotiation, * mod_setenvif.

MPM

MPM позволяет выбрать метод обработки параллельных запросов. Оптимальный вариант — Worker — поточный MPM. В нем каждый запрос обслуживается в отдельном потоке одного из дочерних процессов. Потоки — более легкие для ОС объекты, чем процессы. Следовательно, в этом случае производительность повышается.Для включения Worker MPM, нужно открыть файл:

# nano /etc/sysconfig/httpd, убрать комментарий со строки # HTTPD=/usr/sbin/httpd.worker и перезапустить Apache # /etc/init.d/apache2 restart

Директива MaxClients

Директива MaxClients устанавливает максимальное количество параллельных запросов, которые будет обрабатывать сервер. Эту настройку нужно адаптировать с течением времени, работайте в пределах значений в 128…4096: MaxClients 128 Если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь.

Директива MaxRequestsPerChild

Директива MaxRequestsPerChild устанавливает сколько запросов может обработать один дочерний процесс/поток прежде чем он будет завершен. По умолчанию значение этой директивы установлено в 0, что означает что однажды созданный процесс/поток не будет завершен никогда. Этот параметр позволяет избавиться от проблем с утечкой памяти, поэтому лучше установить его:

# MaxRequestsPerChild 1024 После 1024 обработанных запросов процесс будет перезапущен.

Директива KeepAlive

KeepAlive запросы позволяют устанавливать постоянные соединения между клиентом и сервером. Это экономит ресурсы на отсутствии повторной установки соединений. Обязательно включайте эту опцию.

# keepalive on # keepalivetimeout 30 Включаем KeepAlive и устанавливаем время ожидания перед закрытием соединения в 30 секунд. Бывают случаи, когда пользователь отправляет только один запрос. Например, download-сервер. Тогда KeepAlive может быть бесполезен и даже вреден, т.к. при включенном KeepAlive сервер закрывает соединение не сразу, а ждет какое-то время (KeepAliveTimeout).

Включение сжатия

Все современные браузеры поддерживают сжатие. Включение gzip существенно уменьшит размер трафика.

<code>* AddOutputFilterByType DEFLATE text/plain * AddOutputFilterByType DEFLATE text/html * AddOutputFilterByType DEFLATE text/xml * AddOutputFilterByType DEFLATE text/css * AddOutputFilterByType DEFLATE application/xml * AddOutputFilterByType DEFLATE application/xhtml+xml * AddOutputFilterByType DEFLATE application/rss+xml * AddOutputFilterByType DEFLATE application/javascript * AddOutputFilterByType DEFLATE application/x-javascript </code>

Завершение настройки Apache

После применения всех параметров необходимо перезапустить веб-сервер Apache:

# /etc/init.d/apache2 restart

Смотрите также:

Актуальность: 2015/01/23 10:03

wiki.colobridge.net

Настройка и оптимизация веб сервера Apache.

Про установку LAMP сервера  и настройку Apache уже писали. Мы свами немного углубимся и разберемся с глобальными настройками. И оптимизируем Apache под слабый сервер.

Первым делам заглянем в файл настройки /etc/apache2/conf-available/security.conf :

ServerTokens Minimal #Установим минимальные сведения о сервере. Даная настройка повышает безопасность  веб сервера.

ServerSignature Off #Не указывать E-mail при ошибках сервера.

Далее пойдем в глобальные настройки /etc/apache2/apache2.conf 

Timeout 60 #Указывает как долго сервер будет пытаться продолжить прерванную передачу или прием данных, 60 секунд за глаза.

KeepAlive On #Позволяет передавать несколько файлов, за одно соединение, конечно же включаем.

MaxKeepAliveRequests 100 #Максимальное количество запросов за одно соединение. Скажем если пользователи в среднем смотрят только одну страницу на сайте,и она не очень тяжелая, не нагружена графикой то значение 100 вполне подойдет или даже много.

KeepAliveTimeout 15 #Таймаут соединения, обычно для загрузки страницы достаточно 5-10 секунд.

MaxClients 14 #Устанавливает максимальное количество параллельных запросов, которые будет обрабатывать сервер. При подключении нового пользователя Apache  создает новый процесс . Для статических файлов apacheиспользует около 2-3 Мб на процесс, для динамики (php, cgi) — зависитот скрипта, но обычно около 16-50 Мб. Данный параметр надо выбирать из  объёма оперативной памяти и числа клиентов одновременно обращающихся к серверу. Если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь, размер которой устанавливается с помощью директивы ListenBacklog.

По умолчанию Apache работает в режиме prefork mpm, то есть для каждого пользователя создается отдельный процесс. Опции MaxSpareServers  MinSpareServers и StartServers  используются  только в этом режиме. Эти директивы позволяют заранее иметь в памяти созданные процессы, чтобы не приходилось этого делать во время получения запроса.

MaxSpareServers 5  #Максимальное число свободных процессов. Если MaxSpareServers слишком велико, apache будет сильно нагружатьсистему этими процессами, даже если количество клиентов минимально.

MinSpareServers 3  #Минимальное число.

StartServers 1 #При запуске будет создан 1 процесс.

MaxRequestsPerChild 2000 #Устанавливает сколько запросов может обработать один дочерний процесс/поток прежде чем он будет завершен.Этот параметр позволяет избавиться от проблем с утечкой памяти.

Ну и конечно для производительности веб сервера очень важно сжатие трафика. Так что не забудьте проверить что модуль mod_deflate включен. Вот и все что хотелось вам рассказать, надеюсь моя статья вам помогла.

 

 

 

 

 

 

Возможно эти статьи будут вам интересны.

xn--90aeniddllys.xn--p1ai


Prostoy-Site | Все права защищены © 2018 | Карта сайта