ignore long locked inactive cache entry
Gena Makhomed
gmm на csdoc.com
Пт Май 7 15:25:18 UTC 2021
Здравствуйте, All!
Использую nginx 1.19.10 из официального репозитория на сайте nginx.org,
без сторонних модулей. При этом в логах наблюдаются такие строки:
[alert] 2569378#2569378: *449013402 open socket #29 left in connection 3
[alert] 2569378#2569378: *449013403 open socket #32 left in connection 8
[alert] 2569378#2569378: aborting
Насколько я понимаю - это означает что worker-процесс nginx аварийно
завершил свою работу. Можно ли как-то настроить nginx или систему
таким образом, чтобы в этот момент создавался дамп памяти процесса,
чтобы можно было бы найти причину этого аварийного завершения работы?
Дальше в логе наблюдаются такие строки:
[alert] 3459906#3459906: ignore long locked inactive cache entry
de41775189dd3dbc95ae14cfa9fa5813, count:2
Насколько я понимаю - это означает, что worker-процесс nginx аварийно
завершил свою работу в момент обновления записи в cache, и эта запись
осталась залоченной в памяти. Можно ли сделать так, чтобы в разделяемой
памяти в качестве признака блокировки использовался бы PID процесса?
Т.е. если 0 - то запись не заблокирована, если какое-то ненулевое
значение - значит она заблокирована worker-процессом nginx с таким PID.
И в случае обнаружения long locked inactive cache entry можно было бы
проверить - существует ли в системе worker-процесс nginx с таким PID,
и если нет - тогда просто разблокировать эту cache entry и продолжить
нормальную работу.
Альтернативный вариант - это сделать так, чтобы nginx не падал,
но насколько я понимаю, программ без ошибок не бывает
и они есть даже и в nginx в настоящий момент времени.
Конфиг бекенда, на котором была эта ошибка, примерно такой:
aio threads;
aio_write on;
sendfile on;
sendfile_max_chunk 1M;
server {
listen 80;
server_name example.com;
root /home/www/example.com/static.www/;
location / {
error_page 404 = @php;
location ~ \.xml$ { log_not_found off; }
location ~ \. { expires 24h; }
return 404;
}
location @php {
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME
/home/www/example.com/engine/index.php;
fastcgi_param HTTPS $http_x_forwarded_https if_not_empty;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_cache one;
fastcgi_cache_key "$request_method $scheme://$host$request_uri";
fastcgi_cache_min_uses 1;
fastcgi_cache_valid 200 301 302 404 10m;
fastcgi_cache_use_stale error timeout invalid_header updating
http_500 http_503;
fastcgi_cache_lock on;
fastcgi_cache_revalidate on;
fastcgi_cache_background_update on;
add_header X-Cache-Status $upstream_cache_status;
fastcgi_cache_bypass $http_update_nginx_cache;
fastcgi_cache_bypass $cookie_no_nginx_cache;
fastcgi_no_cache $cookie_no_nginx_cache;
}
location /static/ {
root /home/www/example.com;
add_header Access-Control-Allow-Origin *;
add_header Cache-control public;
expires 1y;
error_page 404 = @static;
log_not_found off;
}
location @static {
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME
/home/www/example.com/engine/static.php;
fastcgi_param HTTPS $http_x_forwarded_https if_not_empty;
fastcgi_pass unix:/run/php-fpm/www.sock;
}
}
Возможно получится воспроизвести эту ошибку и падение воркер-процесса
nginx с таким конфигом с помощью рандомного нагрузочного тестирования?
Память на сервере ECC и в /var/log/messages нет информации про ошибки
памяти, так что вероятность того, что это hardware related проблема -
близка к нулю.
--
Best regards,
Gena
Подробная информация о списке рассылки nginx-ru