Omijanie problemów z wydajnością serwerów

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.

Odpowiedzi

no tak...

Ja polecam natomiast dodatkowo moduł boost - skutecznie keszuje elementy strony i widać znaczne przyspieszenie drupala.

Fajno, tego szukałem.

Fajno, tego szukałem.

Super art. Dzięki wielkie.

Super art.
Dzięki wielkie.

Dodaj nową odpowiedź

Zawartość pola nie będzie udostępniana publicznie.
CAPTCHA
Poniższe zadanie ma na celu stwierdzenie, czy jesteś człowiekiem, a tym samym przeciwdziałanie spamowi.
2 + 14 =
Rozwiąż proszę powyższe zadanie matematyczne i wprowadź wynik.