Увеличиваем скорость livestreet. Nginx. GZip и не только.
![](http://livestreet.ru/uploads/images/00/07/36/2011/12/08/365702.gif)
Для тестирования производительности изначально использовал приложение siege, когда меня там цифры стали более-менее радовать, уже начал использовать для тестов замечательный сайт loadimpact.com (количество бесплатных проверок ограничено, не злоупотребляйте сразу). Привожу картинки как было и как стало (сразу хочу заметить увеличение производительности не только из-за настройки nginx).
1. Debian 5 (64) nginx + apache + php-fcgi + eAccelerator + memcache (Апач по сути только для ISPmanager использовался)
![](http://habrastorage.org/storage1/8f46af64/6a90a5a7/76e511ac/3d4ad806.png)
2. Debian 5 (32) nginx + apache + mod_php + APC + memcache
![](http://habrastorage.org/storage1/a2d37535/a07fbdb2/06aa6c1c/8b3dec36.png)
Начитавшись статей по разнице 32 и 64 версиях ОС переустановил Debain, 32 субъективно быстрее показалась.
Подразумеваю что у вас уже все установлено и сайты работают, описываю какую донастройку можно сделать для увеличения производительности системы. Ниже привожу строки из моего /etc/nginx/nginx.conf отвечающие за сжатие методом gzip с комментариями.
# Включаем сжатие gzip on; #Степень сжатия (рекомендую 4-5, больше смысла не имеет нагрузка на ЦПУ растет, а файлы не значительно уменьшаются) gzip_comp_level 5; # Разрешаем выдавать в ответе строку заголовка "Vary: Accept-Encoding" (Google Page Speed будет доволен) gzip_vary on; # Запрещаем проверку наличие готового сжатого файла. (в правилах разрешаем только там где нужно, если везде проверять дополнительные действия будут в системе делаться чтобы проверить существование таких файлов) gzip_static off; # Типы файлов которые мы будем сжимать gzip_types text/css text/plain application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js; # Указываем минимальную длина ответа, при которой модуль будет сжимать, в байтах (сжимаем файлы больше киллобайта, меньше смысла не имеет слабо ощутимо сжатие будет) gzip_min_length 1024; # Запрещаем сжатие ответа методом gzip для IE4-6 (можно записать регулярным выражением, но по словам автора nginx так быстрее будет работать) gzip_disable "msie6"; # Разрешить сжатие для всех проксированных запросов gzip_proxied any;
Можно еще увеличить производительность предварительно сжимая файлы которые у нас довольно большие по объему и часто используются, я решил сжимать файлы js и css, для этого не забудьте сначала на стройках лайвстрит включить слияние файлов в один.
Файлы можно сжимать вручную командами
for i in `find ./* -type f -name '*.js'`; do echo $i; gzip -c -9 $i > $i.gz; done; for i in `find ./* -type f -name '*.css'`; do echo $i; gzip -c -9 $i > $i.gz; done;
Соответственно тут сжимается с максимальной степенью сжатия (9), сжимать вручную это утомительно, пусть у нас эти файлы очень редко будут меняться, поэтому можно сделать так:
Открываем файл /engine/modules/viewer/Viewer.class.php ищем функцию Compress и в ее конец после @chmod($sCacheName, 0766); добавляем
file_put_contents($sCacheName . '.gz', gzcompress($sContent, 9)); @chmod($sCacheName, 0766);
(Кто подскажет более элегантное решение, буду только рад.)
у нас рядом с .js и .css файлами буду создаваться .js.gz и .css.gz т.е. уже сжатые их версии.
Для того чтобы сервер брал версии уже сжатых файлов нужно включить gzip_static. Включим его в конкретной директории открываем ту часть конфига где прописаны виртуальные хосты nginx и после описания «location /» добавляем включение проверки наличия сжатых файлов по адресу где лежит кэш .css и .js вашего шаблона.
server { ... location / { ... } location /templates/cache/new-jquery/ { gzip_static on; } ... }
Еще для ускорения можно (в указанной ниже секции) отключить лог для статики и включить время когда ресурс будет считаться устаревшим 30 дней.
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ { ... access_log off; expires 30d; }
С выключенным логом меньше будет нагрузки на жетский диск, а с expires данные дольше у людей будут хранится в кэше браузера, соответственно меньше их запрашивать с сервера будет, можно вообще поставить expires max, но это на любителя.
Надеюсь кому-нибудь это поможет сделать его сайт быстрее, а посетителей счастливее =)
Если вы что то еще знаете что добавить напишите, сделаем хороший мануал по настройке nginx.
Рекомендуем доступные Новостройки в Подмосковье. Широкий диапазон вариантов по доступным ценам.
78 комментариев
и да, если поставили nginx, то помните что все .htaccess перестанут работать, а livestreet очень любит срать логами и прочими кэшами в папки выше webroot, поэтому убедитесь что прямой доступ к этим папкам закрыт.
php-fpm думаю позже попробовать, без апача, к сожалению ISPManager не работает, а мне на данный момент с ним комфортнее.
Про «срач» livestreet можно по подробнее, куда конкретно он «срет»?)
У себя, я определил location, типо такого cfg|log|tmp|bak… и запретил к нему доступ.
и логи читаться не будут, а tmp не пишет потому что memcache.
пс: а так в моей связке апач все закрывает =)
Конечно, в панели намного удобнее создать ftp пользователя, прописать ns (если тех не дает хостер), и еще пару мелочей.
Но этим стоит пожертвовать, ради полного отказа от апача, жирный он.
И еще кое-что по настройкам. Картинкам и подобной статике можно поставить expires max;
Апач это да, думаю в дальнейшем от него откажусь или оставлю на минимуме чтобы только панель работала (меня жаба душит потому что я ее купил))
у меня написано в статье по мне 30 дней оптимально, у каждого свой путь, хотя с радостью изменю мнение если max лучше в чем то существенно.
Siege
при -d1 -c20 -r10 Response time: 2.16 secs
при -d1 -c5 -r10 Response time: 0.71 secs
при -d3 -c5 -r10 Response time: 0.21 secs
Вообще при тестах у меня больше всего нагружается процессор причем апачем, все таки подозреваю что хостер оверселит, т.к. даже когда 5 конкурирующих пользователя проц до 100% забивается.
У тебя сейчас какие характеристики VPS можешь прогнать тест при этом top посмотреть сколько процессора кушает? у меня такое ощущение что проц у меня урезан по полной… да и память тоже, потому как сделал tmps раздел и туда помещал все скомпиленные tpl и css с js прироста никакого вообще.
А ISPManager вообще зачем? Привычка видеть визуальный интерфейс? Тогда уж Plesk лучше. :)
Твой VPS вообще по какой технологии построен? Не OpenVZ, надеюсь, т.к. это по сути продвинутый шаред. XEN — наше фсё! ;)
пс: А чем плеск лучше?
А вообще, ISPmanager удобен при правильном к нему подходе и отключением всего и вся лишнего. Сам его активно использую для управления WEB и DNS серверами.
На более-менее чистом LS у меня держится от 100 посетителей онлайн, 4К в день. При том что на сервере еще пара тройка сайтов на DLE висит с посещаемостью 30К. Но в последнее время стала отваливаться база, пока не разобрался, на что грешить.
Веб-сервер какой, eAccelerator или аналог стоит?
Просто он не один на том сервере. Может DLE все сжирает
MemTotal: 16471188 kB
после подкручивания кешей по наводке mysqltuner'а, оказалось что этих кешей в общей сумме больше инсталлированной оперативки в 2 раза %) но даже с такой недостачей вроде не валится.
изредка, правда, не проглатывает запрос и отдает ошибку «Error while sending QUERY packet». покрутил таймауты — стало чуть реже, но все равно бывает
Поставил innodb_flush_log_at_trx_commit=0
Стало намного быстрее.
Цитата с Хабра «Значение «0» повысит производительность, но Вы рискуете потерять данные даже при аварийной остановке mySQL-сервера, в то время как при установке значение innodb_flush_log_at_trx_commit в «2» Вы потеряете данные только при аварии всей операционной системы.»
Со значением 1 у меня инсерт в пустую таблицу проходил около 0,4 сек.
Если учесть, что ЛС все время апдейтит таблицу topic_read, то это оказывалось существенно
ie6 вполне понимает сжатие, можно было пойти навстречу некрофилам
120 активных — ~5 секунд на загрузку
70 мимолетных — ~ 3-4 секунды
думаю до 250 активных и ~100 мимолетных, такая «нишевая» vps будет держать, опять же если это все в прогресси и не начнут оверселить, а так, всего 350 рублей в месяц :)
посмотрите пожалуйса на график, что надо оптимизировать?
loadimpact.com/load-test/djradioternopil.com-044ec0c656e450f3e49c5c543aecead2
CentOS 5.5, nginx + eAccelerator + ZendOptimizer + memcache
Сколько стоит заказать оптимизацию и настройку сервачка?
Ресурсы: проц 2000Mhz, озу 512 Mb)
Спасибо за понимание!
У меня vds с debian 6: nginx + apache2 + mod_php + APC + memcache
и в этих тестах у меня время доходит до 1м…
CPU Core: 1 x 3,46 GHz
RAM DDR3- 1333MHz: 2048 MB
SAS диски, RAID-10
Вполне неплохой сервак, вроде как.
Что касается mod_php, то не уверен, что есть сильно большая разница, например с fastcgi (по крайне мере по тем же тестам, fastcgi еще хуже). А php-fpm, насколько я понимаю, с Apache2 не очень хорошо дружит — лучше в связке nginx+php-fpm, но от апача я отказаться пока не могу.
Т.е. fastcgi работает совместно с php-fpm?