- Вопрос или проблема
- Ответ или решение
- 1. Понимание использования PHP-сессий в WordPress
- 2. Определение источника использования PHP-сессий
- 2.1. Поиск ключей в файлах сессий
- 2.2. Логирование компании
- 3. Исследование плагинов и тем
- 3.1. Выявление конфликтов
- 3.2. Установка плагинов для отладки
- 4. Альтернативные решения
- 4.1. Перенос сессий в память
- 4.2. Мониторинг нагрузки на сервер
- 5. Обращение за помощью
- Заключение
Вопрос или проблема
Есть ли способ выяснить, что использует PHP сессии или создает PHP процессы?
Мой сайт на WordPress получает большое количество трафика (3.5 миллиона посещений в месяц). Мы недавно обнаружили, что у нас давно были установлены неправильные разрешения, из-за чего никто не мог получить доступ к PHP сессиям. К сожалению, после того как мы исправили разрешения, мы заметили, что активно создается множество PHP процессов, и сервер становится полностью неоткликаемым. Он даже не возвращается из проверки работоспособности. Это выделенный сервер Nginx в AWS, и на нем ничего другого не работает. Мы видим, что десятки PHP процессов запускаются и продолжают увеличиваться. Проблема не возникает, если мы снова “нарушаем” разрешения PHP сессий, поэтому мы определили, что что-то в WordPress (вероятно, плагин?) чрезмерно использует PHP сессии.
Мы не можем воспроизвести это в разработке, потому что это происходит только при высокой нагрузке основного сайта, когда сотни пользователей одновременно заходят на сайт. В силу требований WordPress, чтобы множество записей в базе данных совпадало с доменом, на котором он работает, наша среда разработки — это просто другой IP-адрес, к которому мы получаем доступ, изменив файл hosts. Он не доступен публично, чтобы мы могли использовать сервис для имитации нагрузки.
Но из-за большого количества пользователей не совсем целесообразно просто отключить все плагины, так как сайт полностью сломается без них. Мы не можем полагаться на отслеживание недавних изменений, потому что разрешения были нарушены в течение нескольких месяцев, поэтому у нас нет никакого представления о том, что откатывать.
Есть ли способ выяснить, что использует PHP сессии в WordPress? Или, альтернативно, что создает PHP процессы? Если бы мы могли это определить, я думаю, мы нашли бы первопричину.
Насколько я знаю, WP не использует PHP сессии, только нативное решение (хранение данных сессий авторизованных пользователей в БД). Возможно, какая-то другая дополнительная функциональность (плагин/аддон/тема) использует это?
Что вы можете сделать, так это проверить, что в файлах сессий. Поискать в вашем коде вхождения ключей, которые вы нашли в сессиях. Локализуйте проблему и решите ее.
Еще одним вариантом может быть переключение сессий на память (установить сервер memcached и перенаправить сессии на обслуживание через memcached)
3,5 миллиона пользователей в месяц — это в среднем 5-6 пользователей в секунду. Это не так уж много для nginx/php/mysql с установленным WP (только тяжелые SQL запросы могут быть вашей другой узкой местом, но это не похоже на текущий случай).
Добавьте инструкции для отладки в functions.php
вашей темы
add_action('init', 'debug_sessions');
function debug_sessions() {
if (isset($_SESSION)) {
error_log('Сессии используются!');
}
}
Включите режим отладки WordPress, добавив следующие строки в ваш файл wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
Проверьте файл wp-content/debug.log
на наличие записей, связанных с PHP сессиями.
Я думаю, вам, в идеале, потребуется доступ на уровне сервера, чтобы отслеживать такие вещи, так как это связано с HTTP(S) трафиком. Вы можете связаться с вашим хостингом, или если вы управляете собственным сервером, посмотрите на модуль мониторинга трафика для него.
Ответ или решение
Чтобы выяснить, что использует PHP-сессии в WordPress, и решить проблему с быстрым спавном процессов PHP на вашем сайте, следуйте приведенным ниже шагам:
1. Понимание использования PHP-сессий в WordPress
WordPress по умолчанию не использует PHP-сессии, поскольку хранит данные о пользователях, используя собственные методы, такие как куки и уникальные идентификаторы, хранящиеся в базе данных. Однако плагины или темы могут вызывать использование PHP-сессий для хранения временных данных, манипулирования состоянием или обеспечения функциональности, требующей состояния пользователя.
2. Определение источника использования PHP-сессий
2.1. Поиск ключей в файлах сессий
Ваш сервер может использовать файлы для хранения сессий. Для начала проверьте, где хранятся файлы сессий PHP. Обычно это директория, указанная в php.ini
, в параметре session.save_path
. Проверьте содержимое этих файлов на наличие ключей, которые могут дать подсказку о том, какая часть вашего кода их использует.
2.2. Логирование компании
Для диагностики добавьте отладочные функции в файл functions.php
вашей темы:
add_action('init', 'debug_sessions');
function debug_sessions() {
if (isset($_SESSION)) {
error_log('Сессии используются!');
}
}
Также не забудьте включить режим отладки WordPress в вашем wp-config.php
:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
Теперь вы можете проверить файл wp-content/debug.log
на наличие записей, связанных с PHP-сессиями.
3. Исследование плагинов и тем
3.1. Выявление конфликтов
Используйте поэтапное отключение плагинов. Хотя вы упомянули, что это может привести к поломке сайта, поочередное отключение плагинов поможет вам определить, какой из них вызывает избыточное использование сессий.
3.2. Установка плагинов для отладки
Существуют плагины, которые помогут вам отследить использование ресурсов и выявить плагины, вызывающие высокую нагрузку. Рассмотрите возможность установки плагинов, таких как Query Monitor, которые могут предоставить информацию о запросах, процессах и использовании памяти.
4. Альтернативные решения
4.1. Перенос сессий в память
Если проблема связана с большим количеством соединений с файловой системой, вы можете рассмотреть использование систем кеширования, таких как Memcached, для управления сессиями. Это снизит нагрузку на сервер и упростит доступ к сессионным данным.
4.2. Мониторинг нагрузки на сервер
Если у вас есть доступ на уровне сервера, используйте инструменты мониторинга, такие как htop или top, для оценки, какие процессы активны во время пиковых нагрузок. Это может помочь вам выявить аномальное поведение в момент, когда нагрузки на сервер превышают норму.
5. Обращение за помощью
Если несмотря на все ваши усилия, проблема не решается, возможно, стоит обратиться к вашему хостинг-провайдеру или команде технической поддержки. Они могут предоставить дополнительную информацию и инструменты для мониторинга в реальном времени.
Заключение
Разработка и тестирование на высоконагруженных сайтах требует тщательного мониторинга и анализа. Поиск источника использования PHP-сессий в WordPress требует системного подхода, который включает логирование, отладку и порой даже изменение архитектуры хранения данных. Эти шаги помогут вам в решении проблемы с быстроспасаемыми процессами и обеспечат более стабильную работу вашего сайта в условиях высокой нагрузки.