设为首页 收藏本站
查看: 2019|回复: 0

[经验分享] tomcat服务器配置优化

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-20 08:31:44 | 显示全部楼层 |阅读模式
一.Tomcat内存优化

T omcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catalina.sh 中设置 JAVA_OPTS参数。

1.JAVA_OPTS参数说明

-server  启用jdk 的 server 版;  

-Xms    java虚拟机初始化时的最小内存;  

-Xmx   java虚拟机可使用的最大内存;  

-XX:PermSize    内存永久保留区域  

-XX:MaxPermSize   内存最大永久保留区域

服务器参数配置
QQ截图20150420082750.png


现公司服务器内存一般都可以加到最大2G ,所以可以采取以下配置:

JAVA_OPTS='-Xms1024m -Xmx2048m -XX:PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m'  

配置完成后可重启Tomcat ,通过以下命令进行查看配置是否生效:

1.  首先查看Tomcat 进程号:   

   QQ截图20150420082759.png


我们可以看到Tomcat 进程号是 12145 。

  • 查看是否配置生效:


jmap  – heap 12145   

QQ截图20150420082823.png


我们可以看到MaxHeapSize 等参数已经生效。、

二.Tomcat并发优化

1.Tomcat连接相关参数

在Tomcat 配置文件 server.xml 中的 <Connector ... /> 配置中

1.参数说明

minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为 10

maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为 75

acceptCount:允许的最大连接数,应大于等于 maxProcessors ,默认值为 100

enableLookups:是否反查域名,取值为: true 或 false 。为了提高处理能力,应设置为 false

connectionTimeout:网络连接超时,单位:毫秒。设置为 0 表示永不超时,这样设置有隐患的。通常可设置为30000 毫秒。

其中和最大连接数相关的参数为maxProcessors 和 acceptCount 。如果要加大并发连接数,应同时加大这两个参数。

web server允许的最大连接数还受制于操作系统的内核参数设置,通常 Windows 是 2000 个左右, Linux 是1000 个左右。

2.Tomcat中的配置示例

1. <Connector port="9027"   

2.   

3.                 protocol="HTTP/1.1"  

4.   

5.                 maxHttpHeaderSize="8192"  

6.   

7.                 minProcessors="100"  

8.   

9.                 maxProcessors="1000"  

10.  

11.                acceptCount="1000"  

12.  

13.                redirectPort="8443"  

14.  

15.                disableUploadTimeout="true"/>   


2.调整连接器connector的并发处理能力

1.参数说明

maxThreads  客户请求最大线程数

minSpareThreads    Tomcat初始化时创建的 socket 线程数

maxSpareThreads   Tomcat连接器的最大空闲 socket 线程数

enableLookups      若设为true, 则支持域名解析,可把 ip 地址解析为主机名

redirectPort        在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口

acceptAccount       监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads  )

connectionTimeout   连接超时

minProcessors         服务器创建时的最小处理线程数

maxProcessors        服务器同时最大处理线程数

URIEncoding    URL统一编码


2.Tomcat中的配置示例

1. <Connector port="9027"   

2.   

3.                 protocol="HTTP/1.1"  

4.   

5.                 maxHttpHeaderSize="8192"  

6.   

7.                 maxThreads="1000"  

8.   

9.                 minSpareThreads="100"  

10.  

11.                maxSpareThreads="1000"  

12.  

13.                minProcessors="100"  

14.  

15.                maxProcessors="1000"  

16.  

17.                enableLookups="false"  

18.  

19.                URIEncoding="utf-8"  

20.  

21.                acceptCount="1000"  

22.  

23.                redirectPort="8443"  

24.  

25.                disableUploadTimeout="true"/>  


3.Tomcat缓存优化

1.参数说明

compression 打开压缩功能   

compressionMinSize   启用压缩的输出内容大小,这里面默认为2KB

compressableMimeType 压缩类型

connectionTimeout 定义建立客户连接超时的时间. 如果为 -1, 表示不限制建立客户连接的时间

2.Tomcat中的配置示例

1. <Connector port="9027"   

2.   

3.                 protocol="HTTP/1.1"  

4.   

5.                 maxHttpHeaderSize="8192"  

6.   

7.                 maxThreads="1000"  

8.   

9.                 minSpareThreads="100"  

10.  

11.                maxSpareThreads="1000"  

12.  

13.                minProcessors="100"  

14.  

15.                maxProcessors="1000"  

16.  

17.                enableLookups="false"  

18.  

19.                compression="on"  

20.  

21.                compressionMinSize="2048"                 

22.  

23.                compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"  

24.  

25.                connectionTimeout="20000"  

26.  

27.                URIEncoding="utf-8"  

28.  

29.                acceptCount="1000"  

30.  

31.                redirectPort="8443"  

32.  

33.                disableUploadTimeout="true"/>  


4.参考配置

1.旧有的配置

参考网络对服务器做过如下配置,拿出来分享下:


1. <Connector port="9027"   

2.   

3. protocol="HTTP/1.1"   

4.   

5.                 maxHttpHeaderSize="8192"  

6.   

7.                 maxThreads="1000"  

8.   

9.                 minSpareThreads="25"  

10.  

11.                maxSpareThreads="75"  

12.  

13.                enableLookups="false"  

14.  

15.                compression="on"  

16.  

17.                compressionMinSize="2048"  

18.           

19.                compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"  

20.  

21.                connectionTimeout="20000"  

22.  

23.                URIEncoding="utf-8"  

24.  

25.                acceptCount="200"  

26.  

27.                redirectPort="8443"  

28.  

29.                disableUploadTimeout="true" />  


后来发现在访问量达到3 百万多的时候出现性能瓶颈。

2.更改后的配置

1. <Connector port="9027"   

2.   

3.                 protocol="HTTP/1.1"  

4.   

5.                 maxHttpHeaderSize="8192"  

6.   

7.                 maxThreads="1000"  

8.   

9.                 minSpareThreads="100"  

10.  

11.                maxSpareThreads="1000"  

12.  

13.                minProcessors="100"  

14.  

15.                maxProcessors="1000"  

16.  

17.                enableLookups="false"  

18.  

19.                compression="on"  

20.  

21.                compressionMinSize="2048"  

22.  

23.                compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"  

24.  

25.                connectionTimeout="20000"  

26.  

27.                URIEncoding="utf-8"  

28.  

29.                acceptCount="1000"  

30.  

31.                redirectPort="8443"  

32.  

33.                disableUploadTimeout="true"/>  


性能有待观察中 ……

5.tomcat数据库连接池的参考配置

1.平台的配置

wKioL1UzwuuixjHWAADLuYSOkpQ680.jpg

1.  <!--name:DataSource的名称-->  

2.   <!--type:数据源对应的java类型,一般设计为javax.sql.DataSource-->  

3.   <!--username:数据库登陆名-->  

4.   <!--password:数据库登陆密码-->  

5.   <!--driverClassName:指定数据库JDBC驱动程序-->  

6.   <!--url:指定数据库的URL-->  

7.   <!--maxIdle:连接池处于空闲状态的数据库连接的最大数目,取0表示不受限制-->  

8.   <!--maxWait:连接池中数据库连接处于空闲状态的最长时间(以毫秒为单位),取0表示无限制等待时间-->  

9.   <!--maxActive:连接池处于活动状态的数据库连接的最大数目,去0表示不受限制-->  

  • 2.    优化文档


<Resource name="jdbc/books"
auth="Container"type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="sa" password="120010"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=news"/>

参数含义: JNDI (java naming and directory interface): Java 命名和目录接口

maxActive="100"

表示并发情况下最大可从连接池中获取的连接数。如果数据库不是单独,供一个应用使用,通过设置maxActive参数可以避免某个应用无限制的获取连接对其他应用造成影响,如果一个数据库只是用来支持一个应用那么maxActive理论上可以设置成该数据库可以支撑的最大连接数。maxActive只是表示通过连接池可以并发的获取的最大连接数。连接的获取与释放是双向,当应用程序并发请求连接池时,连接池就需要从数据库获取连接,那么但应用程序使用完连接并将连接归还给连接池时,连接池是否也同时将连接归还给数据库呢?很显然答案是否定的,如果那样的话连接池就变得多此一举,不但不能提高性能,反而会降低性能,那么但应用成归还连接后,连接池如何处理呢?

maxIdle="30"

如果在并发时达到了maxActive=100,那么连接池就必须从数据库中获取100个连接来供应用程序使用,当应用程序关闭连接后,由于maxIdle=30,因此并不是所有的连接都会归还给数据库,将会有30个连接保持在连接池种中,状态为空闲。

minIdle=”2”

最小默认情况下并不生效,它的含义是当连接池中的连接少有minIdle,系统监控线程将启动补充功能,一般情况下我们并不启动补充线程。

问题:如何设置maxActive和maxIdle?

理论上讲maxActive应该设置成应用的最大并发数,这样一来即便是在最大并发的情况下,应用依然能够从连接池中获取连接,但是困难时的是我们很难准确估计到最大并发数,设置成最大并发数是一种最优的服务质量保证,事实上,如果某个用户登录提示系统繁忙,那么在他再次登录时,可能系统资源已经充足,对于拜特资金管理系统我们建议将maxActive设置为系统注册人数的十分之一到二十分之一之间。例如系统的注册人数为1000,那么设置成50-100靠近100的数字,例如85或90。

maxIdle对应的连接,实际上是连接池保持的长连接,这也是连接池发挥优势的部分,理论上讲保持较多的长连接,在应用请求时可以更快的响应,但是过多的连接保持,反而会消耗数据库大量的资源,因此maxIdle也并不是越大越好,同上例我们建议将 maxIdle设置成

50-100中靠近50的数字,例如55。这样就能在兼顾最大并发同时,保持较少的数据库连接,而且在绝大多情况,能够为应用程序提供最快的相应速度。

removeAbandoned="true"

removeAbandonedTimeout="60"

logAbandoned="true"

有时粗心的程序编写者在从连接池中获取连接使用后忘记了连接的关闭,这样连池的连接就会逐渐达到maxActive直至连接池无法提供服务。现代连接池一般提供一种“智能”的检查,但设置了removeAbandoned="true"时,当连接池连接数到达(getNumIdle() < 2) and (getNumActive() >getMaxActive() - 3)时便会启动连接回收,那种活动时间超过removeAbandonedTimeout="60"的连接将会被回收,同时如果logAbandoned="true"设置为true,程序在回收连接的同时会打印日志。removeAbandoned是连接池的高级功能,理论上这中配置不应该出现在实际的生产环境,因为有时应用程序执行长事务,可能这种情况下,会被连接池误回收,该种配置一般在程序测试阶段,为了定位连接泄漏的具体代码位置,被开启,生产环境中连接的关闭应该靠程序自己保证。







运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58624-1-1.html 上篇帖子: Linux下设置监控tomcat端口脚本,优化版 下篇帖子: tomcat服务脚本 服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表