PHP иногда зависает, непредсказуемо, apache2 не зависает.

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

PHP иногда зависает[1], непредсказуемо, apache2 может и будет по-прежнему загружать фоны с интервалом в минуту, даже для страниц, которые вызывают na.site.loadContent()[1] и которые никогда не завершают AJAX-вызов, обеспечивающий HTML (и другой код) для любого данного URL.

ОС KUbuntu 22.04 ведет себя некорректно.

Я надеюсь, что смогу найти здесь помощь.

Я даже не уверен, как диагностировать эту проблему сам.

root@parakeet:/etc/apache2/mods-enabled# ls
access_compat.load  alias.load       authn_core.load  authz_core.load  authz_user.load  autoindex.load  deflate.load  dir.load  filter.load   mime.conf  mpm_event.conf.bak  mpm_prefork.conf  negotiation.conf  php8.1.conf  reqtimeout.conf  rewrite.load   setenvif.load       ssl.conf  status.conf
alias.conf          auth_basic.load  authn_file.load  authz_host.load  autoindex.conf   deflate.conf    dir.conf      env.load  headers.load  mime.load  mpm_event.load.bak  mpm_prefork.load  negotiation.load  php8.1.load  reqtimeout.load  setenvif.conf  socache_shmcb.load  ssl.load  status.load

Я посмотрел в соответствующий файл /var/log/apache2/error.log, и там ничего не найдено.
Как будто строка ‘TimeOut 10’, которую я добавил в /etc/apache2/apache2.conf, игнорируется, и, кроме того, моя страница должна вести себя так, как она вела себя до неудачного обновления[1] до kubuntu 24.04; загружать всё меньше чем за секунду.

[1] после того, как ‘variety’ начала показывать ошибки где-то в марте, я обновил свою ОС до kubuntu 24.04, не осознавая, что ребята из couchdb еще не выпустили *.deb файл для 24.04.
Так как ребята из couchdb не спешат, мягко говоря, я откатился на 22.04, переустановил компоненты бэкенда, и теперь я столкнулся с этой проблемой зависания страницы. 🙁

*/1 * * * * service apache2 restart && service nginx restart

Добавлено в ‘crontab -e’ в командной строке, похоже, решает проблему для меня 🙂

Я также увеличил опцию одновременных подключений apache2 и nginx (целое число).

Ответ или решение

Когда вы сталкиваетесь с проблемой застревания PHP на системе KUbuntu 22.04 в то время как Apache2 продолжает работать без заморозки, это может быть результатом нескольких факторов. В этой статье мы рассмотрим возможные причины данной проблемы и предложим способы её диагностики и решения.

Проблема с зависанием PHP

Согласно вашему описанию, проблема заключается в том, что PHP-коды иногда застревают, не отправляя завершенные AJAX-запросы, хотя с сервером Apache2 за это время ничего не происходит. Это может указывать на несколько потенциальных проблем.

1. Настройки конфигурации Apache2 и PHP

Вы упомянули, что добавили строку TimeOut 10 в конфигурацию Apache2, но она, похоже, игнорируется. Убедитесь, что данное значение корректно разграничено, и установите другие параметры, такие как ProxyTimeout и KeepAliveTimeout, если вы используете прокси и поддержание соединения, соответственно. Кроме этого, рассмотрите возможность увеличить значения для MaxRequestWorkers (ранее известным как MaxClients) в конфигурационных файлах Apache, чтобы избежать отказы в обработке запросов при высоких нагрузках.

2. Проблемы с PHP и его модулями

Проблемы в PHP могут быть вызваны неправильной работой модулей, например, расширений для работы с базами данных или других зависимостей. Проверьте, какие модули загружены в вашем PHP, и убедитесь, что они совместимы с версией PHP 8.1, которую вы используете.

Для этого выполните команду:

php -m

Это покажет список загруженных модулей. Обратите внимание на категории, которые могут быть связаны с зависанием.

3. Ошибки на уровне кода

Неправильные запросы к базе данных или приложения могут также вызывать проблемы с зависанием. Проверьте ваши скрипты на предмет бесконечных циклов или неправильных запросов. Включите обширное ведение журнала ошибок PHP, чтобы вами могли быть обнаружены возможные причины зависания:

log_errors = On
error_log = /var/log/php_errors.log

И проверьте этот файл на наличие ошибок или предупреждений.

Подход к диагностированию

  1. Проверка логов: Осмотрите как /var/log/apache2/error.log, так и php_errors.log, чтобы попытаться найти корень проблемы.
  2. Мониторинг ресурсов: Используйте утилиты, такие как htop или top, чтобы следить за использованием CPU и памяти во время зависания. Это может помочь понять, исчерпываются ли ресурсы.
  3. AJAX запросы: Проверьте, действительно ли AJAX-запросы дойдут до сервера, используя инструменты разработчика в браузере для слежения за сетевой активностью.

Подходящие меры

Учитывая, что ваша проблема иногда разрешается перезапуском Apache и Nginx из crontab, это может быть временным решением. Однако важно рассмотреть более системные подходы к решению проблемы, такие как:

  • Пересмотр кода на наличие потенциальных мелких недоработок и возможностей оптимизации.
  • Проверка зависимостей и модуля CouchDB, чтобы убедиться, что все необходимые установлены корректно, особенно после отката версии ОС.
  • Рассмотрите возможность оптимизации SQL запросов, если вы работаете с БД.

Заключение

Решение проблемы застревания PHP требует многоуровневого подхода. Необходимо внимательнее посмотреть на конфигурации серверного ПО, производительность кода и возможные проблемы с совместимостью. Проведение тщательной диагностики и корректировка конфигурации позволит вам значительно улучшить общую производительность вашей среды. Если проблемы сохраняются, может быть полезно рассмотреть возможность обращения за помощью к специалистам по настройке веб-серверов.

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

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