Вопрос или проблема
На моем сайте отображается белый экран смерти. Независимо от страницы, на которой вы находитесь, экран остается полностью белым. Административная панель WordPress не затронута и полностью доступна.
Мой сайт работает на LAMP, поэтому я использую сервер Ubuntu, PHP (версия: 8.3), Apache2, MySQL и WordPress.
Сайт еще работал накануне без каких-либо проблем, и я не вносил никаких серьезных изменений в сайт в течение нескольких дней (без новых плагинов, тем, нового кода или чего-либо еще). Единственное изменение касалось Cloudflare. Поскольку у меня есть второй тестовый сайт на отдельном тестовом веб-сервере и я не могу запускать оба через стандартный порт Https, я изменил тестовый сайт на порт 2053. Для этого я также создал рабочего в Cloudflare, который обеспечивает перенаправление трафика на правильный IP с портом (т.е.: 94.XXX.XXX.XXX:2053). Только после этого изменения я снова посетил свой сайт и заметил, что он имеет белый экран смерти. К сожалению, отмена всех изменений в Cloudflare не помогла.
Я также уже пробовал следующее:
- Я деактивировал Cloudflare
- Деактивировал все плагины
- Сменил тему (с New Twenty Four на Astra)
- Активировал логи отладки WordPress (к сожалению, на сайте не отображается сообщение об ошибке)
- Перезагрузка Ubuntu и обновление системы
- .htaccess удален и приняты стандартные настройки WordPress
- Мануальная проверка базы данных Mysql на наличие ошибок (ничего не найдено)
Журнал отладки WP:
[12-Oct-2024 08:30:24 UTC] PHPDeprecated: ltrim(): Передача null в параметр #1 ($string) типа string устарела в /var/www/html/wp-includes/formatting.php на строке 4482
[12-Oct-2024 08:33:06 UTC] Успешно загружены схемы сервисов из ответа сервера. (fetch_service_schemas_from_connect_server)
[12-Oct-2024 08:33:10 UTC] Ошибка в базе данных WordPress: Обнаружен взаимоблокировка при попытке получить блокировку; попробуйте перезапустить транзакцию для запроса
INSERT INTO wp_actionscheduler_actions ( `hook`, `status`, `scheduled_date_gmt`, `scheduled_date_local`, `schedule`, `group_id`, `priority`, `args` )
SELECT 'wp_mail_smtp_queue_process', 'pending', '2024-10-12 08:33:10', '2024-10-12 08:33:10', 'O:32:\"ActionScheduler_IntervalSchedule\":5:{s:22:\"\0*\0scheduled_timestamp\";i:1728721990;s:18:\"\0*\0first_timestamp\";i:1728721990;s:13:\"\0*\0recurrence\";i:60;s:49:\"\0ActionScheduler_IntervalSchedule\0start_timestamp\";i:1728721990;s:53:\"\0ActionScheduler_IntervalSchedule\0interval_in_seconds\";i:60;}', 5, 10, '[null]' FROM DUAL
WHERE (
SELECT action_id FROM wp_actionscheduler_actions
WHERE status IN ( 'pending', 'in-progress' )
AND hook = 'wp_mail_smtp_queue_process'
AND `group_id` = 5
LIMIT 1 ) IS NULL сделано путем require_once('wp-load.php'), require_once('wp-config.php'), require_once('wp-settings.php'), do_action('init'), WP_Hook->do_action, WP_Hook->apply_filters, WPMailSMTP\Core->get_tasks, WPMailSMTP\Tasks\Tasks->init,debug.log
Журналы ошибок Apache2:
[Sat Oct 12 09:00:07.065118 2024] [mpm_prefork:notice] [pid 18030] AH00163: Apache/2.4.58 (Ubuntu) OpenSSL/3.0.13 настроен -- продолжаем обычные операции
[Sat Oct 12 09:00:07.065154 2024] [core:notice] [pid 18030] AH00094: Командная строка: '/usr/sbin/apache2'
[Sat Oct 12 09:50:49.475939 2024] [mpm_prefork:error] [pid 18030] AH00161: сервер достиг настройки MaxRequestWorkers, рассмотрите возможность увеличения настройки MaxRequestWorkers
[Sat Oct 12 09:53:56.967559 2024] [mpm_prefork:notice] [pid 18030] AH00170: пойман SIGWINCH, отключение выполнено корректно
[Sat Oct 12 09:53:57.048545 2024] [mpm_prefork:notice] [pid 19229] AH00163: Apache/2.4.58 (Ubuntu) OpenSSL/3.0.13 настроен -- продолжаем обычные операции
[Sat Oct 12 09:53:57.048584 2024] [core:notice] [pid 19229] AH00094: Командная строка: '/usr/sbin/apache2'
[Sat Oct 12 09:55:08.352714 2024] [mpm_prefork:error] [pid 19229] AH00161: сервер достиг настройки MaxRequestWorkers, рассмотрите возможность увеличения настройки MaxRequestWorkers
[Sat Oct 12 10:06:48.686732 2024] [mpm_prefork:notice] [pid 19229] AH00170: пойман SIGWINCH, отключение выполнено корректно
[Sat Oct 12 10:07:14.356756 2024] [mpm_prefork:notice] [pid 1185] AH00163: Apache/2.4.58 (Ubuntu) OpenSSL/3.0.13 настроен -- продолжаем обычные операции
[Sat Oct 12 10:07:14.356872 2024] [core:notice] [pid 1185] AH00094: Командная строка: '/usr/sbin/apache2'
К сожалению, все безуспешно. Я не знаю, откуда возникает ошибка, и что еще я могу сделать.
Обновление:
Благодаря отличному ответу пользователя я деактивировал плагин wp mail и попытался получить доступ к сайту через localhost, что привело к тому же белому экрану. Таким образом, Cloudflare, вероятно, не является причиной. Вместо Astra я теперь активировал тему Twenty Twenty Three и у меня появились следующие сообщения об ошибках при использовании wp-cli или команды “wp core verify-checksums”:
Внимание: Файл не соответствует контрольной сумме: wp-blog-header.php Внимание: Файл не существует: wp-config-sample.php Ошибка: Установка WordPress не соответствует контрольным суммам.
Вот как выглядит мой wp-config.php, на данный момент он выглядит нормально для меня:
Спасибо за вашу помощь!
Ответ или решение
Белый экран смерти на сайте WordPress: Полное руководство по диагностике и устранению
Белый экран смерти (White Screen of Death или WSOD) — это распространённая проблема, с которой могут столкнуться владельцы сайтов на WordPress. Ваша ситуация, в которой сайт отображает только белый экран при доступе к страницам, но административная панель доступна, может быть вызвана рядом факторов. Давайте подробно разберём возможные причины и шаги для их устранения.
Возможные причины проблемы
-
Ошибки в конфигурации: Изменения в среде (например, настройки Cloudflare) могут привести к проблемам. Учтите, что даже если вы вернули настройки обратно, кэш может продолжать демонстрировать старую версию страницы.
-
Проблемы с плагинами или темами: Хотя вы уже отключили плагины и сменили тему, конфликты могут по-прежнему существовать. Некоторые плагины могут оставлять свои следы в базе данных или кэш, что может влиять на работу сайта.
-
Перегрузка сервера: Логи Apache указывают на то, что сервер достиг максимального количества рабочих процессов (
MaxRequestWorkers
). Это может привести к перегрузкам и, как следствие, сбоям. -
Проблемы с кодом: Ошибки в коде (например, устаревшие функции) могут вызывать сбои. Лог PHP показывает, что в некоторых случаях есть предупреждения об использовании устаревших функций.
-
Ошибки базы данных: Сообщение об ошибке
Deadlock found when trying to get lock
указывает, что произошло взаимное блокирование при обращении к базе данных, что также может повлиять на работу сайта. -
Повреждённые файлы ядра WordPress: Проверка с помощью
wp core verify-checksums
показала несоответствие контрольных сумм, что может означать повреждение файлов ядра.
Шаги по устранению проблемы
-
Очистка кэша: Убедитесь, что вы очистили кэш Cloudflare и любой кэш, сохранённый на сервере (например, кэш браузера, кэш плагинов кэширования).
-
Проверка файлов WordPress:
- Переустановите ядро WordPress, чтобы восстановить повреждённые файлы. Это можно сделать напрямую через Панель управления или используя WP-CLI.
- Убедитесь, что wp-config.php в правильном состоянии и без ошибок.
-
Проверка плагинов и тем:
- Временно переключитесь на стандартную тему (например, Twenty Twenty-Three) и отключите все плагины. После этого включайте плагины по одному, чтобы выявить возможные конфликты.
- Если вы уже отключили все плагины и темы, попробуйте заново установить критические плагины, особенно те, которые ранее работали нормально.
-
Мониторинг нагрузки на сервер:
- Измените настройки
MaxRequestWorkers
в конфигурации Apache, увеличив значение, чтобы предотвратить перегрузку сервера. - Проверьте использование ресурсов сервера (CPU, RAM) через команду
top
или другие утилиты мониторинга.
- Измените настройки
-
Использование режимов отладки:
- Убедитесь, что в вашем
wp-config.php
файл включен отладочный режим:define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false);
- Проверьте созданный файл
debug.log
в директории/wp-content/
для получения дополнительных деталей о проблемах.
- Убедитесь, что в вашем
-
Резервное копирование и восстановление: Если проблема сохраняется, рассмотрите возможность восстановления сайта из резервной копии, если такая доступна.
-
Обращение в техническую поддержку: Если вы исчерпали все варианты, может потребоваться помощь профессионала. Обратитесь в службу поддержки хостинга или к специалисту по WordPress.
Заключение
Проблема белого экрана смерти может быть вызвана множеством факторов. Следуя вышеперечисленным методам, вы сможете выявить и устранить источник проблемы. Регулярное резервное копирование и обновление плагинов и тем поможет избежать подобных ситуаций в будущем. Удачи в решении вашей проблемы!