文档章节

生产环境入门: Tomcat的基本优化【一】

weiliu007
 weiliu007
发布于 2016/09/29 09:06
字数 1395
阅读 98
收藏 5
java -Xms512m -Xmx512m -jar my.jar

Tomcat默认的配置已经是经过优化的了,留给我们可优化的空间很小,我     们主要能调整的是:跟具体使用场景相关的设置,大致有:

1:合理分配Tomcat需要的内存     这个是在启动Tomcat的时候设置catalina.sh中的JAVA_OPTS,常见设置如下:

(1)-server:启用JDK的Server版

(2)-Xms:虚拟机初始化时的最小内存

(3)-Xmx:虚拟机可使用的最大内存(建议到物理内存的80%)

(4)-XX:PermSize:持久代初始值

(5)-XX:MaxPermSize:持久代最大内存(默认是32M)

(6)-XX:MaxNewSize:新生代内存的最大内存(默认是16M)

说明:

(1)一般设置-Xms、-Xmx相等以避免在每次GC后调整堆的大小。因为默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制
(2)察看配置是否生效:jmap  -heap  tomcat的进程号

2:Tomcat本身的配置优化     在server.xml中的  <Connector>中配置,常见设置如下:

(1)maxConnections  :最大连接数,对BIO模式,默认等于maxThreads  ;对NIO默认10000;     对APR/native默认8192

(2)maxThreads:最大线程数,即同时处理的任务个数,默认值为200

(3)acceptCount:当处理任务的线程数达到最大时,接受排队的请求个数,默认100

(4)minSpareThreads:最小空闲线程数,默认10

(5)compression  :设置是否开启GZip压缩

(6)compressableMimeType:哪些类型需要压缩,默认是text/html,text/xml,text/plain

(7)compressionMinSize:启用压缩的输出内容大小,默认为2048

(8)enableLookups:是否反查域名,为了提高处理能力,应设置为  false

(9)connectionTimeout:网络连接超时,单位毫秒。设置为  -1  表示永不超时,通常可设置  为2000毫秒。

   说明:

(1)如果要加大并发连接数,应同时加大maxThreads和acceptCount,可以两个设置一样

(2)WebServer允许的最大连接数还受制于操作系统的内核参数设置,可通过ulimit  -a  查看

(3)如果配置了<Executor>,在<Connector>中通过executor属性指定参照<Executor>,那么     <Connector>中关于线程的配置失效,以<Executor>中配置为准

3:关于BIO/NIO/APR

(1)BIO是最稳定最老的一个连接器,是采用阻塞的方式,意味着每个连接线程绑定到每个     Http请求,直到获得Http响应返回,如果Http客户端请求的是keep-Alive连接,那么这些     连接也许一直保持着直至达到timeout时间,这期间不能用于其它请求。

(2)NIO是使用Java的异步IO技术,不做阻塞,要使用的话,直接修改server.xml里的     Connector节点,修改protocol为  :     protocol="org.apache.coyote.http11.Http11NioProtocol"

(3)APR是使用原生C语言编写的非堵塞I/O,但是需要安装apr和native,直接启动就支持     apr,能大幅度提升性能。使用时指定protocol为     protocol=“org.apache.coyote.http11.Http11AprProtocol”  。     可以到http://apr.apache.org/download.cgi去下载,大致的安装步骤如下:

A:安装apr     ./configure  --prefix=/usr/local/apr     make    make  install

B:安装apr-iconv     ./configure  --prefix=/usr/local/apr-iconv  --with-apr=/usr/local/apr

make make install

C:安装apr-util     ./configure  --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr  --with-apr-     iconv=/usr/local/apr-iconv/bin/apriconv     make    make  install

D:安装tomcat-native  ,就在Tomcat的bin下自带     tar  zxvf  tomcat-native.tar.gz     cd  tomcat-native-1.1.29-src/jni/native     ./configure  --with-apr=/usr/local/apr     make    make  install

 E:设置  apr  的环境变量     进入Tomcat的bin路径下,打开catalina.sh,在文件的#!/bin/sh下添加如下内容:     LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib  export  LD_LIBRARY_PATH             这样就只是给这个TOMCAT添加了APR,不破坏其它TOMCAT的配置 G:重新启动Tomcat,查看日志信息,应该有类似如下的信息:     org.apache.catalina.core.AprLifecycleListener.init  Loaded  APR  based  Apache     Tomcat  Native  library  1.1.29  using  APR  version  1.5.0.

 

优化主要是对Tomcat做的,主要有几方面:

1、在bin/catalina.bat文件中加入下面参数,对JVM进行优化,至于这一大驼参数的作用及说明,大家到网上找找,应该有很多的,如:http://www.mzone.cc/article/321.html

set JAVA_OPTS=
-server 
-Xms1000M 
-Xmx1000M   #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
-Xss512k 
-XX:+AggressiveOpts 
-XX:+UseBiasedLocking 
-XX:PermSize=64M 
-XX:MaxPermSize=300M 
-XX:+DisableExplicitGC 
-XX:MaxTenuringThreshold=31 
-XX:+UseConcMarkSweepGC 
-XX:+UseParNewGC  
-XX:+CMSParallelRemarkEnabled 
-XX:+UseCMSCompactAtFullCollection 
-XX:LargePageSizeInBytes=128m  
-XX:+UseFastAccessorMethods 
-XX:+UseCMSInitiatingOccupancyOnly 
-Djava.awt.headless=true

上述这样的配置,基本上可以达到:系统响应时间增快,JVM回收速度增快同时又不影响系统的响应率
,JVM内存最大化利用,线程阻塞情况最小化.


Tomcat连接参数的优化,主要是针对吞吐量做优化:

修改conf/server.xml文件,把原来

<Connector port="8080" protocol="HTTP/1.1" /> 

修改协议,修改最大线程,开启tomcat的gzip等等

改成下面的内容

<Connector port="8080" protocol="HTTP/1.1"
           URIEncoding="UTF-8"  
           minSpareThreads="25" 
           maxSpareThreads="75"
           enableLookups="false" 
           disableUploadTimeout="true" 
           connectionTimeout="20000"
           acceptCount="1500"   
           maxThreads="1500" 
           maxProcessors="1000" 
           minProcessors="5"
           useURIValidationHack="false"
           compression="on" 
           compressionMinSize="1024"
           compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
           redirectPort="8443"/>

Tomcat中Java垃圾收集调优(JVM垃圾收集器如何选择?):

http://blog.csdn.net/aisoo/article/details/8263841

长连接和短连接的性能测试:

http://blog.csdn.net/ystyaoshengting/article/details/49300003

tomcat长连接、短连接配置及用途:

http://blog.csdn.net/ystyaoshengting/article/details/49512069

什么时候用长连接,短连接?(下面博文最后面)

http://www.cnblogs.com/0201zcr/p/4694945.html

Tomcat的四种基于HTTP协议的Connector性能比较:
http://www.cnblogs.com/sunxucool/p/3227366.html

Tomcat 7优化前及优化后的性能对比:
http://my.oschina.net/lianss/blog/272230?fromerr=rcI9PseP#OSC_h2_1

© 著作权归作者所有

weiliu007
粉丝 16
博文 171
码字总数 84810
作品 0
深圳
程序员
私信 提问
民工哥公众号linux系统学习线路图大全

民工哥公众号linux系统学习线路图大全 <-----------点击链接进入 友侃有笑公众号Linux学习路线图 1、基础篇 Linux 基础优化配置 Linux系统根目录结构介绍 linux系统重要子目录介绍 Linux文件...

民工哥
2017/08/30
0
0
【IDE】eclipse与Idea

前言 工欲善其事必先利其器,今天来梳理一下IDE的学习,此篇博客中实用性的知识比较少,主要是梳理学习一个新IDE的思路。以至于接触新东西时手忙脚乱。 (一) Idea:参考《Intellij+IDEA2017...

binggetong
2018/05/07
0
0
应用软件学习总结(包括监控,自动化运维工具,WEB服务等)

应用软件学习总结 目录 版本控制系统 SVN部署及使用 Git从入门到熟悉 监控系统 一健安装Zabbix 自动化运维工具 Ansible自动化运维工具安装及使用 VPN专线 PPTP服务器端部署到客户端连接使用 ...

yht_1990
2016/07/19
0
0
tomcat部署最佳实践(一)

Tomcat部署最佳实践 标签: linux 笔者Q:972581034 交流群:605799367。有任何疑问可与笔者或加群交流 tomcat是玩web软件必会技能之一,今天我给大家介绍一下tomcat的部署,监控以及调优。 ...

陈天刚
2017/04/24
0
0
轻量级 RPC 框架 - Motan

概述 Motan 是一套高性能、易于使用的分布式远程服务调用(RPC)框架。 功能 支持通过spring配置方式集成,无需额外编写代码即可为服务提供分布式调用能力。 支持集成consul、zookeeper等配置服...

fingki_li
2016/04/25
21.1K
11

没有更多内容

加载失败,请刷新页面

加载更多

VMware vSphere ESXi主机的访问控制

在vShpere中,访问ESXi主机的途径很多,如下: ESXi DCUI ESXi Shell ESXi SSH ESXi Host Client vCenter --> vSphere web client / vSphere Client VMware vSphere ESXi主机的访问控制,除了......

大别阿郎
26分钟前
3
0
大神讲解CGI、FastCGI和PHP-FPM关系图解

参考资料 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM:http://www.nowamagic.net/librarys/veda/detail/1319 php中fastcgi和php-fpm是什么东西:https://www.zybuluo.com/phper/note/50231 ......

网络小虾米
35分钟前
3
0
《DNS攻击防范科普系列3》 -如何保障 DNS 操作安全

引言 前两讲我们介绍了 DNS 相关的攻击类型,以及针对 DDoS 攻击的防范措施。这些都是更底层的知识,有同学就来问能否讲讲和我们的日常操作相关的知识点,今天我们就来说说和我们日常 DNS 操...

Mr_zebra
36分钟前
3
0
zk中ServerCnxn

实现接口Stats, Watcher 内部类 DisconnectReason CloseRequestException EndOfStreamException(流关闭) 属性 方法 getSessionTimeout 获取session失效时间 sendResponse 发送回复数据 se......

writeademo
41分钟前
3
0
如何将 Redis 用于微服务通信的事件存储

来源:Redislabs 作者:Martin Forstner 翻译:Kevin (公众号:中间件小哥) 以我的经验,将某些应用拆分成更小的、松耦合的、可协同工作的独立逻辑业务服务会更易于构建和维护。这些服务(也...

中间件小哥
44分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部