у нас есть Drupal 7 на виртуальной машине Ubuntu LTS (VMWare) с сервером MySQL 5.1 на том же физическом сервере, но на другой виртуальной машине.
Веб-сайт Drupal в настоящее время находится в разработке, поэтому трафика практически нет, однако, несмотря на молниеносную скорость ping и доступ к оболочке, сайт Drupal работает очень медленно (> 5 секунд для загрузки любой страницы). После исследований здесь и в других местах я понял, что проблема заключается в том, что доступ к SQL осуществляется через сетевой интерфейс, что, по-видимому, делает Drupal очень плохо.
Я проверил разрешение DNS, и его не должно быть ни со стороны Drupal (хост db задается ip, есть запись dns в файле / etc / hosts), ни со стороны MySQL (skip-name-resolve включено, клиент drupal предоставлен доступ по IP-адресу).
В журнале запросов Drupal devel говорится:
Выполнено 336 запросов за 5993,89 мс. Выделяются запросы, превышающие 5 мс. Время выполнения страницы составило 7015,35 мс. Используемая память: devel_boot () = 5,53 МБ, devel_shutdown () = 93,35 МБ, пиковое значение PHP = 94 МБ.
Странно то, что для загрузки одной страницы около 2/3 запросов выполняются быстро, а другие - чрезвычайно медленно:
1.765 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0)
default
575.825 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0)
default
13.585 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache_bootstrap WHERE cid IN (:cids_0)
default
466.9914 DrupalDatabaseCache::getMultipleP A E
SELECT cid, data, created, expire, serialized FROM cache WHERE cid IN (:cids_0)
default
1.841 drupal_lookup_pathP A E
SELECT source FROM url_alias WHERE alias = :alias AND language IN (:language, :language_none) ORDER BY language ASC, pid DESC
default
Ситуация исправляется для анонимного доступа включением кеша Drupal. Однако весь интерфейс администратора по-прежнему работает так же медленно.
Текущая политика компании заключается в том, чтобы иметь отдельный сервер БД. Могут ли быть другие варианты ускорения Drupal?
В конфигурации базы данных по умолчанию указано, что драйвер «mysql», может мне стоит изменить его на «mysqli» или «pdo_mysql»? Однако, если я изменю его на mysqli, database.inc сообщит, что соответствующего драйвера не существует - ничего, что можно было бы установить специально для drupal, поскольку mysqli и pdo включены в самом PHP.
Поскольку на этот вопрос до сих пор есть ответы, я отвечу на него сам, так как тогда я вроде как его решил.
По сути, как только я перенес Mysql на ту же виртуальную машину, что и Drupal, все стало молниеносно. Таким образом, проблема заключалась в том, что Drupal отправлял огромное количество sql-запросов для каждой загрузки страницы = плохая архитектура.
Я подозреваю, что для работы PHP недостаточно памяти. Проверить memory_limit
в файле PHP.INI. Измените его на -1 (неограниченная память), чтобы увидеть, улучшится ли производительность. Если этого не произойдет, то вам предстоит долгий путь. Вот ссылки на мои опубликованные статьи об улучшении производительности Drupal.
Вы можете сделать следующее:
mysqld
с участием /etc/my.cnf
: Попробуйте также изучить следующее:
У меня возникла такая же проблема, и я использовал Google Chrome PageSpeed и YSlow, чтобы выяснить свои проблемы.
В основном я делал следующие шаги:
Попробуйте установить PHP APCустановите размер APC shm равным 256 МБ (для этого есть много руководств). Тогда убедитесь KeepAlive включен для Apache, а также активируйте сжатие Apache (через Apache mod_deflate).
Я думаю, есть две области, в которых вы можете оптимизировать свой сайт:
Ты проверил Управление производительностью сайта на drupal.org?