Я запускаю сервер Apache 2.4 (Oracle OCI Ampere A1 с 24 ГБ ОЗУ и Oracle Linux 9) с обратным прокси на локальный сервер Kestrel (для обслуживания dotnet приложения). Все работает нормально. Однако каждые 4-5 часов Apache становится очень медленным, даже при обслуживании статического контента, и требуется перезагрузка, чтобы вернуть ему скорость.
Смена страниц не происходит, ОЗУ в 5 раз больше, чем нужно, простые рабочие потоки ниже 250, ЦП idle, очень умеренная нагрузка. Все работает так, как должно.
Единственное, что я вижу в журнале ошибок Apache, это:
[client 194.65.137.130:65472] AH03307: ap_proxy_transfer_between_connections: ошибка на источнике - ap_pass_brigade
[Mon Sep 16 17:45:10.681112 2024] [proxy:error] [pid 422078:tid 422122] [client 194.65.137.130:65472] AH10221: proxy: websocket: сбой клиентского сброса (-102)
[Mon Sep 16 17:45:16.730144 2024] [proxy:error] [pid 422078:tid 422106] (70014)Конец файла найден: [client 186.22.245.138:36178] AH03307: ap_proxy_transfer_between_connections: ошибка на источнике - ap_pass_brigade
[Mon Sep 16 17:45:16.730350 2024] [proxy:error] [pid 422078:tid 422106] [client 186.22.245.138:36178] AH10221: proxy: websocket: сбой клиентского сброса (-102)
И я чувствую, что это не связано с замедлением. Можете ли вы посоветовать, как я должен справиться с этой проблемой? Даже не знаю, как это диагностировать.
Ниже приведена конфигурация vhosts:
# Адрес электронной почты администратора, имя сервера (доменное имя) и любые псевдонимы
ServerName app.website.com
ServerAlias www.app.website.com
DocumentRoot /var/www/website/app
RequestHeader set X-Forwarded-Proto "https"
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule /(.*) ws://127.0.0.1:5000/$1 [P]
# Установите журналы
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
ErrorLog /var/www/website/logs/app-error.log
# SSL
SSLEngine on
SSLCertificateFile /var/www/website/app.website-2024.crt
SSLCertificateKeyFile /var/www/website/app.website-2024.key
SSLCertificateChainFile /var/www/website/app.website-2024.ca-bundle
Ответ
Привет!
Судя по вашему описанию, проблема с производительностью Apache, возникающая каждые 4-5 часов, может быть связана с различными факторами. Ниже приведены некоторые возможные причины и шаги по устранению неполадок, которые могут помочь решить вашу проблему.
1. Логи и ошибки
Ошибки, которые вы видите в логах, могут указывать на проблемы с соединениями. Попробуйте выполнить следующие действия:
- Убедитесь, что Kestrel работает корректно и связи между Apache и Kestrel восстановлены. Возможно, у Kestrel есть какие-то ограничения на количество соединений или таймауты, которые приводят к сбоям.
- Попробуйте проверить логи вашего Kestrel-сервера. Это может дать дополнительные подсказки о том, что происходит в момент замедления.
2. Настройки Apache
-
MaxConnections и MaxRequestsPerChild: Возможно, стоит настроить параметры, такие как
MaxConnections
иMaxRequestsPerChild
, чтобы предотвратить накапливание соединений с временем. Для тестирования вы можете установитьMaxRequestsPerChild
(илиMaxConnections
в версиях Apache 2.4) на более низкое значение, например, 1000. - Timeout, KeepAlive, и другие параметры: Проверьте параметры
Timeout
,KeepAlive
иKeepAliveTimeout
. Убедитесь, что они корректно настроены согласно вашим потребностям. Иногда слишком долгий таймаут может привести к накоплению "зависших" процессов.
Пример конфигурации:
Timeout 30
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
3. Мониторинг ресурсов
Проблема может быть вызвана высоким использованием ресурсов. Убедитесь, что:
- CPU и RAM: Использование CPU и RAM остается низким даже после нескольких часов работы.
- Дисковая подсистема: Отсутствие дисковых I/O может также привести к замедлению.
Для мониторинга можно использовать инструменты, такие как htop
, iotop
или vmstat
, чтобы отслеживать использование ресурсов.
4. Модуль устаревания
Попробуйте отключить ненужные модули Apache, так как это может ускорить работу (если некоторые из них потребляют ресурсы). Также убедитесь, что вы используете последнюю стабильную версию Apache.
5. Проверьте конфигурацию сети
Иногда пропуски в соединении или низкая скорость сети могут вызывать задержки. Убедитесь, что нет каких-либо сетевых разрывов, и проверьте настройки вашего сетевого интерфейса.
6. Настройка прокси
Попробуйте просмотреть настройки прокси-сервера. Возможно, есть отключенные параметры, которые могут оказывать влияние на производительность.
ProxyTimeout 60
7. Перезапуск Apache
Вы можете рассмотреть возможность автоматизации перезапуска сервера Apache с использованием cron, чтобы временно устранить проблему. Например, вы можете настроить задачу crontab:
0 */5 * * * /usr/sbin/apachectl restart
Заключение
Устранение неполадок в производительности может быть сложным, так как несколько факторов могут влиять на ситуацию. Проверьте настройки, производительность компонентов системы, обеспечьте стабильное соединение с Kestrel и исследуйте логи. Надеюсь, это поможет вам определить природу проблемы и улучшить производительность вашего сервера!
Удачи с решением проблемы!