1)调整配置文件的配置项的值(httpd.conf)
Timeout 60 #建议设置该值比较小,有利于快速释放连接。
KeepAlive Off #系统前端有安装squid,则必须要开启;否则处理动态的内容多,则关闭,或处理静态的资源多,也许开启。
MaxKeepAliveRequests 100
KeepAliveTimeout 15 #KeepAlive超时时间,没有指定该值,默认使用Timeout,否则使用该值。
配置工作模式1:prefork.c
<IfModule prefork.c> #多个子进程、每个子进程有1个线程,在某个时间点只能维持1个连接,效率高,但耗费内存
StartServers 5 #启动时建立的子进程数量 <20 20~50 50~100
MinSpareServers 5 #空闲子进程的最小数量 默认5个 数量不够会被创建
MaxSpareServers 10 #空闲子进程的最大数量 默认10个 多余的进程会被关闭
ServerLimit 1024 #apache中允许客服端请求连接的数量极限值 最大20000
MaxClients 768 #允许客服端请求连接的数量 默认256 MaxClients 与ServerLimit必须同时增大 ServerLimit项必须放在MaxClients项前
MaxRequestsPerChild 0 #每个子进程在其声明周期中,能够处理请求的数量,最大为10000 0 子进程不会结束 超过10000,多的子进程会被结束
</IfModule>
将MaxRequestsPerChild设置成非零值有两个好处:
1)可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2)给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。
ThreadLimit >= ThreadsPerChild
MaxClients <= ServerLimit * ThreadsPerChild 必须是ThreadsPerChild的倍数 (2048 <= 25*25)
MaxSpareThreads >= MinSpareThreads+ThreadsPerChild (500 >= 25+25)
配置工作模式2: worker.c
<IfModule worker.c> #多个子进程、每个子进程有多个线程,在某个时间点只能维持1个连接,不耗费内存,适合高流量服务器,单个线程崩溃会引起同一进程中的其他线程崩溃
StartServers 3 #启动时建立的子进程数量
MinSpareThreads 25 #空闲子进程的最小数量 默认5个 数量不够会被创建
MaxSpareThreads 75 #空闲子进程的最大数量 多余的进程会被关闭 MaxSpareThreads>=MinSpareThreads+ThreadsPerChild
ServerLimit 25 #apache中允许客服端请求连接的数量极限值 最大20000
MaxClients 150 #允许客服端请求连接的数量 默认256 MaxClients 与ServerLimit必须同时增大 MaxClients<=ServerLimit*ThreadsPerChild
ThreadsPerChild 25 #每个子进程建立常驻执行的线程数 默认100~500 最大值20000 与ThreadLimit必须同时增大
ThreadLimit 200 #每个子进程可配置的线程数最大值 ThreadLimit>=ThreadsPerChild
MaxRequestsPerChild 0 #每个子进程在其声明周期中,能够处理最大请求的数量,最大为3000 0 子进程不会结束 超过10000,多的子进程会被结束
</IfModule>
设置过期时间
<IfModule expires_module.c>
ExpiresAction ON
ExpiresDefault "access plus 12 month"
ExpiresByType "text/html access plus 12 month"
</IfModule>
开启gzip压缩
<IfModule mod_deflate.c>
DeflateCompressionLevel 7
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
AddOutputFilter DEFLATE css js
</IfModule>