一、varnishd指令

Varnish启动的命令是/usr/local/varnish/sbin/varnishd,此命令参数较多,用法比较复杂,在命令行执行“/usr/local/varnish/sbin/varnishd –h”即可得到varnishd的详细用法,表2-6列出了varnishd常用参数的使用方法和含义。

表1


命令参数 参数含义  

-a address:port 表示varnish对httpd的监听地址及其端口  

-b address:port 表示后端服务器地址及其端口  

-d 表示使用debug调试模式  

-f file 指定varnish服务器的配置文件  

-p param=value 指定服务器参数,用来优化varnish性能  

-P file Varnish进程PID文件存放路径  

-n dir 指定varnish的工作目录  

-s kind[,storageoptions] 指定varnish缓存内容的存放方式,常用的方式有:“-s file,<dir_or_file>,<size>”。  

其中“<dir_or_file>”指定缓存文件的存放路径,“<size>”指定缓存文件的大小    #缓存文件“varnish_cache.data”在32位操作系统下,最大仅能支持2G

-t 指定缺省的TTL值  

-T address:port 设定varnish的telnet管理地址及其端口  

-w int[,int[,int]] 设定varnish的工作线程数,常用的方式有:  

                     -w min,max  

                     -w min,max,timeout  

                     例如:-w5,51200,30,这里需要说明下,在varnish2.0版本以后,最小启动的线程数不能设定过大,设置过大,会导致varnish运行异常缓慢。

  -V 显示varnish版本号和版权信息


启动varnishd:

  

[root@varnish ~]#/usr/local/varnish/sbin/varnishd -f /usr/local/varnish/etc/varnish/default.vcl -s malloc,4G -w 5,51200,10 -T 10.2.18.67:3500 


查看端口情况:

  

[root@varnish ~]# netstat  -anptul

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   

tcp        0      0 10.2.18.67:3500             0.0.0.0:*                   LISTEN      30882/varnishd      

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      30883/varnishd      

tcp        0      0 0.0.0.0:8081                0.0.0.0:*                   LISTEN      30449/nginx      




二、管理varnish运行日志


varnish是通过内存共享的方式提供日志的,它提供了两种日志输出形式,分别是:


通过自带的varnishlog指令可以获得varnish详细的系统运行日志。

例如:


[root@varnish~]#/usr/local/varnish/bin/varnishlog -n /data/varnish/cache  

0 CLI          - Rd ping  

0 CLI          - Wr 200 PONG 1279032175 1.0  

0 CLI          - Rd ping  

0 CLI          - Wr 200 PONG 1279032178 1.0  



通过自带的varnishncsa指令得到类似apache的combined输出格式的日志。

例如:


[root@varnish~]#/usr/local/varnish/bin/varnishncsa  -n  /data/varnish/cache  

也可以将日志输出到一个文件中,通过“-w”参数指定即可:


[root@varnish~]#/usr/local/varnish/bin/varnishncsa -n /data/varnish/cache  >-w /data/varnish/log/varnish.log  

 


三、查看varnish缓存效果与状态

 可以通过浏览器访问对应的网页,查看varnish缓存的效果,如果varnish缓存成功的话,第二次打开网页的速度会明显比第一次快,但是这种方式并不能够完全说明问题,下面通过命令行方式,通过查看网页头来查看命中情况,操作如下:


[root@varnish~]# curl -I http://www.xxx.com/a/mz/2010/0421/11.html  

HTTP/1.1 200 OK  

Server: Apache/2.2.14 (Unix) PHP/5.3.1 mod_perl/2.0.4 Perl/v5.10.1  

Last-Modified: Sat, 10 Jul 2010 11:25:15 GMT  

ETag: "5e850b-616d-48b06c6031cc0"  

Content-Type: text/html  

Content-Length: 24941  

Date: Fri, 09 Jul 2010 08:29:16 GMT  

X-Varnish: 1364285597  

Age: 0  

Via: 1.1 varnish  

Connection: keep-alive  

X-Cache: MISS from www.xxx.com 

  #这里的"MISS"表示此次访问没有从缓存读取。

再次打开这个页面,查看网页头信息:

 


[root@varnish~]# curl -I http://www.xxx.com/a/mz/2010/0421/11.html  

HTTP/1.1 200 OK  

Server: Apache/2.2.14 (Unix) PHP/5.3.1 mod_perl/2.0.4 Perl/v5.10.1  

Last-Modified: Sat, 10 Jul 2010 11:25:15 GMT  

ETag: "5e850b-616d-48b06c6031cc0"  

Content-Type: text/html  

Content-Length: 24941  

Date: Fri, 09 Jul 2010 08:30:35 GMT  

X-Varnish: 1364398612 1364285597  

Age: 79  

Via: 1.1 varnish  

Connection: keep-alive  

X-Cache: HIT from www.xxx.com   

 #由“HIT”可知,第二次访问此页面时,是从缓存中读取内容了,也就是缓存命中。 

 

 

注意: 缓存命中率的高低直接说明了varnish的运行状态和效果,较高的缓存命中率说明了varnish运行状态良好,web服务器的性能也会提高很多,反之,过低的缓存命中率说明varnish的配置可能存在问题,那么就需要进行调整,因此,从整体上了解varnish的命中率和缓存状态,对于优化和调整varnish至关重要。


varnish提供了一个varnishstat命令,通过它可以帮我们获得很多重要的信息。

下面是一个varnish系统的缓存状态:


[root@varnish~]#/usr/local/varnish/bin/varnishstat  -n /data/varnish/cache  

Hitrate ratio:       10      100      113  

Hitrate avg:     0.9999   0.9964   0.9964  

 

        9990        68.92        49.70 Client connections accepted  

      121820       953.84       606.07 Client requests received  

      112801       919.88       561.20 Cache hits  

          68         0.00         0.34 Cache misses  

        2688        33.96        13.37 Backend conn. success  

        6336         1.00        31.52 Backend conn. reuses  

        2642        33.96        13.14 Backend conn. was closed  

        8978        29.96        44.67 Backend conn. recycles  

        6389         1.00        31.79 Fetch with Length  

        2630        32.96        13.08 Fetch chunked  

         444          .            .   N struct sess_mem  

          23          .            .   N struct sess  

          64          .            .   N struct object  

          78          .            .   N struct objectcore  

          78          .            .   N struct objecthead  

         132          .            .   N struct smf  

           2          .            .   N small free smf  

           3          .            .   N large free smf  

           6          .            .   N struct vbe_conn  

          14          .            .   N worker threads  

          68         1.00         0.34 N worker threads created  

           0         0.00         0.00 N queued work requests  

        1201        11.99         5.98 N overflowed work requests  

           1          .            .   N backends  

           4          .            .   N expired objects    

        3701          .            .   N LRU moved objects  

      118109       942.85       587.61 Objects sent with write  

        9985        71.91        49.68 Total Sessions  

      121820       953.84       606.07 Total Requests  

 

 


这里需要注意的几个地方是:

“Client connections accepted”表示客户端向反向代理服务器成功发送HTTP请求的总数量。

"Client requests received"表示到现在为止,浏览器向反向代理服务器发送HTTP请求的累积次数,由于可能会使用长连接,所以这个值一般会大于“Client connections accepted”。

“Cache hits”表示反向代理服务器在缓存区中查找并且命中缓存的次数。

“Cache misses”表示直接访问后端主机的请求数量,也就是非命中数。

“N struct object”表示当前被缓存的数量。

“N expired objects”表示过期的缓存内容数量。

“N LRU moved objects”表示被淘汰的缓存内容个数。



四、管理varnish缓存内容

 Varnish的一个显著优点是可以灵活的管理缓存内容,而管理缓存主要的工作是如何迅速有效的控制和清除指定的缓存内容,varnish清除缓存相对比较复杂,不过幸运的是,可以通过varnish的管理端口发送PURGE指令来清除不需要的缓存。

下面列出了清除缓存内容的命令格式:


/usr/local/varnish/bin/varnishadm -T 10.2.18.67:3500 purge.url  <regexp>


下面的命令可以列出最近清除的详细URL列表:


/usr/local/varnish/bin/varnishadm -T 10.2.18.67:3500  purge.list 


举例如下:

(1)如果要清除http://www.xxx.com/a/2010.html的URL地址,可以执行如下命令:


/usr/local/varnish/bin/varnishadm -T 10.2.18.67:3500  purge.url /a/2010.html


(2)批量清除类似http://www.xxx.com/a/b/s*.html的URL地址,可执行如下命令:


/usr/local/varnish/bin/varnishadm -T 10.2.18.67:3500  purge.url ^/a/b/s.*$


(3)批量清除类似http://www.xxx.com/a/b/*.html的URL地址,可执行如下命令:


/usr/local/varnish/bin/varnishadm -T 10.2.18.67:3500  purge.url  ^/a/b.*$


(4)如果要清除所有缓存,可执行如下命令:


/usr/local/varnish/bin/varnishadm -T 10.2.18.67:3500 purge.url  ^.*$


(5)查看最近清除的详细URL列表


/usr/local/varnish/bin/varnishadm -T 10.2.18.67:3500 purge.list

0x2dc310c0 1278674980.497631     0      req.url ~ /zm/a/web/2010/0423/64.html

0x2dc31100 1278674964.851327     1      req.url ~ ^/zm/a/d.*$


除了通过linux命令行方式清理varnish缓存外,还可以通过telnet到管理端口的方式来清理缓存页面,例如:


[root@varnish~]#telnet 10.2.18.67 3500                 

Trying 10.2.18.67...  

Connected to localhost.localdomain (10.2.18.67).  

Escape character is '^]'.  

200 154       

-----------------------------  

Varnish HTTP accelerator CLI.  

-----------------------------  

Type 'help' for command list.  

Type 'quit' to close CLI session.  

 

purge.url  /a/mz/2010/0421/11.html  #这里是清除这个页面缓存  

200 0         

 

purge.url  ^/zm/a/d.*$   #这里是清除/zm/a/d/目录下所有以字母d开头的缓存页面  

200 0