LoaRunner性能测试系统学习教程:Apache调优( 三 )
MultiViews的效果是:如果服务器收到对/some/dir/foo的请求 , 而/some/dir/foo并不存在 , 但是如果/some/dir启用了MultiViews , 则服务器会查找这个目录下所有的foo.*文件 , 并有效地伪造一个说明这些foo.*文件的类型表 , 分配给他们相同的媒体类型及内容编码 , 并选择其中最合适的匹配返回给客户 。
Multiiews还可以在服务器检索一个目录时 , 用于DirectoryIndex指令搜索的文件名 。 如果设置了:
DirectoryIndexindex
而index.html和index.html3并存 , 则服务器会作一个权衡;如果都没有 , 但是有index.cgi , 则服务器会执行它 。
如果一个目录中没有任何文件具有mod_mime可以识别的表示其字符集、内容类型、语言和编码的后缀 , 那么其结果将取决于MultiViewsMatch指令的设置 , 这个指令决定了在MultiViews协商中将使用的处理器、过滤器和其他后缀类型 。
实践中 , 内容协商的好处大于性能的损失 , 如果你很在意那一点点的性能损失 , 则可以禁止使用内容协商 。 但是仍然有个方法可以提高服务器的速度 , 就是不要使用通配符 , 如:
DirectoryIndexindex.*
而使用完整的列表 , 如:
DirectoryIndexindex.cgiindex.plindex.shtmlindex.html
其中最常用的应该放在前面 。
还有 , 建立一个明确的type-map文件在性能上优于使用“OptionsMultiViews” , 因为所有需要的信息都在一个单独的文件中 , 而无须搜索目录 。 请参考内容协商文档以获得更详细的协商方法和创建type-map文件的指导 。
5)内存映射
在Apache2.2需要搜索被发送文件的内容时 , 比如处理服务器端包含时 , 如果操作系统支持某种形式的mmap() , 则会对此文件执行内存映射 。 在某些平台上 , 内存映射可以提高性能 , 但是在某些情况下 , 内存映射会降低性能甚至影响到httpd的稳定性:
在某些操作系统中 , 如果增加了CPU , mmap还不如read()迅速 。 比如 , 在多处理器的Solaris服务器上 , 关闭了mmap , Apache2.0传送服务端解析文件有时候反而更快 。
如果对作为NFS装载的文件系统中的一个文件进行了内存映射 , 而另一个NFS客户端的进程删除或者截断了这个文件 , 那么进程在下一次访问已经被映射的文件内容时 , 会产生一个总线错误 。
如果有上述情况发生 , 则应该使用EnableMMAPoff关闭对发送文件的内存映射 。 注意:此指令可以被针对目录的设置覆盖 。
6)Sendfile
在Apache2.2能够忽略将要被发送的文件内容时(比如发送静态内容) , 如果操作系统支持sendfile() , 则Apache将使用内核提供的sendfile()来发送文件 。
在大多数平台上 , 使用sendfile可以通过免除分离的读和写操作来提升性能 , 然而在某些情况下 , 使用sendfile会危害到httpd的稳定性
一些平台可能会有Apache编译系统检测不到的有缺陷的sendfile支持 , 特别是将在其他平台上使用交叉编译得到的二进制文件运行于当前对sendfile支持有缺陷的平台时 。
对于一个挂载了NFS文件系统的内核 , 它可能无法可靠的通过自己的cache服务于网络文件 。
如果出现以上情况 , 应使用“EnableSendfileoff”来禁用sendfile 。 注意 , 这个指令可以被针对目录的设置覆盖 。
7)进程的建立
在Apache1.3以前 , MinSpareServers、MaxSpareServers、StartServers的设置对性能都有很大的影响 。 尤其是为了应对负载而建立足够的子进程时
Apache需要有一个“渐进”的过程 , 在最初建立StartServers数量的子进程后 , 为了满足MinSpareServers设置的需要 , 每一秒钟只能建立一个子进程 。 所以 , 对一个需要同时处理100个客户端的服务器 , 如果StartServers使用默认的设置5 , 则为了应对负载而建立足够多的子进程需要95秒 。 在实际应用中 , 如果不频繁重新启动服务器 , 这样还可以 , 但是如果为了提供10分钟的服务 , 这样就很糟糕了 。
“一秒钟一个”的规定是为了避免在创建子进程过程中服务器对请求的响应停顿 , 但是它对服务器性能的影响太大了 , 必须予以改变 , 在Apache1.3中 , 这个“一秒钟一个”的规定变得宽松了 , 创建一个进程 , 等待一秒钟 , 继续创建第二个 , 再等待一秒钟 , 继而创建四个 , 如此按指数级增加创建的进程数 , 最多达到每秒32个 , 直到满足MinSpareServers设置的值为止 。
从多数反应看来 , 似乎没有必要调整MinSpareServers、MaxSpareServers、StartServers 。 如果每秒钟创建的进程数超过4个 , 则会在ErrorLog中产生一条消息 , 如果产生大量此消息 , 则可以考虑修改这些设置 , 可以使用mod_status的输出作为参考 。
- 巅峰|realme巅峰之作:120Hz+陶瓷机身+5000mAh 做到了颜值与性能并存
- 华为|骁龙870和骁龙855区别都是7nm芯片吗 性能对比评测
- 器件|苏州纳米所等在高性能柔性储能器件研究中取得进展
- 超强|RedmiNote9系列发布!天玑800U赋予超强5G性能
- iPhoneX|iPhone12和iPhoneX性能对决:差距比想象的大太多
- Redmi|Redmi Note 9系列发布,搭载天玑800U具备超强5G性能
- 首发|华为或首发联发科6纳米+A78新U:性能超强不输麒麟9000
- 华为|安兔兔10月安卓性能榜:华为Mate40 Pro第一 麒麟9000碾压骁龙865
- 骁龙865|5G手机中的性能怪兽,256+120W闪充,比iPhone12值得买
- 网间|新外观专利陆续曝光 徐起和网间透露realme极致性能新机将至
