清漆不一致地从caching中逐出页面

在我们的清漆configuration中,我们有一个定义如下的vcl_fetch函数:

if (beresp.ttl > 0s) { /* Remove Expires from backend, it's not long enough */ unset beresp.http.expires; /* Set the clients TTL on this object */ set beresp.http.cache-control = "max-age=900"; /* Set how long Varnish will keep it */ set beresp.ttl = 1h; /* marker for vcl_deliver to reset Age: */ set beresp.http.magicmarker = "1"; } 

然后在vcl_deliver中:

 if (resp.http.magicmarker) { /* Remove the magic marker */ unset resp.http.magicmarker; /* By definition we have a fresh object */ set resp.http.age = "0"; } 

问题是,如果我设置一个脚本(无论是一个shell脚本或一个PHP脚本)打到相同的URL,我首先看到一个MISS,其次是一个HIT(迄今为止都很好)。

我希望坐的是重复的HITS,直到1小时的标记通过,一个MISS在1小时的标记,然后再一个小时的HIT。 换句话说,因为我反复击打相同的URL,它应该每隔1小时在HIT和MISS之间循环。

相反,我所看到的是这样的:

  6/20/2013 6:30:05 - STRING HIT NOT FOUND 6/20/2013 10:32:11 - STRING HIT NOT FOUND 6/21/2013 12:33:06 - STRING HIT NOT FOUND 6/21/2013 2:34:06 - STRING HIT NOT FOUND 

现在是5:57 AM(HIT没有find,差不多4小时)。

上面的caching未命中都出现在半小时左右,但是相隔4小时,2小时和2小时,TTL设置为1小时。

所以我不明白为什么这个对象被保留超过一个小时,为什么它在看似随机的时间间隔被驱逐。 我怎样才能更好地确定发生了什么?

顺便说一句,我使用清漆3,如果有帮助。

所以有问题的清漆服务器cachingDrupal 7网站。 在Drupal 7站点中,我们configuration并启用了Drupal Varnish模块。

尽我所能说的是定期清理caching。 我能够确定使用以下命令并看到我还没有发出的BAN:

 varnishadm -T localhost:6082 -S /etc/varnish/secret ban.list Present bans: 1371834738.031740 193 req.http.host ~ www.ourdomain.com && req.url ~ /