性能调优(一)
背景
当网站出现性能问题时,通常有三种解决办法:
l 横向扩展: 人多力量大,通过增加服务器来提高系统吞吐量。
l 纵向扩展: 提高单兵作战能力,对软件进行性能优化,在一定程度上可提高系统性能。
l 混合方案: 多面开花,纵向扩展之余再横向扩展。
简单起见,本文以基于Tomcat的单服务器的网站性能调优为例说明优化思路,后续再介绍如何配置服务器集群
优化思路
程序性能优化有两个基本思路:
1. 算法优化
2. 以内存换性能
第一个思路通常比较好理解,现在比较流行的电脑配置就是固态硬盘,固态硬盘相比机械硬盘的存储算法不知甩了几条街,由此可见,一个好的算法确实能大幅度提高程序性能。
第二个思路也类似,往往加个内存条,之前跑起来很卡的大型程序瞬间就顺畅了很多。
Tomcat案例分析
Tomcat请求处理过程
开始讨论之前,先简单了解一下Tomcat处理请求的过程,
1:将请求放入请求队列(Accept队列)中
2 : 从请求队列提取一定个数的请求(maxConnections)
3:由线程池处提取的请求,当处理完请求后,再从Accept队列中的提取请求,直至提取的请求个数达到最大请求个数(maxConnections)
提高处理能力
根据算法优化思路, Tomcat请求处理过程有两个点可优化, 一:扩大请求队列的容量acceptCount,二:增加线程池中的线程个数提高并行处理能力.
可通过修改C:\apache-tomcat-9.0.12\conf\server.xml实现
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-" maxThreads="1000"
/>
<Connector port="8080"
protocol="HTTP/1.1"
executor="tomcatThreadPool"
acceptCount="1000"
maxConnections="1000"
>
其中关键参数含义:
maxConnections:一次最多能处理的请求个数
maxThreads:处理请求的最大线程数
acceptCount:请求队列长度
增加内存
除了提高处理能力外,还可以Tomcat的堆配置,Tomcat的默认配置通常比较的小,不太适合生产环境。
堆的修改可通过修改apache-tomcat-9.0.12\bin\catalina.bat实现,如下所示:
set "JAVA_OPTS=%JAVA_OPTS% -Xms800m -Xmx2048m “
参数含义:
Xms:初始堆大小
Xmx:最大堆大小