网站首页 > 技术文章 正文
背景与描述
描述
本文的目的在于优化Web Application容器的性能,提高运行效率,访问速度。
术语解释
JVM:Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
适用范围
开发、测试、实施
参数配置说明
Tomcat有安装版的和免安装版两种,推荐选用安装版。
安装版Tomcat配置
安装Tomcat
背景描述
当一台服务器部署多个Tomcat时,必须保证不同的Tomcat之间至少如下三个端口互不相同:
- Web访问端口不同,默认为8080端口。
- Shutdown端口不同,默认为8005端口。
- AJP启动端口不同,默认为8009端口。
查看端口是否被占用的命令为:netstat -an|grep端口号。
操作步骤
- 步骤1:在Windows客户端,获取Tomcat安装文件“apache-tomcat-8.0.28.exe”。
- 步骤2:解压“apache-tomcat-8.0.28.exe”文件。
修改Tomcat配置文件
- 步骤1:进入“apache-tomcat-8.0.28/conf”目录。
- 步骤2:编辑“server.xml”文件,详细修改内容如下:
将标红部分的内容修改为实际规划的端口号,并增加“URIEncoding="UTF-8"”。
配置SHUTDOWN端口号
<Server port="8005" shutdown="SHUTDOWN">
配置Web访问端口号
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="30000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
配置AJP启动端口号
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
- 步骤3:保存并退出。
修改Tomcat内存
背景信息描述
修改Tomcat内存,是为了防止内存不足的问题出现。
服务器4G内存推荐配置
下面是使用服务形式启动tomcat7.0的内存配置方法:
- 步骤1:C:\Program Files\Apache Software Foundation\Tomcat 7.0\bin下打开tomcat7w.exe,切换到java选项卡,如图1.1.3.2.1
- 步骤2:在Java Options选项的最后面设置(这个和修改注册表的效果一样),如图2:
Inital memory Pool 为 512
Maximum memory Pool 为 1024
-XX:PermSize=128m -XX:MaxPermSize=256m(此项谨慎使用,有可能导致tomcat无法启动)
-Xms1024m
-Xmx1024m
点击”应用”,然后点击”确定”,重启tomcat生效。
服务器8G内存推荐配置
下面是使用服务形式启动tomcat7.0的内存配置方法:
C:\Program Files\Apache Software Foundation\Tomcat 7.0\bin下打开tomcat7w.exe,切换到java选项卡,如图1
- 步骤1:在Java Options选项的最后面设置(这个和修改注册表的效果一样)
Inital memory Pool 为 1024
Maximum memory Pool 为 2048
-XX:PermSize=128m -XX:MaxPermSize=256m
Inital memory Pool 为 1024
Maximum memory Pool 为 2048
-XX:PermSize=256m -XX:MaxPermSize=1024m
-Xms1024m -Xmx1024m
点击”应用”,然后点击”确定”,重启tomcat生效。
免安装版Tomcat配置
安装Tomcat
背景描述
当一台服务器部署多个Tomcat时,必须保证不同的Tomcat之间至少如下三个端口互不相同:
Web访问端口不同,默认为8080端口。
Shutdown端口不同,默认为8005端口。
AJP启动端口不同,默认为8009端口。
查看端口是否被占用的命令为:netstat -an|grep端口号。
Web访问端口不同,默认为8888端口。
Shutdown端口不同,默认为8005端口。
AJP启动端口不同,默认为8009端口。
查看端口是否被占用的命令为:netstat -an|grep端口号。
操作步骤
- 步骤1:在Windows客户端,获取Tomcat安装文件“apache-tomcat-8.0.28.rar”。
- 步骤2:解压“apache-tomcat-8.0.28.rar”文件。
修改Tomcat端口号
- 步骤1:进入“apache-tomcat-8.0.28/conf”目录。
- 步骤2:编辑“server.xml”文件。
将标红部分的内容修改为实际规划的端口号,并增加“URIEncoding="UTF-8"”。
配置SHUTDOWN端口号
<Server port="8005" shutdown="SHUTDOWN">
配置Web访问端口号
<Connector port="8888" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="30000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
配置AJP启动端口号
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
- 步骤3:保存并退出。
修改Tomcat内存
背景描述
修改Tomcat内存,是为了防止内存不足的问题出现。
服务器4G内存推荐配置
- 步骤1:进入“apache-tomcat-8.0.28/bin”目录。
- 步骤2:编辑“catalina.bat”文件。
根据实际情况设置Tomcat内存大小,添加如下内容:
在echo Using CATALINA_BASE: "%CATALINA_BASE%"的上面一行加下面代码:
set JAVA_OPTS=-Xms512m –Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m ;各参数含义说明如下:
- Xms:初始值
- Xmx:最大值
- Xmn:最小值
- XX:PermSize:设定内存的永久保存区域
- XX:MaxPermSize:设定最大内存的永久保存区域
- 步骤3:保存并退出。
服务器8G内存推荐配置
- 步骤1:进入“apache-tomcat-8.0.28/bin”目录。
- 步骤2:编辑“catalina.bat”文件。
根据实际情况设置Tomcat内存大小,添加如下内容:
在echo Using CATALINA_BASE: "%CATALINA_BASE%"的上面一行加下面代码:
set JAVA_OPTS=-Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m ;各参数含义说明如下:
- Xms:初始值
- Xmx:最大值
- Xmn:最小值
- XX:PermSize:设定内存的永久保存区域
- XX:MaxPermSize:设定最大内存的永久保存区域
步骤3:保存并退出。
Tomcat性能优化
因为前面几个章节已经提到了关于JVM的优化,因此,这里只讲TOMCAT的线程优化、IO优化、缓存压缩技术。
- 详细配置信息
<Connector URIEncoding="UTF-8" acceptCount="600" connectionTimeout="20000" enableLookups="false" executor="tomcatThreadPool" maxProcessors="1200" minProcessors="300" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"
compression="on" compressableMimeType="text/html,text/xml,application/javascript,text/css,text/plain,image/gif, image/jpg,image/png" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata" useSendfile="false" />
<Executor maxIdleTime="300000" maxSpareThreads="1200" maxThreads="1200" minSpareThreads="200" name="tomcatThreadPool" namePrefix="catalina-exec-"/>
- 线程优化
- maxThreads="X" 表示最多同时处理X个连接;
- minSpareThreads="X" 初始化X个连接;
- maxSpareThreads="X" 表示如果最多可以有X个线程,一旦超过X个,则会关闭不再需要的线程;
- acceptCount="X" 当同时连接的人数达到maxThreads时,还可以排队,队列大小为X.超过X就不处理。
- IO优化
对于IO的优化,主要指的是Tomcat连接器上配置的协议protocol,Tomcat的配置文件server.xml文件默认的连接器Connector的协议protocol=”HTTP/1.1”,也就是采用的同步阻塞方式BIO。下面详细讲述下各个IO的特点:
- 同步阻塞IO(JAVA BIO) 同步并阻塞,服务器实现模式为一个连接一个线程(one connection one thread 想想都觉得恐怖,线程可是非常宝贵的资源),当然可以通过线程池机制改善。
- JAVA NIO:又分为同步非阻塞IO,异步阻塞IO 与BIO最大的区别one request one thread.可以复用同一个线程处理多个connection(多路复用)。
- 异步非阻塞IO(Java NIO2又叫AIO) 主要与NIO的区别主要是操作系统的底层区别.可以做个比喻:比作快递,NIO就是网购后要自己到官网查下快递是否已经到了(可能是多次),然后自己去取快递;AIO就是快递员送货上门了(不用关注快递进度)。
BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。
当前,我们采用的是NIO,它可以多路复用,且异步处理。生产服务器亦采用该方式。protocol="org.apache.coyote.http11.Http11NioProtocol"
- 压缩缓存技术
其中,以下几个属性是开启GZIP压缩技术(需浏览器支持,当前的谷歌、火狐浏览器均支持)
要使用gzip压缩功能,可以在Connector实例中加上如下属性:
- compression="on" 打开压缩功能;
- compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB;
- noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩&<60;
- compressableMimeType=" text/html,text/xml,application/javascript,text/css,text/plain,image/gif, image/jpg,image/png" 压缩类型。
Eclipse中JVM配置
开发人员在开发过程中经常需要调试程序,通过配置tomcat服务,添加需要试的Web Application,在调试过程中经常会遇到内存溢出的异常问题,这里将介绍通过配置JVM参数,来解决该问题。如图所示:
配置检测
从2.1到2.3分别介绍了JVM的配置说明,但是上面的配置是否有效呢?大家可通过jdk自带的工具jvisualvm.exe来检测你的设置是否生效。
jvisualvm.exe可执行文件的路径在你的电脑的jdk安装目录下(如:C:\Program Files\Java\jdk1.7.0_45\bin)。那么如何检测呢?点击运行jvisualvm.exe,如图3所示,图3中显示的参数设置是通过见图2的设置:
图 3
图4中展示了当前正在运行的Tomcat服务的JVM参数配置
图 4
猜你喜欢
- 2024-09-23 Kubernetes笔记(五):了解Pod(容器组)
- 2024-09-23 一次性教你彻底理解 Spring容器和应用上下文
- 2024-09-23 互联网Web服务容器:Tomcat8解析及性能优化
- 2024-09-23 Servlet容器:在Web应用程序中的关键组件
- 2024-09-23 容器和虚拟机到底有啥区别?(容器和虚拟机利用的实现方式是一样的)
- 2024-09-23 Springboot实战实践:从基础到源码深入了解springboot(PDF版)
- 2024-09-23 1Panel docker容器版-1分钟部署 WEB在线版Telnet SSH工具sshwifty
- 2024-09-23 Spring源码探究:容器(spring容器组成模块)
- 2024-09-23 大厂都在玩的容器技术到底是什么?
- 2024-09-23 超级详细Spring源码探究:容器!!(spring源码深度解析(第2版))
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 569℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 511℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 485℃启用MySQL查询缓存(mysql8.0查询缓存)
- 468℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 447℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 445℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)