"not responding to CLI, killing it."

最近帮忙维护的一台镜像服务器出现了点问题,上面跑的varnish无规律地出现重启,导致缓存的内容全部被删除。出错log一般是这样的:

Mar 30 09:14:07 Cache-Node1 varnishd[15295]: Child (15297) not responding to CLI, killing it.
Mar 30 09:14:25 Cache-Node1 last message repeated 3 times
Mar 30 09:14:25 Cache-Node1 varnishd[15295]: Child (15297) died signal=3
Mar 30 09:14:25 Cache-Node1 varnishd[15295]: child (16153) Started
Mar 30 09:14:28 Cache-Node1 varnishd[15295]: Child (16153) said Child starts
Mar 30 09:14:28 Cache-Node1 varnishd[15295]: Child (16153) said SMF.s0 mmap'ed 2147483648 bytes of 2147483648

而此时iostat反应的%iowait也非常高,数值达到了80+,%idle仅剩下10不到。

varnish如果运行在磁盘IO非常繁忙的服务器上,整体效能将会非常糟糕。也没有太好的办法去解决这一问题,只能做一些外围的优化。优化主要是两个方面,一个是调整varnish的cli_timeout值,我将其调整为cli_timeout = 60;另一方面需要调整系统sysctl优化vm内核,调整脏页写回到磁盘的值,我设定的值是:

vm.max_map_count = 65536
vm.swappiness = 60
vm.dirty_ratio = 60
vm.dirty_writeback_centisecs = 200
vm.dirty_background_ratio = 60
vm.dirty_expire_centisecs = 5000

还有一条适用于CentOS 5,禁止刷新mmap页,但这个选项同样存在风险,慎用。另外 CentOS 6系列没有该项调整。

vm.flush_mmap_pages = 0

最后一条:强烈建议varnish运行在CentOS 5.x 64bit,磁盘IO不是很繁忙的环境中。

附一份 指南pdf,下载地址:http://dl.icodex.org/-guide-V1.0.pdf

香港 38cloud.com VPS 介绍

本次介绍香港本土的运营商38cloud.com,母公司uniforce.net,提供的频宽相当不错,单台VPS提供10M国际出口带宽(到国内也计算国际流量),并且不限制传输产生的流量。非常适合为国内或亚太地区提供电子商务或需要小型镜像加速服务的用家使用。具体的频宽可参见:http://www.38cloud.com/faq/your--internet-speed-slow

VPS是kvm架构,可自己安装想要的操作系统(需提交ticket)。控制面板相对简陋很多,但平时使用的功能也不多,整站似乎是用drupal写的。控制面板截图如下:

付款后选择欲安装的操作系统(建议选择64bit的操作系统),大概等15分钟即可安装完毕,建议直接选用官方提供的系统,安装完之后一定要查看FAQ,比如登陆系统,需要用权限较低的普通用户(user1/user1)登陆,然后进入系统之后su到root权限(默认密码为password)才能正常使用,如果需要开启root直接登陆,首先要修改root密码,然后修改sshd_config中的PermitRootLogin yes。

Read more »

如何配置Varnish不缓存特定大小的内容

最近配置Varnish,经常发现把内存资源和磁盘IO资源占满的情况,后面找原因,发现Varnish把一些大文件缓存了,例如一些压缩档。记得以前用Squid时是有相应设置项的,可以不缓存文件大小超过1M的。后面经过Google搜索了一番,发现有篇文章的方法不错,用变通的方法(vcl_fetch 不支持 pass 语法,但支持 restart)解决了我的困扰,遂写日志以记之。

sub vcl_recv {
  /** ... vcl_recv example from above ... */
  /* Bypass cache for large files.  The x-pipe header is
     set in vcl_fetch when a too large file is detected. */
  if (req.http.x-pipe && req.restarts > 0) {
    remove req.http.x-pipe;
    return (pipe);
  }
  /** ... vcl_recv example from above ... */
}
sub vcl_fetch {
  /* Don't try to cache too large files.  It appears
      just crashes if we don't filter them. */
  if (beresp.http.Content-Length ~ "[0-9]{7,}") {
    set req.http.x-pipe = "1";
    return (restart);
  }
}
sub vcl_pipe {
  set bereq.http.connection = "close";
}

地址:http://devblog.seomoz.org/2011/05/how-to-cache-http-range-requests/
https://www.varnish-cache.org/lists/pipermail/varnish-misc/2010-November/004968.html

最后附完整vcl(文件链接),仅供参考。

Page 1 of 1612345...10... »