<div dir="ltr">Hi Maxim,<div><br></div><div>thanks a lot for the clarification!</div><div><br></div><div>So the process/thread that scans through the files on disk need to read the all the file headers to find the KEY for the all cache files to keep the information in memory before it starts deleting anything, is that correct?</div><div><br></div><div>It would be great if I could specify an option which would tell the cache manager that a whole drive is being used as cache, which would make the cache manager able to cut down the time it takes before deleting stuff from a huge drive from days to seconds. Does that make sense?</div><div><br></div><div>Stefan Safar</div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Nov 29, 2018 at 3:50 PM Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello!<br>
<br>
On Thu, Nov 29, 2018 at 03:23:51PM +0100, Stefan Safar wrote:<br>
<br>
> Hi there,<br>
> <br>
> I'd like to know a little bit more about the inner workings of the cache<br>
> manager. I looked through the code, and if I understand it correctly, when<br>
> it runs out of disk space specified by max_size, it tries to run the cache<br>
> manager, which looks at a queue of last-accessed URLs and tries to remove<br>
> the least used URL from the queue and from the disk.<br>
> <br>
> My question is, whether the queue is somehow persisted on disk, or I<br>
> misunderstood something? What I'm trying to know is what happens when an<br>
> nginx instance runs out of disk space and it's restarted - how does nginx<br>
> know what it should or shouldn't delete? I don't think I saw any code that<br>
> would scan through the disk and that would be a rather slow way to deal<br>
> with this.<br>
<br>
The LRU queue is only mantained in memory.  When nginx is <br>
restarted, details of which cache items were access last are lost, <br>
and nginx will have to remove some items due to max_size reached, <br>
it will remove mostly arbitrary items unless they were accessed <br>
after the restart.<br>
<br>
Note though that there is a code which scans though the disk to <br>
find out which items are in the cache (and how much space they <br>
take).  The cache loader process does this, see <br>
<a href="http://nginx.org/r/proxy_cache_path" rel="noreferrer" target="_blank">http://nginx.org/r/proxy_cache_path</a> for a high level description <br>
of how it works.<br>
<br>
-- <br>
Maxim Dounin<br>
<a href="http://mdounin.ru/" rel="noreferrer" target="_blank">http://mdounin.ru/</a><br>
_______________________________________________<br>
nginx mailing list<br>
<a href="mailto:nginx@nginx.org" target="_blank">nginx@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx</a><br>
</blockquote></div>