Оптимізація роботи сервера c php

Суть проблеми полягала в тому, що на сервері запущена онлайн гра, написана на php.
Так ніби й сервер потужний і написана не кострубатими руками, але сервер ледве дихає, ще трохи і зовсім ляже. Працювати неможливо, навіть консоль гальмує.

Подивився навантаження, вона зашкалює load average: 10.54, 10.28, 9.96

Я подумав, як можна це виправити. Для оптимізації роботи даного сайту, варто зрозуміти як працює php.

Справа в тому, що php це не просто скрипт з інструкціями для певної програми. Суть його полягає в тому, що кожен скрипт проходить кілька стадій, перш ніж поверне результат:

  1. Скрипт перекладається в байт-код
  2. виконується
  3. Виводиться результат сервером

Друге і третє зрозуміло, а ось перше знайоме програмістам на більш складних мовах, ніж php. Байт-код це вже набір інструкцій, кожна еквівалентна одній або декільком інструкціям асемблера. Такий код виконується у десятки разів швидше ніж скрипт, що виконується програмою. Одна тільки проблема, для перекладу скрипта в байт-код витрачається дуже багато ресурсів, для одного скрипта, звичайно це дурниця, але коли йдуть десятки і сотні звернень до сервера, ось тоді вже ресурси сервера починають використовуватися в неміряних кількостях.

Вихід є. Щоб не витрачати постійно ресурси на переклад скриптів в байт-код, можна зберігати часто використовувані скрипти вже в такому стані, що помітно знизить споживання ресурсів сервера.

Для цього існує безліч програм, я вирішив використовувати одну з таких - це eAccelerator.

Це зручний, легко настроюється модуль для php.

установка eAccelerator

І так приступимо до встановлення. Встановити з'єднання із сервером по SSH ну або якщо є прямий доступ, зайдіть в консоль.

Я створюємо папку / usr / local / eAccelerator. в якій будемо працювати і переходимо в неї

Переходимо в директорію eaccelerator-0.9.5.3:

Опція -with-eaccelerator-shared-memory необхідна для можливості використання API eAccelerator. Повний список опцій.

Власне тепер модуль готовий і встановлений в папці / usr / lib / php / modules /. куди встановлюються всі модулі php

Тепер прийшов час підключити модуль і налаштувати його, ніж зараз і займемося.

Файли для підключення модулів php знаходяться в папці php.d. При завантаженні Apache він зчитує всі файли із розширенням ini з цієї папки.

Опис основних атрибутів конфігурації eAccelerator

Розмір кешу спільно використовуваної пам'яті, встановлюється в мегабайтах.

Директорія для дискового кешу. eAccelerator зберігає у вказаній директорії бінарне представлення коду, сесії та інші дані.

За допомогою цієї опції можна відключати і включати eAccelerator. Значення 1 - включено, 0 - вимкнено.

Вказує в секундах час, після закінчення якого давно не використовується код повинен бути вилучений з спільно використовуваної пам'яті при перевищенні обсягу виділеної пам'яті.

За замовчуванням ця опція відключена, рекомендую встановлювати значення від 60 до 300 при великій кількості файлів і від 900 до 1800 при малій кількості файлів.

Коли eAccelerator не має достатньо вільного пам'яті, він намагається видалити старі дані, якщо попередня спроба була зроблена більш "shm_prune_period" секунд тому. За замовчуванням значення "0", при якому eAccelerator не намагатиметься видалити старий дані з пам'яті.

Параметри вказують доступні способи збереження кешу eAccelerator.
Можливі значення:

  • shm_and_disk - кеш даних в загальній пам'яті і на диску (за замовчуванням);
  • shm - кеш даних в загальній пам'яті або на диску, якщо загальна пам'ять або розмір даних більше, ніж "eaccelerator.shm_max";
  • shm_only - кеш даних в загальній пам'яті;
  • disk_only - кеш даних на диску;
  • none НЕ кешувати дані.

Тепер створимо папку для кешу, яку ми вказано в директиві eaccelerator.cache_dir - / tmp / eaccelerator, і дамо їй права на запис

Власне настройка закінчена, тепер перезапустити Apache:

висновок

Власне, що ж це дало. Я насправді навіть не зовсім очікував подібного результату, але навантаження на сервер впала в десятки разів.

load average: 0.91, 0.88, 0.72

Схожі статті