Помилки програмістів mysql server has gone away на хостингу, хостинг

Один з клієнтів нашого чудового хостингу звернувся до нас з подібним помилкою з проханням "об'сніть", чому таке відбувається і чому "у нас лягає сервер?". Внаслідок обробки його запиту з'ясувалося, що у клієнта на одному з проектів виконувався скрипт, який протягом 3 хвилин збирав статистику або чекав отримання відповіді від зовнішнього (стороннього) хоста, а потім скрипт повинен був "покласти" ця відповідь в базу даних, т. е. зберегти цю відповідь в заданій таблиці.

При виконанні скрипта використовувався приблизно такий цикл, в якому робилася пауза у виконанні скрипта на 30 секунд:

Тобто скрипт намагався протестувати текст на унікальність за рахунок зовнішнього сервісу і робив 4 спроби через кожні 30 секунд. Однак коли скрипт вже отримував успішний відгук від зовнішнього хоста в результатами, і намагався зберегти ці результати в бази даних, вилазила підла помилка:

Було дуже багато емоцій з самого розробника, тому що по всім очікуванням такого не повинно було трапитися!

Однак рішення лежало під носом, і справа лише полягало в тому, щоб звернути увагу на значення однієї глобальної серверної змінної MySQL, а саме на значення змінної connect_timeout = 10 (в секундах), яка відповідає за таймаут конекту з MySQL-сервером. Тобто якщо протягом цих 10 секунд працює скрипт не намагається взаємодіяти з MySQL-сервером, це з'єднання рветься і його необхідно встановлювати заново!

Тепер ви розумієте, як треба змінити цю ділянку коду: потрібно зменшити час sleep (30) до значення, що не превосхожящее 10 секунд. І - вуаля! Тепер все працює, як і очікувалося!

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

Помилки програмістів mysql server has gone away на хостингу, хостинг

Схожі статті