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