Varnishlog busy

From Skytech
Revision as of 05:42, 6 October 2011 by Martin (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


Varnishlog is busy (error 503)

Following varnish log and displaying all busy TX pages do

varnishlog -c -m TxStatus:503

Now you can see what/if you have any pages being served a busy/unavailable page (503).

Fixing

I had alot of 503 errors because of a smallish malloc assignment behind webserver serving alot of static pages.

I had to increase the default nuke_limit from 10 to 150 so the cache could be 'cleaned' up. In your startup for varnish add something like:

              -p nuke_limit=150 \
              -p thread_pool_add_delay=2 \
              -p thread_pools=2 \
              -p thread_pool_max=4000 \
              -p thread_pool_min=400 \
              -p sess_workspace=16384 \

I added the last 5 lines as well based on some calculations done in best practises, but haven't really looked much into it yet ( http://kristianlyng.wordpress.com/2010/01/26/varnish-best-practices )

Also, for a list of all options and what they do, visit: https://www.varnish-cache.org/docs/trunk/reference/varnishd.html

Stream through without caching

From varnish 3.0+ it is now possible to make varnish stream content through on-the-fly without having to cache it up front. This is very usefull for well, streaming data and if you run a site with many large files. I'm running multiple mirrors and totalling over 1TB of filedata; having to first let varnish cache the files, then serve it, delete as cache was full, serve etc, just really calls for un-needed data transfers.

Especially since I'm serving alot of ISO files (CD and DVD).

So I added a passthrough for those:


## Inside sub vcl_fetch { } ...
        if (req.url ~ "\.(iso|rpm)$") {
                set beresp.do_stream = true;
        }

Keep in mind that content will still be cached, if you dont want that you'll need a direct passthrough layer as well.

So inside vcl_recv:

## Inside sub vcl_recv
        if (req.url ~ "\.(iso|rpm)$") {
                return (pass);
        }

This will make all files passthrough without caching and fetching directly from your backend to the client(s).

Notice

Keep in mind all this is for varnish 3.0.0+!!