Cache questions

Igor Sysoev is at rambler-co.ru
Tue Jul 14 00:17:46 MSD 2009


On Mon, Jul 13, 2009 at 04:02:06PM -0400, Jim Ohlstein wrote:

> 
> 
> Igor Sysoev wrote:
> >On Mon, Jul 13, 2009 at 03:33:21PM +0400, Maxim Dounin wrote:
> >
> >  
> >>Hello!
> >>
> >>On Fri, Jul 10, 2009 at 07:39:46PM -0400, Jim Ohlstein wrote:
> >>
> >>    
> >>>I'm using the fastcgi cache for static files (images, javascript,css)  
> >>>and just found multiple lines in the error log like this one:
> >>>
> >>>2009/07/10 10:22:54 [crit] 22476#0: ngx_slab_alloc() failed: no memory  
> >>>in cache keys zone "one"
> >>>
> >>>So I increased the memory available for the zone and reloaded nginx. It  
> >>>took over five hours to go through the cache but these are the relevant  
> >>>entries:
> >>>
> >>>2009/07/10 12:11:03 [notice] 21038#0: start cache manager process 32730
> >>>2009/07/10 12:11:04 [notice] 21038#0: cache manager process 22480 exited 
> >>>with code 0
> >>>
> >>>and finally
> >>>
> >>>2009/07/10 17:43:27 [notice] 32730#0: http file cache:  
> >>>/usr/local/nginx/cache 11638.289M, bsize: 4096
> >>>
> >>>My questions are:
> >>>
> >>>Is that simply the total (11638.289MB or 11.4GB) of all of the file  
> >>>sizes, or is that the actual disk space consumed taking into account  
> >>>total number of blocks used multiplied by the block size? The number  
> >>>      
> >>It's size on disk (i.e. number of blocks * block size), but for 
> >>files only (it doesn't take directories into account).
> >>    
> >
> >Just note: nginx rounds a file size to the bsize.
> >bsize is f_bsize from statfs() or f_frsize from statvfs().
> >I'm not sure that bsize matches always a filesystem allocation unit.
> >  
> 
> OK, Thanks.
> 
> In trying to tune this, if I set fastcgi_cache_min_uses to 2, does that 
> mean that a file will only be written to the cache the second time that 
> it is requested? Google translate did not give me a clear answer to this 
> from the Russian documentation. I think that I could improve efficiency 
> greatly if I didn't cache files on the first request.

Yes, a file will be cached only on the second request made during period
set in by "inactive" option of fastcgi_cache_path directive.

> I would know 
> better if I could get some statistics. I know the last time I asked the 
> answer was "not yet". Do you have any idea when this might be 
> implemented even on a rudimentary basis?

You may log $upstream_cache_status.

> >>>could be quite different given what I estimate are nearly one million  
> >>>mostly small files in the cache at this point.
> >>>
> >>>When I next upgrade nginx (I'm running 0.8.4), and I attempt a "graceful 
> >>>upgrade" will it have to go through this entire process again?
> >>>      
> >>Yes.  Binary upgrade doesn't preserve shared memory zones, so 
> >>cache will be rescanned again.
> >>
> >>Note that nginx uses cache even before it was completely scanned, 
> >>so it shouldn't be a problem.
> >>    
> 
> Yes, but it uses a fair bit of system resources scanning a large cache. 
> Nothing much to be done about it though.

I tried to minimize impact of cache scanning according to this comment:

            /*
             * if processing 100 files takes more than 200ms,
             * it seems that many operations require disk i/o,
             * therefore sleep 200ms
             */


-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list