Узнайте, что использует PHP-сессии в WordPress.

Вопрос или проблема

Есть ли способ выяснить, что использует 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 требует системного подхода, который включает логирование, отладку и порой даже изменение архитектуры хранения данных. Эти шаги помогут вам в решении проблемы с быстроспасаемыми процессами и обеспечат более стабильную работу вашего сайта в условиях высокой нагрузки.

Оцените материал
Добавить комментарий

Капча загружается...