Varnish cache is not a magic bullet! You have to monitor this system and ensure the numbers are hitting metrics that you determien to be "proper" There is no such thing as set-it-and-forget-it when it comes to web-site operations.
Checking Status
Using the built in tool varnishstat
a nice terminal display is created.
Here's a sample from one that I just started a few minutes ago.
0+01:03:00 staging Hitrate ratio: 4 4 4 Hitrate avg: 0.0000 0.0000 0.0000 605 12.52 0.16 Client connections accepted 605 12.52 0.16 Client requests received 605 12.52 0.16 Cache misses 39 0.20 0.01 Backend conn. success 566 12.32 0.15 Backend conn. reuses 33 0.13 0.01 Backend conn. was closed 605 12.52 0.16 Backend conn. recycles 583 12.39 0.15 Fetch with Length 22 0.13 0.01 Fetch chunked 15 . . N struct sess_mem 352 . . N struct object 352 . . N struct objectcore 352 . . N struct objecthead 703 . . N struct smf 0 . . N small free smf 2 . . N large free smf 6 . . N struct vbe_conn 20 . . N worker threads 20 0.00 0.01 N worker threads created 1 . . N backends 253 . . N expired objects 601 12.45 0.16 Objects sent with write 605 12.52 0.16 Total Sessions 605 12.52 0.16 Total Requests 605 12.52 0.16 Total fetch 188956 3883.58 49.99 Total header bytes 4286643 38230.67 1134.03 Total body bytes 605 12.52 0.16 Session Closed 46143 880.82 12.21 SHM records 6196 75.79 1.64 SHM writes 4 0.00 0.00 SHM flushes due to overflow 10 0.27 0.00 SHM MTX contention 1206 24.97 0.32 allocator requests 701 . . outstanding allocations 5111808 . . bytes allocated 1068630016 . . bytes free 605 12.52 0.16 Backend requests made 1 0.00 0.00 N vcl total 1 0.00 0.00 N vcl available 2 0.00 0.00 N new purges added 3780 1.00 1.00 Client uptime
My cache is consuming 450MiB, with 1G of total space; so there is nice room to run here. Watch these number for your site. Performance is about establishing a baseline, setting a goal and making one change and measure again.
Worker Threads
If you find that Varnish hasn't enough worker threads adjust those with the -s switch.
-w 8,32,3600
Storage
I like to split my Varnish cache across multiple small(ish) files. Also, preallocate your files!
~ # dd if=/dev/zero of=/var/cache/varnish.a bs=1m count=512 ~ # dd if=/dev/zero of=/var/cache/varnish.b bs=1m count=512 ~ # dd if=/dev/zero of=/var/cache/varnish.c bs=1m count=512 ~ # varnishd -s malloc,512m \ -s file,/var/cache/varnish.a,512m \ -s file,/var/cache/varnish.b,512m \ -s file,/var/cache/varnish.c,512m \
Hash Types
If you really feel like tweaking your environment try adjusting the hash.
-t classic,32768