“sendfile”标签相关文章 »

jul 31

用于附件下载的几台服务器中,有一台是 I386 架构,今天发现网络响应很慢,但系统负载一点都不高,看了看 netstat -rm 发现:

6065/6656/6656 sfbufs in use (current/peak/max)
705762 requests for sfbufs delayed
295194 requests for I/O initiated by sendfile

原来系统的 nsfbufs 满了。 man tuning 后,发现主要是 sendfile(2) 系统调用需要占用 nsfbufs,而现在越来越多的应用开始依靠 sendfile(2) 来传送文件,比如 Lighttpd 等。而我在服务器上使用 Lighttpd 作为静态附件的下载服务,可见对 sendfile(2) 的调用非常之频繁(netstat -rm 中有70万次的请求被延迟,只顺利完成近30万次)。

由此,增大 nsfbufs 参数即可解决此问题,在 /boot/loader.conf 文件中设置:

kern.ipc.nsfbufs="32768"

注:

  • AMD64 架构系统没有此问题;
  • kern.ipc.nsfbufs 的值应根据系统实际情况调整;
  • kern.ipc.nsfbufs 参数调整需要重启动系统;
dirk 发表于 2009-07-31 Friday