首先,我使用:APC,W3TC,PHP5,Wordpress 3.8,Apache 2.2,我得到了很多“caching未命中”
还是不太明白光油那么好。 下面是我从Unixy后台运行几分钟后得到的一些统计数据:
client_conn:3744 client_drop:0 client_req:3910 cache_hit:914 cache_miss:2347
我改变了我的清漆内存到3GB的RAM(总共8)。
Varnish只caching经常出现的页面是否正常? 那么假设你有一个拥有10,000页的网站,Varnish能够将所有这些内容保存在caching中,还是只caching一定数量的频繁请求的页面?
所以我的问题实际上是我可以如何改进Varnish来caching更多的页面,并将它们保存在caching中很长一段时间(大部分是不需要刷新的静态页面)
3GB应该够了,认真。 如果你真的达到了极限,你将不会有caching丢失,但是caching丢失,在你的情况下:0。
所以内存可能不是问题。
清漆内存使用非常简单,使用的内存不多,大部分内存用于存储对象,对象是关于您的网页,因此一个50kb的caching在清漆中的HTML页面将使用大约50kb的清漆。
然而,如果你的对象和它的关联对象哈希值是不同的,例如因为有不同的查询参数(不影响联系人,但是用来跟踪例如),因此每个对象将被分别caching。
下面是默认的vcl来计算对象的散列值:
sub vcl_hash { hash_data(req.url); if (req.http.host) { hash_data(req.http.host); } else { hash_data(server.ip); } return (hash); }
正如你所看到的,它是基于完整的url和主机。 它存在一个querystring-vmod来sorting和/或删除查询参数来增加命中计数。
这可能是一个很好的开始,检查你的对象是不是被视为不同的清漆(在大多数情况下,这是因为查询参数)。
但在你的情况,我真的怀疑你有cookies,和/或错误的caching控制头。
默认情况下,清漆将忽略所有的cookie请求,增加您的caching未命中数。
sub vcl_recv { // ... if (req.http.Authorization || req.http.Cookie) { /* Not cacheable by default */ return (pass); } }
如果你真的知道你在做什么,你可能会删除请求中的cookies并强制caching你的对象,但要小心,你可以caching一个pipe理页面,这将被传递给客人。
举个例子,你可以定义哪个url应该被caching,并设置一个Cache-Control: public header,在你的vcl中,检测一个公共的Cache-Control头,删除cookie和caching。
但是,再次小心。
编辑 :您可能会对这篇文章感兴趣: 清漆和Wordpress上的清漆文档
在Unixy Varnishconfiguration之上,我在研究了各种configuration之后添加了这个configuration,也许有些configuration是多余的,但是现在我的cachingHIT比例好了很多,现在达到了60%,并且我把CPU负载从3降低到了0.10 – 0.50
if (!(req.url ~ "wp-(login|admin)")) { unset req.http.cookie; }
if ( req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?[a-z0-9]+)?$" ) { unset req.http.cookie; }
if (req.http.Cookie) { set req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *__utm.=[^;]+;? *", "\1"); if (req.http.Cookie == "") { remove req.http.Cookie; } }
if (req.request == "PURGE") { return (lookup); }
另外3GB是有点矫枉过正,我可能会改回1或2GB ..即使有10,000页或更多,但我会让它运行24小时,看看