Tomcat调优

Tomcat之JVM内存查看

tomcat7的user配置

修改tomcat 的config文件夹下的tomcat-users.xml 文件

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<!-- 访问Server Status和Manager App的角色 -->
<role rolename="manager-gui"/>
<!-- 访问Host Manager 的角色 -->
<role rolename="admin-gui"/>
<user username="admin" password="admin" roles="admin-gui,manager-gui"/>
</tomcat-users>

访问网址

访问网址:http://localhost:8080/manager/status
在这里插入图片描述

详解

Tomcat在不设置jvm参数的情况下,默认分配给jvm的内存是总内从的1/4 当前我们电脑是16G内存

JVM参数设置和详细说明

通过命令把jvm的当前参数输出到文件中
打开dos命令
jmap -heap pid 直接输出到dos
jmap -heap pid > D:\4.txt 输出到文件中

jmap -heap 16980 > D:\4.txt

此处的jdkid是16980
在这里插入图片描述

Tomcat之启动优化

标准配置

<Connector 
           port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="600" 
           minSpareThreads="100"
           maxSpareThreads="500"
           acceptCount="700"
           connectionTimeout="20000"
           redirectPort="8443" 
           />
 <!-- 参数说明
			maxThreads:线程池中最大活跃线程数,默认值200(Tomcat7和8都是)
			minSpareThreads:核心线程数,线程池中保持的最小线程数,默认是10
			maxSpareThreads:线程池中保持的最大线程数
			maxIdleTime:线程空闲的最大时间,当空闲超过该值时关闭线程(除非线程数小于minSpareThreads),单位是ms,默认值60000(1分钟)
			acceptCount:线程队列数,默认是100
			URIEncoding:http-get请求中,使用何种字符集对查询字符串进行编码,默认为"iso-8859-1"
 -->          

在这里插入图片描述

复杂配置

注意事项

指定JDK路径动态配置
一般情况下我们都是让Tomcat更具的JAVA_HOME 环境变量自动去找jdk的路径,但是当通过一台服务器有不同的jdk版本久会出问题。我们可以在catalina.bat 脚本中动态设置JAVA_HOME 解决此问题。
在这里插入图片描述

rem myconfig
set JAVA_OPTS=%JAVA_OPTS% -Xmx1024m -Xms1024m
set JAVA_HOME=D:\Program Files\Java\jdk1.7.0_13

查看tomcat的jvm能承受的极限内存可以通过如下命令测试

java -Xmx1211m -version

在这里插入图片描述
由此可以见,我的jvm能够承受的最大内存为1211m

Tomcat之并发优化

简单版配置

#线程池的配置
<Connector 
           port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="600"
           minSpareThreads="100"
           maxSpareThreads="500"
           acceptCount="700"
           connectionTimeout="20000"
           redirectPort="8443" 
           />

复杂版(优化版)

<Connector 	
	port="8080" 
	protocol="org.apache.coyote.http11.Http11NioProtocol"
	URIEncoding="UTF-8"
	minSpareThreads="100"
	maxSpareThreads="500"
	eanableLookups="true"
	disableUploadTimeout="true"
	connectionTimeout="-1"
	acceptCount="700"
	maxThreads="600"
	useURIValidationHack="false"
	compression="on"
	compressionMinSize="2048"
	compressableMineType="text/html,text/xml,text/JavaScript,text/css,text/plain"
	redirectPort="8443"
/>
<!-- 注释说明=======================================================start==	
	port : tomcat作为一个网络server端,它需要暴露一个socket端口来accept客户端的链接,可以通过port指定
	protocol: 网络协议
	URIEncoding:http-get请求中,使用何种字符集对查询字符串进行编码,默认为"iso-8859-1,解决中文乱码问题
	minSpareThreads:最小的备用线程数,tomcat启动时的初始化的线程数,默认是10最小备用线程数,
	maxSpareThreads:最大的备用线程数,一旦创建的线程超过这个值,tomcat久会关闭不再需要的socket线程
	eanableLookups="true":设置为false 使用允许DNS查询,通常情况设置false,表示是否反查域名,为了提高性能我们一般设置为false,如果希望调用request.getRemoteHost()进行DNS查询,以返回远程客户端的实际主机名,将他设置true。
	disableUploadTimeout="true":true:不去给上传的附件单独做超时设置,
	connectionTimeout="-1":-1:表示强链接,永不超时,这样就不用设置文件上传的超时时间了,此参数表示当client与tomcat建立连接之后,在"connectionTimeout"时间之内,仍然没有得到client的请求数据,此时连接将会被断开,默认20s 
	acceptCount:线程队列,默认100,当线程数达到maxThreads就会把线程放在队列中, 当队列满了以后其他请求久会被拒绝,我一般是设置的跟maxThreads一样大,这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。
	maxThreads:客户请求最大线程数,大于这个线程数,就会进入等待队列,线程池的最大线程数,即最大并发,默认为200
	useURIValidationHack="false":减少它对url的不必要的检查从而俭省开销,为提高性能可以设置为false
	compression="on":是否对http相应数据启用Gzip压缩,可选值为"off"或者"on";这是一个值得商榷的参数;如果开启压缩,意味着较少的网络传输量,但是将消耗一定的CPU.如果你		的应用有较高的CPU性能结余,且响应数据均是一些文本字符串,	那么开启压缩,会有较大的收益.(并不是所有的浏览器都能够合理的支持gzip压缩,特别是低版本
	compressionMinSize="2048":压缩包大小为2kb
	compressableMineType="text/html,text/xml,text/JavaScript,text/css,text/plain":压缩类型
	redirectPort="8443"
 注释说明=============================================================end -->

Tomcat之内存优化

set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8  -server -Xmx2048m -Xms2048m -Xss128k -XX:MaxPermSize=512m -XX:PermSize=512m -XX:+DisableExplicitGC -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC

注意:如果设置gc回收方式,如-XX:+UseConcMarkSweepGC,要把XX:NewRatio=2 -XX:SurvivorRatio=8 参数显示的设置一边,以防gc方式影响新生代和老年去的正常比例
在这里插入图片描述
在这里插入图片描述

压力测试

apache的ab压测
ab压测工具:apache的测试工具,用的是ab.exe 所以叫ab压测
优点:给出重要的信息,如吞吐量,并发等
官方下载地址:https://www.apachehaus.com/cgi-bin/download.plx
简单使用:下载后解压到适当位置。
JMeter工具压力测试(推荐,可以看图标)
http://jmeter-plugins.org/downloads/all/

Tomcat之BIO/NIO/APR的三大模式

4种socket链接方式

org.apache.coyote.http11.Http11Protocol		:BIO
org.apache.coyote.http11.Http11NioProtocol	:NIO
org.apache.coyote.http11.Http11Nio2Protocol	:NIO2
org.apache.coyote.http11.Http11AprProtocol	:APR
 <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />

BIO、NIO、AIO、APR适用场景分析:

BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

APR方式 Apache HTTP服务器的支持库。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。

最佳实战

在catlina的rem Guess CATALINA_HOME if not defined 之前配置

rem myconfig
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8  -server -Xmx2048m -Xms2048m -Xss128k -XX:MaxPermSize=512m -XX:PermSize=512m -XX:+DisableExplicitGC -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
set JAVA_HOME=D:\Program Files\Java\jdk1.7.0_13

在tomcat的config/server.xml 中配置Connector

   <!-- 复杂版 -->
<Connector 	
	port="8080" 
	protocol="org.apache.coyote.http11.Http11NioProtocol"
	URIEncoding="UTF-8"
	minSpareThreads="100"
	maxSpareThreads="500"
	eanableLookups="true"
	disableUploadTimeout="true"
	connectionTimeout="-1"
	acceptCount="700"
	maxThreads="600"
	maxProcessors="1000"
	minProcessors="5"
	useURIValidationHack="false"
	compression="on"
	compressionMinSize="2048"
	compressableMineType="text/html,text/xml,text/JavaScript,text/css,text/plain"
	redirectPort="8443"
/>
<!-- 注释说明=======================================================start==	
	port : tomcat作为一个网络server端,它需要暴露一个socket端口来accept客户端的链接,可以通过port指定
	protocol: 网络协议
	URIEncoding:http-get请求中,使用何种字符集对查询字符串进行编码,默认为"iso-8859-1,解决中文乱码问题
	minSpareThreads:最小的备用线程数,默认是10
	maxSpareThreads:最大的备用线程数,一旦创建的线程超过这个值,tomcat久会关闭不再需要的socket线程
	eanableLookups="true":设置为false 使用允许DNS查询,通常情况设置false,表示是否反查域名,为了提高性能我们一般设置为false,如果希望调用request.getRemoteHost()进行DNS查询,以返回远程客户端的实际主机名,将他设置true。
	disableUploadTimeout="true":true:不去给上传的附件单独做超时设置,
	connectionTimeout="-1":-1:表示强链接,永不超时,这样就不用设置文件上传的超时时间了,此参数表示当client与tomcat建立连接之后,在"connectionTimeout"时间之内,仍然没有得到client的请求数据,此时连接将会被断开,默认20s 
	acceptCount:线程队列,默认100,当线程数达到maxThreads就会把线程放在队列中, 当队列满了以后其他请求久会被拒绝
	maxThreads:线程池的最大线程数,即最大并发,默认为200
	maxProcessors="1000":同时最大的处理线程数,如果系统中已经有这么多个线程,那么,更多的链接请求会进入队列。
	minProcessors="5":最小处理线程数,即没有任何http请求时,tomcat也保持至少这么多线程以等待处理。
	useURIValidationHack="false":减少它对url的不必要的检查从而俭省开销,为提高性能可以设置为false
	compression="on":是否对http相应数据启用Gzip压缩,可选值为"off"或者"on";这是一个值得商榷的参数;如果开启压缩,意味着较少的网络传输量,但是将消耗一定的CPU.如果你		的应用有较高的CPU性能结余,且响应数据均是一些文本字符串,	那么开启压缩,会有较大的收益.(并不是所有的浏览器都能够合理的支持gzip压缩,特别是低版本
	compressionMinSize="2048":压缩包大小为2kb
	compressableMineType="text/html,text/xml,text/JavaScript,text/css,text/plain":压缩类型
	redirectPort="8443"
 注释说明=============================================================end --> 

在tomcat/config/tomcat-users.xml 中 配置

<tomcat-users>
<!-- 访问Server Status和Manager App的角色 -->
<role rolename="manager-gui"/>
<!-- 访问Host Manager 的角色 -->
<role rolename="admin-gui"/>
<user username="admin" password="admin" roles="admin-gui,manager-gui"/>
</tomcat-users>

其他一些注意事项

linux 的安装目录里面不许有空格,不许有中文,服务器的台数一般是2的n次方倍数,最大设置为总内存的3/4
32位的linux操作系统内存会受限,最大4G,所以一定要装64位的系统
正向代理:我知道代理地址
反向代理:我不知道代理地址
webService:一通信协议
webServer:web服务器,如ngix
appServer:应用服务器,如tomcat

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是Tomcat调优面试题的答案: 1. Tomcat的缺省端口是多少,怎么修改? Tomcat的缺省端口是8080,可以通过修改server.xml文件中的Connector节点来修改端口号。 2. tomcat 有哪几种Connector 运行模式(优化)? Tomcat有三种Connector运行模式:BIO、NIO和APR。其中,BIO是传统的阻塞式I/O模式,NIO是非阻塞式I/O模式,APR是使用本地库实现的高性能模式。 3. Tomcat有几种部署方式? Tomcat有两种部署方式:WAR包部署和目录部署。WAR包部署是将应用程序打包成WAR包,然后将WAR包放到Tomcat的webapps目录下;目录部署是将应用程序解压到Tomcat的webapps目录下。 4. tomcat容器是如何创建servlet类实例?用到了什么原理? Tomcat容器在启动时会扫描web.xml文件,将其中的servlet类加载到内存中,并创建servlet实例。Tomcat使用Java反射机制来创建servlet实例。 5. tomcat 如何优化? Tomcat的优化可以从多个方面入手,包括内存调优、垃圾回收策略调优、共享session处理、添加JMS远程监控、使用专业的分析工具等。 6. 内存调优 可以通过调整JVM内存参数来进行内存调优,例如-Xms和-Xmx参数可以分别设置JVM的初始内存和最大内存。 7. 垃圾回收策略调优 可以通过调整JVM的垃圾回收策略来进行垃圾回收策略调优,例如使用CMS垃圾回收器或G1垃圾回收器。 8. 共享session处理 可以使用集中式session管理方案,例如使用Redis等缓存服务器来存储session数据,从而实现session共享。 9. 添加JMS远程监控 可以使用JMX来进行远程监控,例如使用JConsole等工具来监控Tomcat的运行状态。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值