【Tomcat】Tomcat配置与优化(内存、并发、管理)【自己配置】

一、JVM内存配置优化

主要通过以下的几个jvm参数来设置堆内存的:
-Xmx512m     最大总堆内存,一般设置为物理内存的1/4
-Xms512m     初始总堆内存,一般将它设置的和最大堆内存一样大,这样就不需要根据当前堆使用情况而调整堆的大小了
-Xmn192m     年轻带堆内存,sun官方推荐为整个堆的3/8
堆内存的组成     总堆内存 = 年轻带堆内存 + 年老带堆内存 + 持久带堆内存
年轻带堆内存     对象刚创建出来时放在这里
年老带堆内存     对象在被真正会回收之前会先放在这里
持久带堆内存     class文件,元数据等放在这里
-XX:PermSize=128m     持久带堆的初始大小
-XX:MaxPermSize=128m     持久带堆的最大大小,eclipse默认为256m。如果要编译jdk这种,一定要把这个设的很大,因为它的类太多了。

 

在开发当中,当一个项目比较大时,依赖的jar包通常比较多,我们都知道,在应用服务器启动时,会将应用引用到的所有类通过ClassLoader 依次全部加载到内存当中。Java的逻辑内存模型大致分为堆内存、栈内存、静态内存区,也称持久区,该区的内存不会被GC回收。堆内存用于存储类的实例、 数组等引用类型数据,也就是用new生成的对象,都存放在这里,栈内存存储局部变量(如:方法参数),静态内存区存储常量、静态变量、类元数据信息(方 法、属性等)。开发当中常遇到的三类内存溢出异常:

  • java.lang.OutOfMemoryError: Java heap space异常
    表示堆内存空间满了,如果不是程序逻辑的bug,可能是因为项目中引用的jar比较多,导到内存溢出。JVM默认堆的最小使用内存为物理内存的1/64, 最大使用内存为物理内存的1/4,如8G的物理内存,JVM默认堆的最小和最大内存分别为128m和2048m。通过调整JVM的-Xms(初始内存)和 -Xmx(最大内存)两个参数加大内存使用限制。
  • java.lang.OutOfMemoryError: PermGen space异常
    表示静态内存区满了,通常是由于加载的类过多导致。jdk8以下版本通过修改JVM的-XX:PermSize和-XX:MaxPermSize两个参 数,限制静态区最小和最大内存范围。jdk8改变了内存模型,将类定义存放到了元数据(MetaspaceSize)空间,而元数据空间是与堆空间共享同 一块内存区域的,所以在JDK8以后版本不会存在PermGen space异常了,故不用设置此参数。
  • java.lang.StackOverflowError异常
    表示栈内存溢出。通常是由于死循环、无限递归导致。

 

优化方法:(linux与windows都亲测有效)

修改Tomcat的内存配置,打开$TOMCAT_HOME/bin/catalina.sh文件(Windows系统是catalina.bat文件),大楖在250行左右,在JAVA_OPTS参数上添加内存参数设置即可。完整的JVM参数设置如下所示:

linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=256 -Djava.awt.headless=true"

windows修改TOMCAT_HOME/bin/catalina.bat,在前面加入 

set JAVA_OPTS=-server -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:MaxPermSize=256 -Djava.awt.headless=true

 如果是Windows配置服务式的参考我的另一篇博客:

windows下注册tomcat服务以及设置jvm参数

 

 

-server参数:表示以服务模式启动,启动速度会稍微慢一点,但性能会高很多。不加这个参数,默认是以客户端模式启动。
java.awt.headless=true参数:与图形操作有关,适用于linux系统。如生成验证码,含义是当前使用的是没有安装图安装图形界面的服务器,应用中如果获取系统显示有关参数会抛异常。

 

验证是否配置成功:

可通过jmap -heap proccess_id或者是擦看Tomcat日志查看设置是否成功。
1.通过查看tomcat启动日志查看;

  (1)通过catalina.bat启动查看日志:

 

2.利用 jps+jmap 查看(bootstrap代表的是tomcat)

E:\tomcat\apache-tomcat-7.0.72\bin>jps
324592 Bootstrap
571396 Jps
237820E:\tomcat\apache-tomcat-7.0.72\bin>jmap -heap 324592
Attaching to process ID 324592, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.80-b11using thread-local object allocation.
Parallel GC with 4 thread(s)Heap Configuration:MinHeapFreeRatio = 0MaxHeapFreeRatio = 100MaxHeapSize      = 2147483648 (2048.0MB)NewSize          = 1310720 (1.25MB)MaxNewSize       = 17592186044415 MBOldSize          = 5439488 (5.1875MB)NewRatio         = 2SurvivorRatio    = 8PermSize         = 134217728 (128.0MB)MaxPermSize      = 134217728 (128.0MB)G1HeapRegionSize = 0 (0.0MB)Heap Usage:
PS Young Generation
Eden Space:capacity = 537919488 (513.0MB)used     = 336902296 (321.2950668334961MB)free     = 201017192 (191.7049331665039MB)62.630617316470975% used
From Space:capacity = 89128960 (85.0MB)used     = 45512304 (43.40391540527344MB)free     = 43616656 (41.59608459472656MB)51.06342988855698% used
To Space:capacity = 89128960 (85.0MB)used     = 0 (0.0MB)free     = 89128960 (85.0MB)0.0% used
PS Old Generationcapacity = 1431830528 (1365.5MB)used     = 8897120 (8.484954833984375MB)free     = 1422933408 (1357.0150451660156MB)0.6213808007311882% used
PS Perm Generationcapacity = 134217728 (128.0MB)used     = 44075888 (42.03404235839844MB)free     = 90141840 (85.96595764160156MB)32.83909559249878% used

 

 

3.通过JDK自带的jvisualvm.exe工具查看

 

4.通过tomcat自带的项目(manage)查看:

 

参考:https://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024731.html

 

5.用JDK自带的jconsole查看:

参考:http://www.cnblogs.com/qlqwjy/p/8304211.html

 

6.利用JDK自带的JPS命令查看JVM信息: 

jps –v :输出jvm参数

 

例如:  查看本机所有的JVM参数:

$ jps -v
3732 Jps -Dapplication.home=C:\Program Files\Java2\jdk1.7.0_80 -Xms8m
3740 Bootstrap -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:56098 -Dcatalina.base=E:\tomcat\apache-tomcat-7.0.72 -Dcatalina.home=E:\tomcat\apache-tomcat-7.0.72 -Dwtp.deploy=E:\xiangmu -Djava.endorsed.dirs=E:\tomcat\apache-tomcat-7.0.72\endorsed -Xms5200M -Xmx5200M -XX:PermSize=512M -XX:MaxPermSize=512M -Dfile.encoding=GBK
9556 OracleIdeLauncher -Xbootclasspath/a:C:\Program Files\Oracle\sqldeveloper\jdk\lib\tools.jar;C:\Program Files\Oracle\sqldeveloper\jdk\lib\dt.jar -Dsun.java2d.noddraw=true -Dnetbeans.home=/Program Files/Oracle/sqldeveloper/netbeans/platform/ -Dnetbeans.logger.console=true -Dexcluded.modules=org.eclipse.osgi -Dide.cluster.dirs=/Program Files/Oracle/sqldeveloper/netbeans/fcpbridge/:/Program Files/Oracle/sqldeveloper/netbeans/ide/:/Program Files/Oracle/sqldeveloper/netbeans/../ -Xverify:none -Doracle.ide.extension.HooksProcessingMode=LAZY -Dorg.eclipse.equinox.simpleconfigurator.configUrl=file:bundles.info -Dosgi.bundles.defaultStartLevel=1 -Dosgi.configuration.cascaded=false -Dosgi.noShutdown=true -Dorg.osgi.framework.bootdelegation=* -Dosgi.parentClassloader=app -Dosgi.locking=none -Dosgi.contextClassLoaderParent=app -Xbootclasspath/p:/Program Files/Oracle/sqldeveloper/rdbms/jlib/ojdi.jar -Dosgi.classloader.type=parallel -Dosgi.bundlefile.limit=500 -Dide.feedback-server=ide.us.oracle.com -Djavax.xml.transform.TransformerFactory=or
5292  -Dosgi.requiredJavaVersion=1.7 -Xms3072m -Xmx3072m -XX:PermSize=728m -XX:MaxPermSize=728m -XX:+UseParallelGC -XX:+DisableExplicitGC -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails

 

 

例如:查看Tomcat的JVM参数: (Bootstrap是Tomcat的信息)

liqiang@root MINGW64 /e/xiangmu/sbgl (qlq)
$ jps -v|grep Bootstrap
3740 Bootstrap -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:56098 -Dcatalina.base=E:\tomcat\apache-tomcat-7.0.72 -Dcatalina.home=E:\tomcat\apache-tomcat-7.0.72 -Dwtp.deploy=E:\xiangmu -Djava.endorsed.dirs=E:\tomcat\apache-tomcat-7.0.72\endorsed -Xms5200M -Xmx5200M -XX:PermSize=512M -XX:MaxPermSize=512M -Dfile.encoding=GBK

 

 

 

二、并发配置优化

主要配置Tomcat能处理的请求数,当一个进程的线程数超过500个的话,那么这个进程的运行效率就很低了。表面上看线程越多处理的请求越多,其 实过多的线程会占用CPU在不同线程之间切换的资源,导致CPU在每个线程上处理的时间片极期有限,反而会降低服务器的响应性能。

<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"connectionTimeout="20000"redirectPort="8443" maxThreads="500"minSpareThreads="100"maxSpareThreads="200"acceptCount="200"maxIdleTime="30000"enableLookups="false"/>

 有需要的话在上面标签最后加上设置tomcat默认编码格式,如下:

URIEncoding="UTF-8"

 

 

Tomcat的并发请求处理数量=maxThreads + acceptCount

protocol:启用APR连接模式,提高异步IO处理性能。启用配置请参考:《开启Tomcat APR运行模式,优化并发性能》

  一般小型项目直接用protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads:最大能接受的请求数,默认为200
minSpareThreads:最少备用线程数,默认初始化,默认为25
maxSpareThreads:最多备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程
acceptCount:等待处理的请求队列,默认为100,超过队列长度,服务器则拒绝客户端请求,直接返回403
maxIdleTime:如果一个线程在30秒以内没有活跃,则终止运行并从线程池中移除。除非线程池数量小于或等于minSpareThreads数量。默认值是1分钟
enableLookups:如果为true,调用request.getRemoteHost会执行DNS反查,反向解析IP对应的域名或主机,效率较低,建议设为false。
更多参数设置,请参考Tomcat官方文档:http://tomcat.apache.org/tomcat-8.0-doc/config/http.html

例如:我的配置(也是我的第一个项目部署的配置)

        <Connector URIEncoding="UTF-8"
      
connectionTimeout="20000"port="80"
       protocol
="org.apache.coyote.http11.Http11NioProtocol"maxThreads="500"
       minSpareThreads
="20"
       acceptCount
="100"disableUploadTimeout="true"
       enableLookups
="false"
       redirectPort
="8443" />

 

tomcat启动后进行查看:

 

 

 参考:https://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024731.html

三、管理员配置

Tomcat默认没有配置管理员帐户的权限,如果要查看app的部署状态、通过管理界面deploy或undeploy,则需要在tomcat-user.xml中配置具有管理权限登录的用户。

<role rolename="tomcat"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<user username="tomcat" password="tomcat" roles="tomcat,manager-gui,manager-status,manager-script,manager-jmx"/>

 

Tomcat官网配置:http://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html

 

 

 

更多的参数与解释:http://blog.csdn.net/kthq/article/details/8618052

        http://www.cnblogs.com/qlqwjy/p/8010705.html

 

转载于:https://www.cnblogs.com/qlqwjy/p/8037392.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2018-11-15】中证1000指数的估值详情

中证1000指数选取中证500和沪深300指数样本股以外的&#xff0c;流动性好的1000只股票组成&#xff0c;与沪深300 和中证500 等形成互补。 中证1000的个股大多数是由市场上流通市值排名在 800 到 1800 名之间的个股组成&#xff0c;是一个适用范围较广的小盘指数。 中证1000的…

印度光伏巨头Adani与华为签署500MW采购合同

日前&#xff0c;印度光伏巨头Adani与华为签订了采购合同。Adani未来一年的项目全部采用华为FusionSolar3.0智能光伏解决方案&#xff0c;首期500MW采购合同已经签署&#xff0c;将采购最新的智能光伏控制器&#xff08;组串逆变器&#xff09;SUN2000-43KTL、数据采集器SmartL…

宣布 .NET MAUI 支持 .NET 7 RC 2

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;6分钟)支持 .NET 7 Release Candidate 2 的 .NET 多平台应用程序 UI (MAUI) 现在可在 Windows 和 Mac 上的 Visual Studio 17.4 Preview 4 中使用。RC2 的主要主题是质量和对带有 iOS 16 的 Xcode 14 的 .NET 支持。此…

Uno开发的小游戏

大家好&#xff0c;我是沙漠尽头的狼。刚在微信群里逛&#xff0c;有网友发了Uno的在线小游戏&#xff0c;站长觉得不错&#xff0c;简单分享下&#xff1a;群聊涨见识Uno是什么&#xff1f;使用 C# 和 WinUI 实现像素完美的多平台应用程序&#xff0c;用于构建适用于 Windows、…

对01背包的分析与理解(图文)

首先谢谢Christal_R的文章(点击转到链接)让我学会01背包 本文较长&#xff0c;但是长也意味着比较详细&#xff0c;希望您可以耐心读完。 题目: 现在有一个背包(容器),它的体积(容量)为V,现在有N种物品(每个物品只有一个),每个物品的价值W[i]和占用空间C[i]都会由输入给出,现在…

linux内核源码剖析 博客,【Linux内存源码分析】页面迁移

页面迁移其实是伙伴管理算法中的一部分&#xff0c;鉴于其特殊性&#xff0c;特地另行分析。它是2007年的时候&#xff0c;2.6.24内核版本开发时&#xff0c;新增碎片减少策略(the fragmentation reduction strategy)所引入的。该策略也称之为反碎片技术(anti-gragmentation)。…

2018年下半年网络公式考试案例分析真题

阅读以下说明&#xff0c;回答问题1至问题3&#xff0c;将解答填入答题纸对应的解答栏内。【说明】某公司网络划分为两个子网&#xff0c;其中设备A是DHCP服务器&#xff0c;如图3-1所示。 【问题1】(6分&#xff0c;每空2分)DHCP在分配IP地址时使用 (1) 的方式&#xff0c; 而…

【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互...

本文由网友投稿。作者&#xff1a;陈显达原文标题&#xff1a;【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互原文链接&#xff1a;https://www.cnblogs.com/1996-Chinese-Chen/p/16826558.html引言在第一章博客中&#xff0c;我们讲了Arduino对E…

机器学习案例丨基于广泛和深入的推荐 - 餐厅评级预测

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;18分钟&#xff09;Microsoft Azure Machine Learning Studio 是微软强大的机器学习平台&#xff0c;在设计器中&#xff0c;微软内置了15个场景案例&#xff0c;但网上似乎没有对这15个案例深度刨析的分析资料&#…

css linux 等宽字体,比例字体等宽字体

我们都知道等宽字体和比例字体的区别&#xff0c;就在于比例字体(Monospaced Font)即每个字母宽度是按一定比例自动调整的&#xff0c;而等宽字体(Proportional font)则是固定宽度&#xff0c;固定间距&#xff0c;字体的每一个字母和字符所占的水平空间都是相同的。比例字体&a…

三星智能家居系统频繁故障 大批用户受到影响

Shelley Powers正在她密苏里州郊区的房子中鼾睡&#xff0c;突然警铃大作将她惊醒&#xff0c;在仔细排查之后&#xff0c;发现是虚惊一场&#xff0c;是安全传感器误报。在此之后的几周&#xff0c;她的三星Smart Things智能家居系统频繁出现故障&#xff0c;比如设定的灯具不…

适用于 .NET 的开源文本差异对比组件

你好&#xff0c;这里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;实用的工具或组件&#xff0c;希望对您有用&#xff01;简介对于开发人员来说&#xff0c;Git 是我们经常使用的工具&#xff0c;在每次编写完代码并提交后&#xff0c;我们可以通过 git dif…

box-shadow阴影合集

2019独角兽企业重金招聘Python工程师标准>>> * box-shadow可以设置6个值。其中4个可选&#xff1b;2个必须指定&#xff1a;分别是x轴偏移量和y轴偏移量&#xff0c;这2个值可以是正值&#xff0c;可以是负值&#xff0c;也可以是0&#xff0c;但不可以省略不写 阴影…

《数据科学R语言实践:面向计算推理与问题求解的案例研究法》一一2.5 为跨年度的个人参赛选手构造记录...

本节书摘来自华章计算机《数据科学R语言实践&#xff1a;面向计算推理与问题求解的案例研究法》一书中的第2章&#xff0c;第2.5节,作者&#xff1a;[美] 德博拉诺兰&#xff08;Deborah Nolan&#xff09;  邓肯坦普朗&#xff08;Duncan Temple Lang&#xff09;  更多章…

基于 abp 微服务架构的开源低代码平台

你好&#xff0c;这里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;实用的工具或组件&#xff0c;希望对您有用&#xff01;简介 ABP-MicroService是 一个基于ABP vNext微服务架构、vue-element-admin的后台管理框架&#xff0c;适用于大型分布式业务系统和企…

linux android sdk gengxinman,Android 实现增量更新

一、概述增量更新相较于全量更新的好处不言而喻&#xff0c;利用差分算法获得1.0版本到2.0版本的差分包&#xff0c;这样在安装了1.0的设备上只要下载这个差分包就能够完成由1.0-2.0的更新。比如&#xff1a;存在一个1.0版本的apkapk1.png然后需要升级到2.0版本&#xff0c;而2…

Pycharm上Django的使用 Day8

2019独角兽企业重金招聘Python工程师标准>>> 1.添加新条目 1>编写用于添加新条目的表单 在forms.py中创建一个与模型Entry相关联的表单 1处给字段text指定一个空标签 2处定义小部件widgets,widgets是一个HTML表单元素 2>定义new_entry的URL模式 在用于添加新条…

物联网创新领域的三大驱动性趋势

从设备对接到区块链&#xff0c;今天我们将介绍几项物联网开发者必须了解的最新技术趋势。 物联网正在快速改变着我们的工作与生活方式。过去十年以来&#xff0c;利用惟一IP地址实现联网早已不是难事&#xff0c;但传感器、处理器以及其它多种新兴技术的涌现真正让物联网走向了…

TensorFlow.NET 实战 -- 为.NET开发者开启机器学习之旅

在IT技术飞速发展的今天&#xff0c;云计算、人工智能、大数据和云原生应用等新兴技术的发展为我们带来一波又一波的浪潮&#xff0c;也对软件开发者提出了更高的要求&#xff0c;特别是人工智能开发领域&#xff0c;应运而生的新概念让人目不暇接。作为一个.NET开发者的你&…

Arduino I/O Expansion Shield V7.1

介绍&#xff1a; 传感器扩展板&#xff0c;目的是为初学者省去繁琐的面包板接线和故障排除&#xff0c;专注实现自己的创意想法。 扩展板V7.1不仅保留老版本的所有优点&#xff0c;改善了它的易用性&#xff0c;更重要的是它兼容Arduino新一代主控器DUE。现在V7.1以其强大的扩…