近期在开发通知的提醒下进行了Varnish3.0.3缓存的优化处理,分析过程使用的是Munin监控数值做的分析,下面将优化过程进行叙述:

一、初期概况

初期做的地图数据缓存,最高命中率在90%,认为命中率很高。后经过日志统计发现,全天的URL总的内存占用在12G,而分配的内存是是36G进行缓存,因此为何无法全部命中?

二、内存参数对比

 1# varnishstat -1|grep SMA
 2SMA.s0.c_req             5026210        30.84 Allocator requests
 3SMA.s0.c_fail                  0         0.00 Allocator failures
 4SMA.s0.c_bytes       13944480077     85547.91 Bytes allocated
 5SMA.s0.c_freed            454443         2.79 Bytes freed
 6SMA.s0.g_alloc           5025662          .   Allocations outstanding
 7SMA.s0.g_bytes       13944025634          .   Bytes outstanding
 8SMA.s0.g_space       39743065566          .   Bytes available
 9SMA.Transient.c_req          266         0.00 Allocator requests
10SMA.Transient.c_fail           0         0.00 Allocator failures

对于上述内存参数, SMA.s0.g_space 表示当前可以应用的内存量,如果接近很小说明为缓存分配的内存还是比较小,已经不够使用;如果如上述情况表明内存的分配上已经足够。 SMA.s0.g_bytes 表示的是当前cache实际的内存大小 ( SMA.s0.c_bytes\= SMA.s0.g_bytes +SMA.s0.c_freed ) ,所以 SMA.s0.c_bytes应该为Varnish不断调整分配内存情况,分配的内存要大约实际使用的, SMA.s0.c_bytes我认为属于自动调节的范围,只要小于等于 SMA.s0.g_space 即可。如果命中率低,而内存又使用的很小与提供的部分,那么既有极大的优化空间。

内存的变化通过Munin还是比较直观的:

三、当前缓存缓存的对象数目

当前内存中缓存的object个数受制于TTL的设置比较大(对于不同URL,取同一个object的情况要,修改URL或者域名优化成一个缓存object),可以根据munin的取图每日的变化情况也可以判断缓存的是否优化到最后。

下图是我更改TTL后的前后的一个变化,之前TTL设置的过期是10小时,现在设置的是3天,目前object在内存中的中的数量还是在不断增长中,已经图片2.4M个。

四、通过Munin查看object的过期消失的个数。

从图中可以看出,增加TTL后,目前过期的个数已经到最低点。

五、缓存命中率

如图:

从图中可以看出,命中率目前已经增加到95以上,后前随着缓存object的增加还有继续提高。

总结:

通过Munin进行Varnish的内存监控、过期监控整体进行分析考虑进行优化,避免资源浪费。目前Varnish的第三方工具还是比较少的,技术的成熟预测可以出现自动报告优化点的开源工具出现。

注:以上内容摘自于互联网。