Po zainstalowaniu kilkudziesięciu modułów Drupal potrafi bardzo obciążać serwer. Na niektórych hostingach może to doprowadzić do wyświetlania wielu komunikatów o błędach. Są to najczęściej błędy dotyczące limitu pamięci PHP lub błędy wynikające ze zbyt dużej ilości zapytań SQL (np. MySQL server has gone away...).

Kilka razy spotkałem się z takimi błędami, głównie przy budowie serwisów społecznościowych na Drupalu. Kombinacja modułów Organic Groups, Node Relationships i Private Message dość mocno obciąża serwer przy wyświetlaniu stron. Sporo szukałem i znalazłem sposoby na rozwiązanie większości problemów z wydajnością bez konieczności zmian w konfiguracji samego serwera. Wystarczy kilka zmian w plikach Drupala i można zapomnieć o błędach dotyczących złej konfiguracji serwera.

Pierwsza rzecz to zwiększenie limitu pamięci dla PHP, można to w łatwy sposób zmienić w pliku settings.php znajdującym się w katalogu sites/default, wystarczy dopisać tam linię:

ini_set('memory_limit', '128M');

Ustawienie limitu na 128MB wystarczy dla większości serwisów opartych na Drupalu, w razie potrzeby można ten limit jeszcze zwiększyć, np do 256MB.

W celu usunięcia błędu MySQL server has gone away... modyfikujemy dwa pliki:
includes/database.mysql.inc i includes/database.mysqli.inc

W pliku includes/database.mysql.inc po linii 84 zawierającej:

mysql_query('SET NAMES "utf8"', $connection);

dopisujemy:

 mysql_query('SET SESSION wait_timeout = 60', $connection);

Czyli po zmianie otrzymujemy:

 // Force UTF-8.
  mysql_query('SET NAMES "utf8"', $connection);
  mysql_query('SET SESSION wait_timeout = 60', $connection);
  return $connection;

W pliku includes/database.mysqli.inc po linii 84 zawierającej:

 mysqli_query($connection, 'SET NAMES "utf8"');

dopisujemy:

  mysqli_query($connection, 'SET SESSION wait_timeout = 60');

Czyli po zmianie otrzymujemy:

  // Force UTF-8.
  mysqli_query($connection, 'SET NAMES "utf8"');
  mysqli_query($connection, 'SET SESSION wait_timeout = 60');
  return $connection;

Te modyfikacje rozwiązały moje problemy z wydajnością serwerów. Jeśli macie jakieś swoje sposoby na modyfikacje Drupala w celu usunięcia problemów z ograniczeniami serwera to napiszcie w komentarzach.

Warto też się przyjrzeć modułowi Drupal tweaks - jeszcze w wersji rozwojowej, ale dobrze się zapowiada.

Uwaga! Przed edycją wszystkich plików warto zrobić kopię zapasową plików oraz bazy danych.

Przydatne linki:
Speeding up your Drupal site
Lista modułów pozwalających przyspieszyć pracę Twojego Drupala
Opis modułu Devel
Lista modułów pozwalających przyspieszyć pracę Twojego Drupala
Can a Drupal web site handle a million page views a day?
Grupa High Performance
Drupal Performance Measurement & Benchmarking
Jak przyspieszyć Drupala w 5 minut?
How I Survived a 2300% Traffic Increase With Drupal
Drupal caching, speed and performance

Autor

Grzegorz Bartman z firmy OpenBIT zajmującej się wdrażaniem rozwiązań open source, m.in budową serwisów internetowych opartych o system CMS Drupal. Więcej o autorze znajdziecie na stronie openBIT.pl.