首页
首页
文章目录
  1. 文章仅做自己记录,仅供参考:tomcat性能优化记录

Tomcat性能优化记录

文章仅做自己记录,仅供参考:tomcat性能优化记录

总体来说 tomcat性能优化一共可以通过三种方式进行优化,分别是内存优化、配置优化和组件优化

一、内存优化:

tomcat默认内存为128M,这么小的内存针对并发高的流量大的项目是远远不够的,当内存不够时,可能会爆出以下错误:

1
2
3
Exception invoking periodic operation: java.lang.OutOfMemoryError: Java heap space  

Error processing request java.lang.OutOfMemoryError: GC overhead limit exceeded

以上报错说明了tomcat已经无法处理访问了,Gc也爆出了超出最大限制。

针对以上报错,我们需要对tomcat进行内存调整。

1、修改 catalina.sh

添加:

JAVA_OPTS=” -server -Xmx2g -Xms2g -Xmn512m -XX:PermSize=256m -Xss256k”

catalina.sh配置

解释:

-server:启用 JDK的 server 版本;

-Xms:Java虚拟机初始化时堆的最小内存,一般与 Xmx配置为相同值,这样的好处是GC不必再为扩展内存空间而消耗性能;

-Xmx:Java虚拟机可使用堆的最大内存;

-XX:PermSize:Java虚拟机永久代大小;

-XX:MaxPermSize:Java虚拟机永久代大小最大值;

-Xss256k: 设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M。不熟悉的话 默认就好,这个值越大、可以创建的线程数就越少,反之亦然,请根据实际情况来配置,最好由测试进行压测后在上生产。

重启tomcat

2、检查配置是否生效:

主要用到俩个命令 jps、jmap:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
[root@zhizhebuyan bin]# jps
12182 Jps
44 Bootstrap 44为tomcat进程号


[root@zhizhebuyan bin]# jmap -heap 44
Attaching to process ID 44, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 20.45-b01

using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC

Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 2147483648 (2048.0MB) #最大堆内存
NewSize = 536870912 (512.0MB)
MaxNewSize = 536870912 (512.0MB)
OldSize = 5439488 (5.1875MB)
NewRatio = 2
SurvivorRatio = 8
PermSize = 268435456 (256.0MB) #Java虚拟机永久代大小
MaxPermSize = 268435456 (256.0MB) # Java虚拟机永久代大小最大值

Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 483196928 (460.8125MB)
used = 358781568 (342.1607666015625MB)
free = 124415360 (118.6517333984375MB)
74.25162438118812% used
Eden Space:
capacity = 429522944 (409.625MB)
used = 305107592 (290.97327423095703MB)
free = 124415352 (118.65172576904297MB)
71.03406145400233% used
From Space:
capacity = 53673984 (51.1875MB)
used = 53673976 (51.18749237060547MB)
free = 8 (7.62939453125E-6MB)
99.99998509519993% used
To Space:
capacity = 53673984 (51.1875MB)
used = 0 (0.0MB)
free = 53673984 (51.1875MB)
0.0% used
concurrent mark-sweep generation:
capacity = 1610612736 (1536.0MB)
used = 1098425920 (1047.5405883789062MB)
free = 512186816 (488.45941162109375MB)
68.19925705591838% used
Perm Generation:
capacity = 268435456 (256.0MB)
used = 116771736 (111.3622055053711MB)
free = 151663720 (144.6377944946289MB)
43.50086152553558% used

其它参数大家自己去细看吧,我在这里就不一一列举了。

二、配置优化

针对tomcat/conf/server.xml文件进行优化:

1、Connector 连接器优化

默认情况下 Tomcat只支持200线程访问,超过这个数量的连接将被等待,在高并发下肯定是需要进行优化的

打开server.xml文件 找到:

1
2
3
<Connector port="8080" protocol="HTTP/1.1"  
connectionTimeout="20000"
redirectPort="8443" />

修改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
       <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000"
maxKeepAliveRequests="1"
redirectPort="8443"
URIEncoding="UTF-8" />
```xml
executor="tomcatThreadPool" 使用线程池配置

maxKeepAliveRequests="1" 作用是 表示每个连接只响应一次就关闭,这样就不会等待timeout了


2、线程池优化:
在 `<Service name="Catalina">`标签下添加
```xml
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="10" maxSpareThreads="100" acceptCount="200"/>

三、组件优化:

0.0  今天不想写了。  以上内容就写了我1个小时时间。  tomcat组件优化到时候单开一篇文章来写吧。

组件优化 难点主要是 APR的安装和Tomcat Native安装,这俩个会写比较长的篇幅。

以上

End.

支持一下
扫一扫,我会更有动力更新
  • 微信扫一扫
  • 支付宝扫一扫