服务器CPU和内存等资源还比较空余,用户量大时网页访问却很慢?这可能是Apache或者Tomcat的相关参数没有进行优化的原因。将Apache和Tomcat的相关参数调整为和服务器硬件配置相匹配,可显著改善性能。下面所述性能调优,适合两者的单独使用的情况,也适合组合使用的情况。
除了调整相关参数外,架构的优化也是需要考虑的。
一、Apache的性能参数调整
1、Apache涉及性能调整的模块为:MPM,配置文件为:extra\httpd-mpm.conf
2、MPM模块有三种工作模式:profork、worker、event。
profork模式使用相互独立的进程处理用户的请求,不涉及线程。成熟稳定性,但对系统资源消耗较高。
worker模式进程和线程结合,性能较高,对系统资源相对消耗较少。
event为woker模式的改进,理论上性能最优,以后有机会对这一尚处于试验状态的模式使用一下。
可使用httpd –l查看当前使用的模式。
可使用ps -ef|grep httpd|wc –l查看当前系统中Apache进程数。
后面对目前正在使用的profork模式进行记录备注。
3、prefork 模式相关参数
# prefork MPM
# StartServers:每次创建新进程时一次性启动的进程数。
# MinSpareServers: 最小空闲进程数。服务器总是保持不少于这个数的进程存在。
# MaxSpareServers: 最大空闲进程数。空闲进程数超过这个数字,服务器就会结束一些进程,保持空闲进程数少于这个数。
# ServerLimit:设置服务器允许的最大硬进程数。
# MaxClients: 最大进程数。这个数必须<= ServerLimit。(可以理解为同一时间允许连接的最大用户数)。
# MaxRequestsPerChild: 限制每个进程能够处理的最大请求数。超过这个数,进程就自动结束。如果为0,则进程不会自动结束(可能会导致内存泄漏)。
<IfModule mpm_prefork_module>
StartServers 20
MinSpareServers 50
MaxSpareServers 100
ServerLimit 2000
MaxClients 2000
MaxRequestsPerChild 10000
</IfModule>
二、Tomcat的性能参数调整
1、Tomcat的两种连接器,分别用于处理HTTP/1.1协议与AJP/1.3协议。协议分别有三种实现方式,分别为:JIO、APR和NIO。在server.xml文件中,连接器的配置protocol参数如果指明了“HTTP/1.1”或者“AJP/1.3”,则会使用APR,APR性能相对JIO和NIO更好一些。也可以直接指定protocol为具体的JIO、APR或者NIO,但没必要。HTTP/1.1协议用于响应用户通过浏览器的操作,AJP/1.3则用于和Apache或者IIS等通讯。
2、Executor元素,用于配置可供连接器使用的共享线程池,可用于节约硬件资源。这个元素的配置在server.xml中位置必须放在连接器的配置之前,否则不会起作用,配置了线程池之后,连接器不需要再单独配置maxThreads等参数。因此,影响tomcat连接性能的总要参数,主要就在Executor的配置中,将。
3、元素Executor和连接器Connector的参数:maxThreads和minSpareThreads进行适当调整即可。
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="1000"
minSpareThreads="300"
maxQueueSize="100"
prestartminSpareThreads="true"
URIEncoding="UTF-8"/>
<Connector executor="tomcatThreadPool"
port="10047"
connectionTimeout="20000"
acceptCount="800"
redirectPort="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol" URIEncoding="UTF-8"/>
<Connector port="10053" protocol="AJP/1.3"
redirectPort="8493"
executor="tomcatThreadPool"
acceptCount="800"
connectionTimeout="20000"
URIEncoding="UTF-8"/>
三、其他
1、服务器集群架构。要进一步提升系统整体性能,增加允许同时在线用户数,可以考虑使用Apache+Tomcat的集群架构。这需要配置apache的负载分配器相关参数和Tomcat与session复制相关的参数配置。
2、数据库优化。做好针对查询的索引优化。必要时考虑缓冲策略。
完成以上优化设置,网站性能将能得到大幅提升。