[导入]apache的性能优化之sendfile

      Apache2.0以后的版本,如果操作系统支持sendfile() ,那么Apache就会使用内核提供的sendfile()来发送文件。有人说Linux2.4内核支持sendfile()系统调用,但2.6内核已经不再支持,不过我在linux2.6.17内核里调用sendfile,发现还是支持的,谁清楚这事?
    sendfile()是用于数据拷贝的,它是两个文件描述符之间的操作函数,这个操作是linux内核中操作实现的,因此被称为零拷贝,sendfile函数比起内核中read和write函数高效许多,因为read和write是要把数据拷贝到用户应用层操作,对于大文件来说,sendfile的优势就明显的体现出来了,特别是对下载站,音频网站,视频网站有很大优势。作为现代操作系统支持的一种高性能网络IO方式,sendfile调用可以将文件内容直接推送到网卡的buffer当中,大大避免了Web服务器读写文件的开销,直接减轻了web服务器的负担。

但是对于下面两种情况,就要避免sendfile的使用了
  

1。一些平台可能会有Apache编译系统检测不到的有缺陷的sendfile支持,特别是将在其他平台上使用交叉编译得到的二进制文件运行于当前对sendfile支持有缺陷的平台时。



2。对于一个挂载了NFS文件系统的内核,它可能无法可靠的通过自己的cache服务于网络文件。


这时候就要用
EnableSendfile off 指令将sendfile调用禁用。
Tags - apache性能 , sendfile
文章来源:http://www.askwan.com/read.php?65
posted @ 2008-07-11 06:05  万志华  阅读(599)  评论(0编辑  收藏  举报