Который уже год мучаюсь с дико тормозящим Drupal'ом на локалхосте. Доходило вплоть до смешного - на "обвешенных" модулями сайтах страницы открывались порой несколько секунд, где "несколько" - от 10 и выше. Сильно выше. Что превращало работу в сплошную боль. Все собирался погуглить по теме не сегодня-завтра. Из года в год. И вот наконец-то погулил, не прошло и года. Ну, прошел, конечно. Да и не один. Но не суть.
Проблема, оказывается, весьма распространенная, не один я мучаюсь.
Помогло следующее.
И раз:
Если Апач при перезагрузке ругается как-то так (у меня ругался):
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
то открываем Апачевские конфиги:
sudo nano /etc/apache2/apache2.conf
и прописываем ServerName:
ServerName localhost
И два:
Открываем php.ini и увеличиваем размер realpath_cache_size.
realpath_cache_size
Determines the size of the realpath cache to be used by PHP. This value should be increased on systems where PHP opens many files, to reflect the quantity of the file operations performed.
...
sudo nano /etc/php5/apache2/php.ini
realpath_cache_size = 2M
Можно и больше. Я себе вообще 32M поставил.
И три:
Правим конфиги MySQL, my.cnf:
sudo nano /etc/mysql/my.cnf
Надо поменять значение следующего параметра: innodb_flush_log_at_trx_commit.
innodb_flush_log_at_trx_commit
Controls the balance between strict ACID compliance for commit operations, and higher performance that is possible when commit-related I/O operations are rearranged and done in batches. You can achieve better performance by changing the default value, but then you can lose up to a second of transactions in a crash.
blah-blah-blah
Суть - насколько часто логгируются транзакции для innodb. Дефолтное значение - единичка, логи в файл пишутся после каждой транзакции, если база упала или еще что сильно страшное произошло, потерям одну транзакцию. Если поставить значение в нолик, то логи будут писаться плюс-минус раз в секунду, откуда при краше БД потерям все транзакции за крайнюю секунду же. На продакшене еще имеет смысл, особенно если всякие биллинги крутятся, а для локалки какая суть разница. Ставим, значит, в нолик:
innodb_flush_log_at_trx_commit = 0
Ну и не забываем ребутнуть все подряд:
sudo service apache2 restart
sudo service mysql restart
Вышеперечисленное помогло ускорить работу Друпала на локалхосте на порядок, если не больше. Ничем не мерил, чисто визуально, "ой, насколько же странички стали быстрее открываться!".
Понятное дело, что это не совсем Drupal related проблема, а скорее банальная оптимизация сервера, но без контекста оптимизировать смысла особого тоже нет. Попутно вот перегуглил с несколько десятков статеек на тему tuning of innodb/innodb performance optimization - дополнительного прироста скорости получить не удалось. А вот советы выше - помогли и сильно, благо я их выцепил как раз из обсуждений на том же drupal.org.
Комментарии
на тостере писали, что оптимальным для друпал является nginx
Пума там отписался, что
Я ему склонен доверять, изредка почитываю его бложик, специалист хороший.
+ основной прирост в скорости Друпала дала оптимизация MySQL, можно тогда до кучи и на PostgreSQL перекатиться.
Но ничего советовать не буду - стыдно признаться, но ни PostgreSQL, ни nginx ни разу не использовал.