Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
||||||||||||||||||||||||||
www.lissyara.su
—> статьи
—> FreeBSD
|
|
В конце eAccelerator выдал свои пожелания и предложения:
********************************************************* You have installed the eaccelerator package. Edit /usr/local/etc/php.ini and add: zend_extension="/usr/local/lib/php/20060613/eaccelerator.so" Then create the cache directory: mkdir /tmp/eaccelerator chown www /tmp/eaccelerator chmod 0700 /tmp/eaccelerator ********************************************************* |
Создадим директорию tmp акселератору.
|
|
Прописываем запуск модуля в основной php.ini, но если у вас FastCGI, то у каждого хоста\юзверя будет свой файл и необходимо добавлять эту строчку в нужный php.ini.
|
Если вы хотите всем и сразу внедрить eAccelerator, то правильней будет добавлять здесь.
|
Но ввиду того что у меня есть 2-3 проекта которым акселератор был не нужен да и память жаль и я не добавил в extensions.ini.
README eAccelerator можно прочитать здесь.
|
Меня, например не устраивало расположение eaccelerator.cache_dir и я его поменял и тп.
|
И так разберемся с переменными:
eaccelerator.shm_size - Объем общей памяти (в мегабайтах), который будет использовать, eAccelerator. "0" назначается ОС по умолчанию. Значение по умолчанию "0".
eaccelerator.cache_dir - Каталог, который используется для дискового кэша. Здесь eAccelerator хранит скомпилированный код, данные сессии, содержание и записей пользователей. Те же данные могут храниться в общей памяти (для более быстрого доступа). Значение по умолчанию "/tmp/eaccelerator".
eaccelerator.enable - Включение или выключение eAccelerator. Включение "1" и чтобы отключить "0". Значение по умолчанию "1".
eaccelerator.optimizer - Включение или выключение внутреннего оптимизатора, которых может ускорить выполнение кода. Необходимо включить "1" и для того чтобы отключить "0". Значение по умолчанию "1".
eaccelerator.debug - Включение или выключение журнала отладки. Должно быть "1" для включения или "0" чтобы отключить. По умолчанию значение "0"
eaccelerator.check_mtime - Включение или выключение проверки изменения файлов PHP. Должно быть "1" для включения или "0" чтобы отключить. Вы должны выставить значение на "1", если потребуется проверить перекомпиляцию PHP файлов после изменения. Значение по умолчанию "1".
eaccelerator.filter - Определите, какие файлы PHP должна быть кэшированы. Вы можете указать типы шаблонов (например, "*.php *.phtml"), которое указывают направлять это в кэш или нет. Если шаблон начинается со символа "!" то это означает игнорировать файлы которые сопоставляются по следующему шаблону. Значение по умолчанию "", что означает, все PHP скрипты будут кэшироваться.
eaccelerator.shm_max - Отключает, размещения больших значений в общую память "eaccelerator_put ()" функции. Он указывает на большой допустимый размер в байтах (10240, 10K, 1М). "0" отключает лимит. Значение по умолчанию "0".
eaccelerator.shm_ttl - Когда eAccelerator не может получить в общей памяти место для нового сценария она удаляет все скрипты, которые не обращались к ней последние "shm_ttl" секунд из общей памяти. Значение по умолчанию "0", что означает - не удалять никакие файлы из общей памяти.
eaccelerator.shm_prune_period - Когда eAccelerator не может получить общей памяти для нового скрипта он должен удалить старый скрипт, если предыдущие попытки были сделаны более чем "shm_prune_period" секунд назад. Значение по умолчанию "0", что означает - не не удалять файлы из общей памяти.
eaccelerator.shm_only - Включение или выключение кэширование скомпилированных скриптов на диске. Это никак не влияет на данные сессии или содержание кэша. Значение по умолчанию "0", что означает - использовать диск и общую память для кэширования.
eaccelerator.compress - Включение или выключение сжатия кэшированного контента. Значение по умолчанию "1", что включает сжатие.
eaccelerator.compress_level - Уровень сжатия, использованный для содержимого кэша. Значение по умолчанию "9", что является максимальным значением.
eaccelerator.name_space - Эта строка для всех ключей. Она позволяет двум приложениям, которые используют одни и те же ключевые имена запускаться на том же хосте, установив это в htaccess либо в основном конфигурационном файле веб-сервера.
eaccelerator.keys
eaccelerator.sessions
eaccelerator.content
Определите, какие ключи, данные сеанса и содержимого будут кэшироваться. Возможны
следущие значения:
"shm_and_disk" - кэш данных в общей памяти и на диске (значение по умолчанию)
"shm" - данные кэша в общей памяти или на диске в общей памяти и при большом
заполнением данными применяется "eaccelerator.shm_max"
"shm_only" - данные в кэше в общей памяти
"disk_only" - данные в кэше в диске
"none" - не кэшировать данные
eaccelerator.allowed_admin_path - Путь для скриптов, которым разрешено получать информацию и управление администратора.
После включения eAcceleratorа вы уже можете почувствовать разницу =)
Memcached
Часто система показывает падение производительности MYSQL, например, когда данные должны быть перемещены на более медленное устройство, например HDD и\или получены с него. Можно обойти эту ситуацию для данных, которых сохранять не нужно (например, данные о сеансе)? Можно и использовать Memcached
|
Не работает с CGI версией php5 и ему нужен CLI, а это убивает желание жить =)
This port requires the CLI version of PHP, but you have already
installed a PHP port without CLI.
Из-за этого мне не получится ее поюзать =) Если вкратце, то memcached сохраняет данные в RAM и обслуживает данные с максимальной возможной скоростью недоступной HDD отсюда следует прирост производительности.
Оптимизация Apache
Теперь Apache...
RAM - ну что можно сказать в первых отключите в Apache те модули, которые вами не используются.
MaxClients - RAM не резиновый и надо экономить для этого будем корректировать MaxClients. Воспользуемся утилитой top чтобы понять сколько в среднем используется памяти для каждого запроса у меня составило примерно 15 Mb на процесс вычислим значение, к примеру, у меня 1 Gb Ram.
1024 Ram / 15 Ram на процесс = 70 (68,266) MaxClients
Вот это значение 70 мы и выставляем в MaxClients.
MaxRequestsPerChild - если RAM на сервере мало, а CPU быстрый то можно сделать так. При использования памяти процессами веб сервер имеет тенденцию увеличится до уровня самой требовательной к памяти страницы, которую обслуживает этот дочерний процесс, память можно вернуть установим низкое значение MaxRequestsPerChild к примеру 300-400 (в зависимости от ситуации) Работа Apache несколько замедлится тк ему придется генерировать новые дочерние процессы, однако последние будут использовать меньше оперативной памяти. И в итоге мы сможем обслужить больше запросов при меньшем объеме памяти. Значение 0 - означает, что дочерние процессы никогда не завершаются.
mod_expires -Этот модуль Apache позволяет посылать HTTP-заголовки Expires, кэшируя все статические файлы в пользовательском браузере, например в течение 2х недель либо до появления новых версий файлов. Касаемо файлов изображений, CSS, JavaScript и тп. В выводе меньший трафик и освобождение полосы пропускания.
|
И в .htaccess вашего CMS включите следующее.
|
.htaccess - так же можно перенести директивы из .htaccess в httpd.conf. Поиск, чтение и разбор файлов .htaccess происходит при каждом запросе. С другой стороны httpd.conf читается один раз при запуске Apache. Вам будет необходимо перенести содержимое .htaccess в httpd.conf и запретить поиск файлов .htaccess в пределах корневого каталога сервера, установив AllowOverride в None
|
Это запретит Apache при каждом запросе проходить по дереву каталога в поисках .htaccess для его выполнения. В результате меньше работы и быстрее выполняется запрос.
FastCGI - Очень рекомендую использовать FastCGI в виду конечной скорости обработки. Не буду изобретать велосипед см Apache2 + php5 + mod_fastcgi
Процитирую wiki:
Интерфейс FastCGI — клиент-серверный протокол взаимодействия вебсервера и приложения, дальнейшее развитие технологии CGI. По сравнению с CGI является более производительным и безопасным.
FastCGI ликвидирует множество ограничений CGI-программ. Проблема CGI-программ в том, что они должны быть перезапущены веб-сервером при каждом запросе, что приводит к понижению производительности.
Nginx - Так же на фронт можно установить и Nginx - про частичную установку его можно прочитать тут Веб сервер на много коннектов и высокую нагрузку (nginx+php-fpm+mysql)
Оптимизация MYSQL
Дошли и до муси. В MYSQL есть возможность кэширования часто встречающихся запросов в оперативной памяти, и при поступлении конкретного запроса в MYSQL она возвратит его непосредственно из кеша. Однако в MYSQL по умолчанию эта функция отключена. И нам необходимо править конфигурационный файл MYSQL my.cnf Мы для примера добавим кэш размером в 64МБ. И на будущее с этим кэшом необходимо экспериментировать, чтобы добиться максимальной эффективности. Слишком маленький кэш приведет к тому, что кэшируемые запросы очень часто будут недействительными, а чересчур большой повлечет за собой относительно длительный поиск в кэше. Память будет неэффективно использоваться которая, могла бы пригодится другим службам.
|
Создаем лог меделенных запросов.
|
Перезапустим mysql-server
|
Проверим настройку
|
Как видим мы включили кэш (query_cache_type ON) и установили размер его равным 64МБ (query_cache_size 67108864)
Изменение типа таблиц с MyISAM на InnoDB
MYSQL использует два варианта типа таблиц MyISAM и InnoDB. По умолчанию MYSQL использует MyISAM.
MyISAM использует блокировку на уровне таблиц, а InnoDB на уровне строк. Блокировка очень важна для сохранении целостности базы данных она препятствует одновременному обновлению одних и тех же данных двумя разными процессами БД. Посмотрим, является ли причина плохой производительности блокировка таблиц. Для этого посмотрим кол-во конфликтных блокировок в MySQL это Table_locks_immediate и Table_locks_waited
|
Table_locks_immediate - количество случаев, когда блокировка таблицы была получена немедленно.
Table_locks_waited - когда получение блокировка таблиц сопровождалось ожиданием. Если это значение велико, то у вас проблемы =)
Если у вас CMS, например Drupal то можно некоторые таблицы преобоазовать в InnoDB, например cache, watchdog, session, acceslog делается это так.
|
(Для настройки производительности MYSQL можно загрузить сценарий MySQL Performance Tuning Primer Script) который позволяет корректировать переменные сервера MySQL.
Настройка TMP (TMPFS)
TMPFS - использование RAM в качестве tmp, что само собой разумеется, быстрей и эффективней чем, он бы располагался на HDD. TMPFS появился только в [url=http://www.freebsd.org/releases/7.0R/relnotes.htmlFreeBSD 7.0-RELEASE [/url], так что меня не спрашивать, почему у меня на 6.х она не работает =) Пробежимся по настройке.
Для включения в ядро добавьте:
|
Если не хотите встраивать в ядро можете добавить модуль в loader.conf:
|
Переменные
|
Вручную можно примонтировать так:
|
Незабудем в fstab закомментить старый слайс tmp и добавить новый.
|
Hint - Для работы MSQL необходимо выставить правильные права на директорию /tmp
и примонтировать tmpfs или ребутнутся.
|
Перезагрузитесь и tmpfs вас порадует. =)
Заключение
В свете вышесказанного и при применении даже некоторой части рекомендованного здесь вы увидите как ваш веб сервер "оживет". Ну, если этого не произошло или вы не добились значительных результатов, то видимо вам пришло время закупать более мощное железо. На сим откланиваюсь нижайшее вам кисточкой вечно ваш Raven2000 =)
Ссылки
eAccelerator
Zend Performance Suite
Alternative PHP Cache
XCache
TMPFS
Improving Drupal's page loading performance
CMS Drupal 6 Pro Drupal Development
размещено: 2009-04-03,
последнее обновление: 2011-03-19,
автор: Raven2000
junqed, 2009-04-04 в 18:06:52
Проект Eaccelerator что то как то загнулся, пхп обновился, а акселератор - нет, в итоге апач после обновления падает в корку
Sadok, 2009-04-04 в 18:46:16
2 junqed Ну, АРС последний у меня тоже не собрался на FreeBSD 7.2-PRERELEASE :)
lissyara, 2009-04-04 в 20:35:02
В документации чётко написано, что при обновлении php надо пересобирать акселератор.
Тока её никто не читает, зато все умеют делать далекоидущие выводы о том кто почему загнулся =))
Sadok, 2009-04-04 в 20:40:59
Не. Сервак с нуля ставился. Порты обновил, конечно. Ставил мускул, потом апач, потом пэхопэ. А АСР не собрался новый (впрочем, он бета). 3.0.19 - без вопросов. Фря amd64 - может и поэтому...
junqed, 2009-04-06 в 7:50:50
Читал я и документацию. Имею в виду сам проект, последний релиз был Release-0.9.5.3 - 2008/05/18, и с послед. версиями пхп он как-то не дружит.
Raven2000, 2009-04-06 в 9:07:16
to junqed
А чего ему дружить с версиями пыхи, он работает и все и с последними и предпоследними. А новые версии акселя нужны для доработки или при исправлении ошибкок, а так чего обновлять если нормально пашет.
terr0rist, 2009-04-08 в 12:51:36
Cтатья неплохая, но уж очень много ошибок, опечаток или не знаю чего. Автору совет - работать над грамотностью.
Кстати, tmpfs может быть успешно заменён tmpmfs, т.е. просто ФС в RAM - см. rc.conf.
Raven2000, 2009-04-08 в 13:19:04
to terr0rist
если заметили опечатки или есть просьба добавить что-то то постить тут Ссылка на обсуждение и я откорректирую статью.
mahoro, 2009-04-10 в 1:45:42
В MySQL нужно обязтельно увеличить значение переменной key_buffer_size. Результат будет куда заметней, чем от query_cache.
playnet, 2009-04-14 в 16:24:25
Вот пишут про оптимизации... А почему никто не пишет, как смотреть загрузку того же апача или мускуля?
Сколько они реально едят памяти, буферов, кэша..
Загрузку того же query_cache хорошо бы посмотреть, key_buffer итд.
И если у апача можно /server-status настроить, то как мускуь смотреть?
sens, 2009-04-23 в 21:39:47
к чему критика
автор поделился своими наработками
естественно, никто не знает всего ;)
лучше б контсруктивно дополняли
titan, 2009-05-28 в 12:00:22
Спасибо RAVEN2000. Отличная статья.
HOSTER, 2009-09-12 в 0:32:49
АРС вместе с ZendOptimizer вместе НЕ работают и не работали.
Апач падает, уже сколько версий проверил. :(
sens, 2009-09-12 в 9:26:01
а на какой ОС ? случайно не на 64-х битной?
adre, 2009-10-29 в 12:45:28
Помоему лучше ставить в мускул сразу оптимизаю запросов при вставке, вставляться конечно подольше, но при большем кол-ве обращений устойчивее почему-то работает, + производительность можно нахаляву смотреть в phpmyadmin (там же вкыл выкл снятия статистики).... т.к. всеравно запросов типа select очень много, под выполнение сценариев (как правило хватает 16mb (имеется ввиду для скорости) для пхп)....
незнаю зачем я это написал =/
paix, 2009-12-05 в 9:33:23
это что у тебя мыскиль данные хранит на tmpfs ?
этоже диверсия!
risk94, 2011-01-14 в 10:32:37
так и нет поддержки php 5.3.* у eaccelerator ....
kav, 2011-03-19 в 17:43:24
вообще то работает отлично.
а по поводу статьи, в пункте "Оптимизация APACHE" надо было коротко написать - "не используем апач вообще".
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Комментарии пользователей [18 шт.]