massive deleted open files in proxy cache

Marco Lenhardt 0815 at
Mon Feb 20 09:45:14 UTC 2017


We are useing Ubuntu 16.04 with nginx version 1.10.0-0ubuntu0.16.04.4.


user  nginx;
worker_processes  auto;
worker_rlimit_nofile 20480; # ulimit open files per worker process

events {
         # Performance
         worker_connections  2048; # openfilelimits beachten
         multi_accept on;
         use epoll;

http {
         open_file_cache max=10000 inactive=1d;
         open_file_cache_valid 1d;
         open_file_cache_min_uses 1;
         open_file_cache_errors off;

         proxy_cache_path /var/cache/nginx/proxy_cache 
levels=1:2 keys_zone=html_cache:30m max_size=8192m inactive=4h 
         proxy_cache_path /var/cache/nginx/wordpress_cache 
levels=1:2 keys_zone=wordpress_cache:1m max_size=256m inactive=24h 

         proxy_buffer_size          128k;
         proxy_buffers              4 256k;
         proxy_busy_buffers_size    256k;

# df -h |grep cache
tmpfs      300M   74M  227M  25% /var/cache/nginx/wordpress_cache
tmpfs      9.0G  4.1G  5.0G  45% /var/cache/nginx/proxy_cache

# df -i |grep cache
tmpfs    20632978    5457 20627521    1% /var/cache/nginx/wordpress_cache
tmpfs    20632978   74613 20558365    1% /var/cache/nginx/proxy_cache

# grep cache /etc/fstab
tmpfs	/var/cache/nginx/proxy_cache/		tmpfs 
rw,uid=109,gid=117,size=9G,mode=0755	0 0
tmpfs	/var/cache/nginx/wordpress_cache/	tmpfs 
rw,uid=109,gid=117,size=300M,mode=0755	0 0

# free -m
               total        used        free      shared  buff/cache 
Mem:         161195      112884        1321        4626       46988 
Swap:          3903         211        3692

We got massive open file handles from nginx user located inside 
proxy_cache_path with status deleted:

# lsof -E -M -T > lsof.`date +"%Y%d%m-%H%M%S"`.out

nginx  3613  nginx   48r   REG   0,42  148664   29697 
nginx  3613  nginx   50r   REG   0,42  161618   19416 

# grep nginx lsof.20172002-085328.out |wc -l

# grep nginx lsof.20172002-085328.out |grep deleted |wc -l

# grep nginx lsof.20172002-085328.out |grep deleted |grep 
"/var/cache/nginx/proxy_cache/temp" |wc -l

The most of the 36k deleted files are located inside the temp cache folder.

My question is, why we got so much deleted files inside the cache. Why 
is nginx not freeing these files?
Is there a problem with the proxy_cache_path option use_temp_path=off ?

I am in worry that the cache file system will be filled up with deleted 
files, and will reach open files limits.

Or do we have a nginx misconfiguration somewhere?

Additionally we were often visited from the oom-killer, (in face of 20G 
free memory). If I restart nginx before we reach 80k open ngnix files, 
the oom-killer will not visit us!

Has anybody simmilar findings regarding deleted open files?


More information about the nginx mailing list