数据库性能优化,apache性能优化

HostnameLookups Off
HostnameLookups设置如果一旦启用,服务器会对客户端的hostname进行nslookup查询。这将延迟对用户的响应
AllowOverride None
一般,将AllowOverride设置为AllowOverride None的性能是最优的。如果该值设置All,目录设置允许被.htaccess文件覆盖。那么Apache则会在文件名的每一个组成部分都尝试打开.htaccess文件。要避免这种情况,可以将AllowOverride设置为None。
Options FollowSymLinks
Options的选值很多,除了All之外,我们还比较关心Indexes、FollowSymLinks和SymLinksIfOwnerMatch。其中FollowSymLinks表示允许在此目录使用符号连接。这是一种什么概念呢,比如/va/ftp/data是你存ftp上传数据的地方,而web目录是/var/www/perfgeeks,假定你想通过http://www.perfgeeks.com/ftp访问/var/ftp/data目录的数据,你可以在/var/www/perfgeeks目录下建立一个符号连接ftp指向/var/ftp/data。而FollowSymLinks就是指明这种操作是允许的,指示Apache不必去检查ftp文件是否为链接。另外SymLinksIfOwnerMatch则要求和符号连接与其指向的目录或文件属主是同一人(相同的uid)才允许上述操作,即/var/www/perfgeeks/ftp与/var/ftp/data拥有者的uid要求是一样的,这样Apache就必须通过请求系统内核调用stat()来检查文件名每一个组成部分是否为链接,如果是链接就要去核实是否与链接指向的原文件具有相同的uid。我们推荐设置FollowSymLinks,而不要设置SymLinksIfOwnerMatch,这样可以获取更高的性能。因为,假定没有设置FollowSymLinks或者一旦设置了SymLinksIfOwnerMatch,则会额外地调用系统内核函数lstat()来验证目录是否为符号连接。而且是验证文件的每一个组成部分。
DirectoryIndex index.php index.html index.html.var
当用户访问的URL以一个”/”结尾的时候,DirectoryIndex则指明了要寻找的资源列表。也就是说,Apache会依次找/path/index.php, /path/index.html等等。所以,DirectoryIndex指定的资源列表顺序与数量都会影响性能,我们推荐数量不宜太多,把最常用的资源放在列表的最前面。
Options MultiViews
我们应该尽量避免使用Options MultiViews来实现内容协商,它非常低效,因为要搜索整个目录。我们可以通过type-map的方式实现内容协商。把所有要用到的type-map放在一个文件里面,比搜索文件性能会更高。所谓,内容协商,指从几个有效资源中选择一个最匹配用户端请求的资源给用户端,这个过程就叫做内容协商。比如,用户请求了资源/path/test/foo, 而且/path/test/foo文件并不存在。MultiViews的做法就是在整个目录查找foo.*所有文件,并且跟据用户请求的content-type, content-encoding等信息,把一个最接近用户请求的资源作为用户请求的资源,返回给用户。
EnableMMAP on
尽可能地打开内存映射文件设置。所谓内存映射文件,指的就是Linux内核通过内核调用mmap()将磁盘文件与进程某段内存地址空间(有可能是物理内存,但也有可能是虚拟内存)对映起来,自此Apache就可以通过访问内存直接访问磁盘文件,它不需要使用read()和write()等系统内核调用来访问磁盘了。所以,在大多数情况下,可以通过内存映射文件的机制来提高磁盘I/O性能。Apache2开始支持mmap功能,对于较大的静态文件,Apche是不会使用mmap的,因为需要不小的内存开销。另外,mmap仅对较小的静态文件有效。也就是说,Apache2对于较小的静态文件,才会启用mmap将文件映射到进程内存地空间。
EnableSendfile On
如果你的系统支持Sendfile机制的话,通过EnableSendfile On设置开启该机制。Sendfile机制可以提高Apache性能。所谓Sendfile,就是我们平常所提到过的”零拷贝”。一般,我们对一个磁盘文件写操作,要经过几次拷贝才能够完成。首先用户进程,通过fgets()向请求系统内核调用read,这时候read会将磁盘文件数据拷到系统内核空间的缓冲区,然后系统内核调用返回的数据拷到用户空间的缓冲区。当回写数据的时候,又会通过fwrite()函数请求系统内核调用write,将数据写回磁盘。磁盘设备->内核缓冲(内存)->用户缓冲(内存)来回共4次拷贝。对于一个静态文件请求,我们会发现,首先从磁盘设备将数据拷贝到内核空间缓冲区,又从内核空间缓冲区拷贝到用户空间缓冲区,马上又从用户空间缓冲区拷贝回内核缓冲区,接着从内核缓冲区写入到网络接口设备。我们发现,静态数据从内核空间交给用户空间之后,并没有被程序做任何处理,又原原本本地传回了内核空间,数据就这样白白地兜了一圈。所以,Linux自支持Sendfile机制以后,它可以让数据不用交给用户空间缓冲区,直接在内核空间处理掉。这样节约了内核态的切换和用户态数据的复制开销。
如果没有必要记日志,把日志记录关闭

目录的层级不要太深,越简单越好
Tags:  电脑性能优化 win7性能优化 品悟性能优化 数据库性能优化

延伸阅读

最新评论

发表评论