Способы оплаты Abuse

Как устранить 404 Not Found Nginx при недостатке памяти

15.11.2023, 13:31

404 Not Found - ошибка, которая возникает при попытке доступа к веб-странице или ресурсу, который не найден на сервере. Nginx - это веб-сервер и прокси-сервер, который может использоваться для обслуживания веб-сайтов. 404 Not Found Nginx означает, что запрашиваемая страница или ресурс не был найден на сервере, который использует Nginx.

Как устранить ошибку, если недостаточно оперативной памяти?

Когда php-скрипту не хватило ОЗУ для выполнения, и его процесс был остановлен системой, Nginx тоже может вернуть ошибку 404.

Такую ситуацию вы будете наблюдать, когда скрипт продолжительное время выполняется, после чего выдает "404 Not Found" или страница ошибки вашего движка. Обычно эта неисправность тоже видна в отладочном логе.

Как устранить 404 Not Found Nginx при недостатке памяти

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

$ systemctl restart php-fpm

Можно ли избежать этой ситуации в дальнейшем? Ответ - да, можно. Для этого необходимо настроить автоматический перезапуск процессов.

Настраиваем автоматический перезапуск процессов

Для настройки автоматического перезапуска процессов после обработки определенного количества запросов в Linux, вы можете использовать инструменты управления процессами, такие как systemd или supervisord.

systemd

Создайте файл с расширением .service в каталоге /etc/systemd/system/ с конфигурацией вашего процесса. Например, файл php-fpm.service

[Unit]
Description=PHP FastCGI Process Manager
After=network.target

[Service]
Type=simple
ExecStart=/usr/sbin/php-fpm
Restart=always
RestartSec=3
StartLimitInterval=0
StartLimitBurst=10

[Install]
WantedBy=multi-user.target

В этом примере, параметр StartLimitBurst устанавливает количество перезапусков до временного отключения процесса.

После создания файла службы, выполните команду для перезапуска systemd и активации новой службы:

sudo systemctl daemon-reload
sudo systemctl enable php-fpm.service
sudo systemctl start php-fpm.service

supervisord

Установите его с помощью менеджера пакетов вашего дистрибутива Linux. Затем создайте конфигурационный файл для вашего процесса в каталоге /etc/supervisor/conf.d/. Например, файл php-fpm.conf:

[program:php-fpm]
command=/usr/sbin/php-fpm
autorestart=true
startretries=10

В этом примере, параметр startretries устанавливает количество попыток перезапуска процесса.

После создания конфигурационного файла, перезапустите supervisord:

sudo supervisorctl reread
sudo supervisorctl update

Эти шаги помогут вам настроить автоматический перезапуск процессов после обработки определенного количества запросов в Linux.