Tomcat 性能调优之 JVM 调优

Tomcat与JVM性能调优(详细) Tomcat性能调优 找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根据我机子的性能设置的一些参数值,给各位详细解释一下吧: 1、URIEncoding=“UTF-8”:设置Tomcat的字符集。这种配置我们一般是不会设置的,因为关于乱码的转换我们会在具体项目中具体处理,直接修改Tomcat的字符集未免过于太死板。 2、 阅读详情

之前一直对于JVM调优这块比较混淆,看到这篇文章后豁然开朗,好文应该分享,记录下来,慢慢“品味”。

文章转自来源


Tomcat、Jetty、GlassFish 等等这系列 Web容器/应用服务器,虽然做为容器,提供的是一个 Java Web 的运行时环境,以支持Servlet/JSP 等等这些内容的运行,但我们都很清楚,其本质上还是一个 Java 应用程序。 每次对于 容器的启动运行,都是把这个 Java 程序跑起来,来实现 Web 容器的能力。

做为一类“特殊”的 Java 应用程序,和任务其他的 Java 应用一样,需要使用到JVM,会有堆,会使用到垃圾回收,会涉及到不同的堆分区比例...

因此在对Web 容器( 应用服务器) 的调优中必不可少的是对于 JVM 的调优。

对于 JVM 的调优,主要有两个方面考虑:

  • 内存大小配置
  • 垃圾回收算法选择

 

当然,确切的说,以上两点并不互相独立,内存的大小配置也会影响垃圾回收的执行效率。

其中内存大小配置,最主要做的有

  • 确定内存占用的总大小
  • 确定内存中各个代(Gen) 的大小划分

内存大小配置

所谓内存大小的占用,是指应用程序启动后稳定运行一小段时间时,观察到的内存占用情况。

以 HotSpot 虚拟机为例,Java 堆主要有三个空间:

新生代、老年代和永久代。

根据不同应用的特别,观察应用对于内存的占用,如果有大量的临时对象,不会重复使用,则可以调整 New Gen, 这样这些临时对象就在新生代创建完成,并在 Minor GC 产生时被回收,这样较短生存活的对象不会晋升到老年代,从而可以避免垃圾堆集产生 Full GC。

理想状态下,短期存活的对象都只在新生代完成生命周期,被费时劲少的

Minor GC 回收完成, 而长期存活,将会多次使用的在多次回收之后晋升到老年代, 最终经过 Full GC 完成生命周期。

这里涉及到关于内存大小的调整参数有:

  • -Xms
  • -Xmx

这两个参数用于配置 heap 的起始大小和最大值。这里需要经过观察,找一个合适的值,设置太大会导致内存浪费,同时也会导致垃圾回收耗时太长。对于 Tomcat 来说,一般都会将初始值和最大值设置为相同值,这样就避免在初始内存不足时触发 Full GC 来进行扩展内存。

设定 heap 大小之后,要根据对象生命周期的特征,来调整新生代与老年代的大小比例。

涉及到的参数有:

  • -XX:NewSize
  • -XX:NewRatio
  • -XX:MaxNewSize
  • -Xmn

第一个是直接设置新生代初始大小,第二个是设置比例(Ratio)。太高或太低都会导致 GC 不能高效的工作。毕竟 Minor GC 也是要耗时的。最后一个设置新生代的初始值和最大值相同,堆空间的变化不影响其值。

对于使用了大量第三方类库的应用来说,会加载许多框架依赖的类,使用过程中可能会遇到因为Perm Gen 不足产生的 OOM,这种情况可以通过观察稳定状态下 Perm 区的占用,再通过参数设置。

  • -XX:PermSize
  • -XX:MaxPermSize
  • -XX:MaxMetaspaceSize

第一个会设置Perm区的初始大小,第二个用于设置Perm 区的最大值。在Java 8的时候, Perm 区被移除,改为Metaspace,不过如果遇到类似的OOM,依然可以调整其大小。

此外,对于使用大量线程的应用,也可以配置 -Xss,主要用于设置单个线程的stack 大小。注意,是单个的大小,因此设置值越大,会占用越大,可用的线程数也就越少。

这里的配置一般对于-X开始的可以直接在后面用数字加单位,而-XX的则需要等号后数字再加单位,例如:

java -Xms100m -Xmx200m -XX:PermSize=300m

这里数字后的单可以是m,g,k代表计算机中的不同单位。

那我们前面一直在说根据不同的应用,观察分析设置堆的大小,堆的各个代的大小,那具体观察什么呢?

我们一般在JVM的配置中增加一些打印 GC 日志的选项,配置方式和上面的类似,这样在 GC 产生时,会打印出各个代占用的大小,具体触发时间等。推荐的配置有以下几个:

  • -XX:+PrintGCTimeStamps
  • -XX:+PrintGCDetails
  • -Xloggc:<文件名>
  • -XX:PrintGCDateStamps

第一个和第四个选项可以任选一个,第一个打印自JVM启动以来的时间,一般也称为uptime, 第四个打印的是系统当前日期和时间。

根据 GC 日志产生的内容,来观察具体的大小,开始使用上述的配置参数进行调整。当然,也可以用 JConsole, JVisual VM 这些工具可视化的进行了解再调整。

垃圾回收算法

不同的垃圾回收算法,对于应用的影响很大。一方面可能在一个服务器上却使用了单线程的回收算法,也可能应用对于响应要求很高,但却使用了一个吞吐量优先的算法,导致响应太慢。

所以对于垃圾回收算法的选择,一般都是根据应用的特点,是要低延迟还是高吞吐量,选择合适的算法。我们前面也提到,垃圾回收算法和内存的大小配置并非独立的,内存设置大是回收的频率会降低,但每次的执行时间也会变长。所以这里也是一个需要权衡的地方。

  • 延迟、吞吐量调优
  • 其他 JVM 配置

垃圾回收算法对应到的就是不同的垃圾收集器,具体到在 JVM 中的配置,是使用 -XX:+UseParallelOldGC 或者 -XX:+UseConcMarkSweepGC 这种不同的收集器来达到选择算法的目的。

其中 ParallelGC 也称为 吞吐量优先收集器,可以提升应用的吞吐量,但在老年代大小调整之,进行几次垃圾回收后,不能满足应用的低延迟要求。

一般常用到ConcMarkSweepGC, 也称之为 CMS GC,其可以做到老年代的垃圾回收与应用程序的纯种并行执行,所以可以实现低延迟。

这里注意,由于 CMS GC 和其他GC回收算法使用的框架不同,因此不能混用,在使用CMS 进行老年代回收时,新生代默认使用了单线程回收算法,此时可以通过配置 -XX:+UseParNewGC来使用 新生代并行回收。

由于CMS是垃圾回收和应用线程并行,因此需要额外的CPU处理资源,如果只有一个CPU的机器,或者有多个忙碌的CPU,又想要使用低延迟的收集器,此时可以通过配置 CMS 收集器的增量模式来进行回收,通过指定 -XX:+CMSIncrementalMode 来开启增量模式。此时交替运行垃圾收集器应用线程。通过配置

-XX:CMSIncrementalSafetyFactor=X, -XX:CMSIncrementalDutyCycleMin=Y,

-XX:CMSIncrementalPacing 可以控制垃圾收集后台线程为应用线程让出多少CPU周期。

参数-XX:+CMSParallelRemarkEnabled 用来降低标记停顿,另外由于CMS 回收后的老年代内存空间并不是连续的,因此通过参数

-XX:+UseCMSCompactAtFullCollection 在Full GC的时候对年老代的压缩。

在JDK1.7 的时候引入了 G1 收集器,可以通过配置-XX:+UseG1GC 来开启。这一方面的实战经验不多,有相关使用经验的朋友欢迎分享。

此外,还可以对新生代进行更细致的配置,比如设置Eden 和 Suvivor 区的比例等,和Newxx类似,可以通过SuvivorRation设置比例。

其他 JVM 配置

可以使用 -XX:+DisableExplicitGC 选项来禁止显式的 System.gc 的调用。这个使用时需要评估后再使用。

所谓调优,就是一个不断调整和优化的过程,需要观察、配置、测试再如此重复。有相关经验的朋友欢迎留言补充!

说到底,那上面的这些选项是要配置在哪里呢? 我们前面提到 Tomcat 本质也是个普通的 Java 应用,因此和一般的 Java 启动方式类似,也是类似

java -Xms100m -XX:+UseParallelOldGC 应用主类

通过这种形式来启动,区别只是 Tomcat 将上述命令放到了文件中,对应到不同的操作系统,Windows下使用 bat文件, Linux下使用 sh 文件。

所以我们的配置项也是加到这些文件中。

我们来看catalina.sh中实际启动时执行的命令:

Tomcat 性能调优之 JVM 调优

 

 

所以我们的选项可以加到

JAVA_OPTS

CATALINA_OPTS

这些可选项中。

配置比较简单,例如下面这样:

Tomcat 性能调优之 JVM 调优

 

 

配置的时候需要特别注意的是,不要把前面已经有的配置冲掉,比如

在配置JAVA_OPTS的时候,要把前面已经配置的加上,写起来是这样:

JAVA_OPTS="$JAVA_OPTS 新增的内容"

Tomcat JVM的参数调优 详细讲述了JVM参数的调优方法和步骤.并描述了GC垃圾回收机制的瓶颈,以及出现内存溢出的原因。 立即下载

相关推荐

Tomcat性能优化及JVM内存工作原理

Tomcat性能优化及JVM内存工作原理,适用于运维人员,开发人员

JVM性能调优

1、JVM调优目标:使用较小的内存占用来获得较高的吞吐量或者较低的延迟。 程序在上线前的测试或运行中有时会出现一些大大小小的JVM问题,比如cpu load过高、请求延迟、tps降低等,甚至出现内存泄漏(每次垃圾收集使用的时间越来越长,垃圾收集频率越来越高,每次垃圾收集清理掉的垃圾数据越来越少)、内存溢出导致系统崩溃,因此需要对JVM进行调优,使得程序在正常运行的前提下,获得更高的用户体验和运行效率。 这里有几个比较重要的指标: 内存占用:程序正常运行需要的内存大小。 延迟:由于垃圾收集

JAVA程序哥 579

鼎捷T100二次开发实战:如何给开窗功能加上权限锁(附完整代码)

本文详细解析了鼎捷T100二次开发中开窗功能权限锁的实现方法,提供了两种技术方案:开窗程序重构法和动态WHERE条件注入法,并附上完整代码示例。通过真实案例,帮助开发者解决数据权限细粒度控制的难题,提升ERP系统的安全性和实用性。

weixin_28454475的博客 442

tomcat配置jvm以及tomcat的优化

【enableLookups】是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为 false,则直接返回 IP 地址,为了提高处理能力,应设置为 false。以上是一些常用的配置参数,还有好多其它的参数设置,还可以继续深入的优化,HTTP Connector 与 AJP Connector 的参数属性值,可以参考官方文档的详细说明进行学习。-Xmx:堆内存的最大大小,是分配JVM的最大内存,默认为物理内存的1/4。-Xss:设置每个线程可使用的内存大小,即栈的大小。

我的博客 5243

联邦学习模型投毒研究进展

在联邦学习中,多个设备(如移动设备、IoT设备等)本地训练模型,然后将更新的模型参数上传到服务器进行聚合。

2401_82375734的博客 1265

simulink调用C代码函数-C Caller模块

simulink中如何调用写好的C代码函数?使用C Caller模块调用C代码。

weixin_40531919的博客 5670

tomcat、jvm性能调优

tomcat、jvm性能调优

LI_591091675的博客 526

单片机通信总述——理论部分(CAN、串口、SPI、I2C等)

并行通信:传输原理:数据各个位同时传输;优点:速度快; 缺点:占用引脚资源多。是指使用 8、16、32 及 64 根或更多的数据线(有多少信号为就需要多少信号位)进行传输的通讯方式,可以同一时刻传输多个数据位的数据。串行通信: 传输原理:数据按位顺序传输;优点:占用引脚资源少; 缺点:速度相对较慢。是指设备之间通过一根数据信号线,地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式,同一时刻只能传输一位(bit)数据。 单工: 数据传输只支持数据在一个方向上传输。信息只能单方向传输的工作方式,一

qq_42475191的博客 1万+

Tomcat 调优及 JVM 参数优化

Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒你。对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU 的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU 的处理能力越强,系统运行速度越快。 Tomcat 的优化不像其它软件那样,简简单单的修改几个参数就可以了,它的优化主要...

刘东旭的专栏 9万+

ABB RobotStudio 和 S7-PLCSIM Advanced V5.0 搭建虚拟通信环境,实现 PLC 对机器人布尔量、数字量和模拟量的控制。

本教程详细介绍了如何利用ABB RobotStudio和S7-PLCSIM Advanced V5.0搭建虚拟通信环境,实现PLC对机器人的布尔量、数字量和模拟量控制。主要内容包括:在TIA Portal V20中配置PLC项目并编写通信程序;通过S7-PLCSIM Advanced创建虚拟PLC运行环境;在RobotStudio中设置机器人PROFINET通信;以及建立虚拟网络连接并进行功能测试。该方案适用于工业自动化虚拟调试,可显著降低现场调试风险。操作需注意软件版本兼容性、网络配置及信号映射准确性,最

CHUXUEZHE8210的博客 2515

手把手教你学Simulink--基于Simulink的高增益DC-DC变换器仿真建模

特点高电压增益:可以在不使用变压器的情况下实现较大的电压升压比。适用于低电压源:如太阳能电池板、燃料电池等提供的低压直流电源。效率问题:设计时需特别注意提高效率,减少能量损失。挑战电路复杂性:通常涉及多个电感和电容,以及复杂的开关模式。元件选择:合适的元件参数对于达到理想性能至关重要。控制策略:确保高效稳定运行的同时,适应负载变化。首先明确要模拟的任务内容。实现特定的电压增益比(例如从24V升至380V)。根据预期的输入输出电压确定合适的电路拓扑和元件值。

MHD0815的博客 173

Tomcat 和 JVM 的性能调优总结

来源:http://rrd.me/enKbC Tomcat 性能调优 JVM 性能调优 一、内存调优 二、垃圾回收策略调优 Tomcat 性能调优 找到 Tomcat 根目录下的 conf 目录,修改 server.xml 文件的内容。对于这部分的调优,我所了解到的就是无非设置一下 Tomcat 服务器的最大并发数和 Tomcat 初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根据我机子的性能设置的一些参数值,给各位详细解释一下吧: 1、URIEncoding.

嘻哈熊的专栏 666

快速入门必看!RT-DETR手把手训练自己的数据集去跑实验,基于 ultralytics 仓库源码改进,配置虚拟环境,准备数据集、训练、验证、推理测试 ,实现0到1的完整教学过程。

本文介绍了使用Ultralytics框架训练RT-DETR模型的全流程。首先需要创建Python 3.10虚拟环境,安装指定版本的PyTorch和相关依赖包。然后准备数据集,修改配置文件,并详细介绍训练、验证和推理三个核心步骤的代码实现。训练阶段使用RTDETR类加载模型配置,设置训练参数;验证阶段评估模型性能;推理阶段可对图片、视频等进行预测。文中还提供了清华大学镜像源加速下载,以及详细的参数配置说明,帮助用户快速搭建RT-DETR目标检测模型。

Ai缝合怪、助力小伙伴高效发论文 5553

Tomcat和JVM的性能调优你都懂吗?

持久代一般固定大小为64m。我们都知道Java虚拟机都有默认的垃圾回收机制,但是不同的垃圾回收机制的效率是不同的,正是因为这点我们才经常对Java虚拟机的垃圾回收策略进行相应的调整。1、 -XX:+UseSerialGC :代表垃圾回收策略为串行收集器,即在整个扫描和复制过程采用单线程的方式来进行,适用于单CPU、新生代空间较小及对暂停时间要求不是非常高的应用上,是client级别默认的GC方式,主要在JDK1.5之前的垃圾回收方式。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5。..

weixin_62421895的博客 687

RNA-seq分析:Step8(富集分析)

RNA-seq富集分析是一种用于分析基因表达数据中特定基因或通路是否富集的分析方法。其基本思想是比较不同基因对应的转录本/基因之间的表达差异及其对应的基因注释信息,通过统计学方法评估差异的显著性,从而确定是否存在某些特定的功能通路或基因集合富集的情况。常用的RNA-seq富集分析工具包括GOseq、KEGG(KEGG enrichment analysis)、DAVID(Database for Annotation, Visualization and Integrated Discovery)等。这

沉香best的博客 3633

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Tomcat 性能调优、加固、JVM优化

找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根据我机子的性能设置的一些参数值,给各位详细解释一下吧:maxThreads=”300″ :设置当前Tomcat的最大并发数。Tomcat默认配置的最大请求数是150个,即同时能支持150个并发。

qq_43164571的博客 974

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Tomcat与JVM性能调优深度解析:从原理到实践

本文系统阐述了Tomcat和JVM性能调优的核心方法论与实践指南。主要内容包括:性能调优基础理念(测量优先、瓶颈定位等)、JVM内存模型与GC算法深度解析(堆/非堆内存、7种收集器对比)、Tomcat架构优化(连接器协议选择、线程池配置、会话管理)。重点介绍了集成监控体系搭建(Prometheus+JMX Exporter+Grafana)和典型调优案例(电商系统秒杀场景)。文章强调性能优化是系统工程,需平衡吞吐量、响应时间和资源消耗,并需建立持续优化的文化。最后展望了容器化环境调优、云原生弹性伸缩等未来发

油墨香^-^的博客 1065

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jvm 调优_Tomcat 和 JVM 的性能调优总结

作者:Java架构师历程来源:https://cloud.tencent.com/developer/article/1346964Tomcat性能调优:找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根据我机子的...

weixin_39774905的博客 81

Tomcat和JVM的性能调优总结

Tomcat性能调优:找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根据我机子的性能设置的一些参数值,给各位详细解释一下吧:1、URIE...

小屁孩大帅-保密的博客 83

jvm 调优_Tomcat 和 JVM 性能调优总结

新人大礼包,30G Java架构资料,免费领取​zhuanlan.zhihu.comTomcat性能调优:找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根据我机子的性能设置的一些参数值,给各位详细解释一下吧:1、...

weixin_39823676的博客 83

docker jvm调优 tomcat_《Tomcat和JVM的性能调优你真的学会了吗?》总结篇

Tomcat性能调优:找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根据我机子的性能设置的一些参数值,给各位详细解释一下吧:1、 URIEncoding=“UTF-8” :设置Tomcat的字符集。这种配置我们一...

weixin_39599654的博客 174

tomcat内存一直增长_Tomcat 和 JVM 的性能调优总结

Tomcat性能调优JVM性能调优一、内存调优二、垃圾回收策略调优《Netty 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精品合集》《Spring MVC 实现原理与源码解析 —— 精品合集》《Spring Boot 实现原理与源码解析 —— 精品合集》《数据库实体设计合集》《Java 面试题 —— 精品合集...

weixin_39983404的博客 1612
上一篇: java 根据助记词导入ETH钱包账户
下一篇: SpringMVC拦截器和过滤器的区别
bubble21
博客等级 码龄9年 33粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值