IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Tomcat调优 -> 正文阅读

[Java知识库]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"
	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:最小的备用线程数,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:线程池的最大线程数,即最大并发,默认为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之内存优化

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

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:04:45  更:2021-08-25 12:04:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 8:45:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码