b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

用于Tomcat性能调整的JVM调整

电脑杂谈  发布时间:2020-09-02 23:02:50  来源:网络整理

jvm内存调优_jvm性能调优_jvm内存模型与性能调优

Tomcat,Jetty,GlassFish和其他系列的Web容器/应用程序服务器,尽管作为容器,它提供了Java Web运行时环境来支持Servlet / JSP等的操作,但是我们所有人显然是本质上是Java应用程序. 每次启动和运行容器时,都会运行Java程序以实现Web容器的功能.

作为一种“特殊” Java应用程序,就像其他用于任务的Java应用程序一样,它需要使用JVM,将有一个堆,将使用垃圾回收,并且将涉及不同的堆分区比率... <

因此,在Web容器(应用程序服务器)的调整中必不可少的是JVM的调整.

对于JVM的调优,有两个主要注意事项:

当然,准确地说,以上两点并不是彼此独立的,并且内存配置的大小也会影响垃圾收集的效率.

其中,内存大小配置最重要的是

内存大小配置

所谓的内存使用率是指在应用程序启动后短时间内稳定运行时观察到的内存使用率.

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

新一代,老一代和永久一代.

根据不同应用程序的特殊性,观察应用程序的内存使用情况. 如果有大量临时对象将不被重用,则可以调整“ New Gen”,以便这些临时对象是在新一代中创建并在次要GC时间中收集的,以便生存期较短. 对象将不会升级到旧版本,这样可以避免垃圾堆积以生成Full GC.

jvm内存调优_jvm内存模型与性能调优_jvm性能调优

理想情况下,寿命短的对象只能在新一代中完成其生命周期,这既省时又耗能

次要GC恢复已完成,但对于长期生存而言,将多次使用的GC将在多次恢复后提升到老年,并最终通过Full GC结束生命周期.

与内存大小相关的调整参数为:

这两个参数用于配置堆的初始大小和最大值. 需要在此处观察以找到合适的值. 设置得太大会导致内存浪费,还会导致垃圾回收花费太长时间. 对于Tomcat,通常将初始值和最大值设置为相同的值,以避免在初始内存不足时触发Full GC扩展内存.

设置堆大小后,根据对象生命周期的特征调整年轻代和老代之间的大小比.

涉及的参数是:

第一个是直接设置年轻代的初始大小,第二个是设置比率(Ratio). 太高或太低都会导致GC无法有效工作. 毕竟,次要GC也很耗时. 最后一个将年轻代的初始值和最大值设置为相同,并且堆空间的更改不会影响其值.

对于使用大量第三方库的应用程序,将加载许多框架相关的类. 在使用过程中,由于Perm Gen不足,可能会遇到OOM. 在这种情况下,可以观察到处于稳定状态的Perm区域. 占用,然后通过参数进行设置.

第一个将设置Perm区域的初始大小,第二个将设置Perm区域的最大值. 在Java 8中,已删除了Perm区域并将其更改为Metaspace,但是如果遇到类似的OOM,仍可以调整其大小.

此外,对于使用大量线程的应用程序,您还可以配置-Xss,它主要用于设置单个线程的堆栈大小. 请注意,它是单个大小,因此设置值越大,它将占用的空间越大,可用线程越少.

通常,此处的配置可以直接在-X开头的数字之后和-XX的等号后的数字后面直接添加单位,例如:

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

jvm内存模型与性能调优_jvm性能调优_jvm内存调优

此数字后面的列表可以是m,g和k,代表计算机中的不同单位.

然后,我们一直在讨论根据不同的应用程序观察和分析堆的大小以及每一代堆的大小. 我们应该特别注意什么?

我们通常在JVM配置中添加一些用于打印GC日志的选项. 配置方法与上述类似,因此当生成GC时,将打印每代的大小和特定的触发时间. 推荐的配置如下:

您可以选择第一和第四选项之一. 第一个打印出自JVM启动以来的时间,通常称为正常运行时间,第四个打印出系统的当前日期和时间.

根据GC日志生成的内容,观察特定大小并开始使用上述配置参数进行调整. 当然,您也可以使用JConsole,JVisual VM直观地了解和调整.

垃圾收集算法

不同的垃圾收集算法对应用程序有很大的影响. 一方面,服务器上可能使用单线程回收算法,或者应用程序可能需要较高的响应速度,但使用吞吐量优先的算法,这导致响应速度太慢.

因此,垃圾收集算法的选择通常基于应用程序的特性,无论是低延迟还是高吞吐量,然后选择适当的算法. 前面我们还提到了垃圾回收算法和内存大小配置不是独立的. 较大的内存设置将减少回收的频率,但是每次执行时间也会变长. 所以这也是一个可以称重的地方.

垃圾收集算法对应于不同的垃圾收集器. 具体来说,JVM中的配置是使用不同的收集器-XX: + UseParallelOldGC或-XX: + UseConcMarkSweepGC来达到选择算法的目的.

其中,ParallelGC也称为吞吐量优先级收集器,它可以提高应用程序的吞吐量,但是在较老的年代,经过多次垃圾回收后的大小调整无法满足应用程序的低延迟要求.

通常,通常使用ConcMarkSweepGC,也称为CMS GC. 它可以并行执行老式垃圾回收和纯种应用程序,因此可以实现低延迟.

请注意,由于CMS GC和其他GC恢复算法使用不同的框架,因此不能将它们混合使用. 当CMS用于旧版本恢复时,默认情况下,新版本使用单线程恢复算法. 目前,您可以将-XX: + UseParNewGC配置为使用新一代并行集合.

jvm内存调优_jvm内存模型与性能调优_jvm性能调优

由于CMS是并行的垃圾回收和应用程序线程,因此需要其他CPU处理资源. 如果一台计算机只有一个CPU或多个繁忙的CPU,并且想要使用低延迟收集器,则可以通过配置CMS收集器的增量模式进行回收,并通过指定-XX: + CMSIncrementalMode启用增量模式. 这时,垃圾收集器应用程序线程交替运行. 通过配置

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

-XX: CMSIncrementalPacing可以控制垃圾回收后台线程放弃应用线程的CPU周期.

参数-XX: + CMSParallelRemarkEnabled用于减少标记暂停. 另外,由于CMS回收后旧版本的内存空间不是连续的,因此将传递该参数.

-XX: + UseCMSCompactAtFullCollection在Full GC中压缩旧版本.

G1收集器是在JDK1.7中引入的,可以通过配置-XX: + UseG1GC来打开它. 这方面的实战经验很少,欢迎有经验的朋友分享.

此外,您还可以为新一代进行更详细的配置,例如设置Eden和Suvivor区域的比例等,类似于Newxx,您可以通过SuvivorRation设置比例.

其他JVM配置

您可以使用-XX: + DisableExplicitGC选项来禁止显式调用System.gc. 使用前需要进行评估.

所谓的调整是连续调整和优化的过程,需要重复观察,配置和测试. 欢迎有相关经验的朋友留言补充!

在最终分析中,以上选项将在哪里配置?如前所述,Tomcat本质上是一个普通的Java应用程序,因此它与常规的Java启动方法相似,并且相似.

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

jvm内存调优_jvm内存模型与性能调优_jvm性能调优

从这种形式开始,不同之处在于Tomcat将上述命令放在一个文件中,该文件对应于不同的操作系统. bat文件在Windows下使用,sh文件在Linux下使用.

因此,我们的配置项也已添加到这些文件中.

让我们看一下实际启动catalina.sh时执行的命令:

因此我们的选项可以添加到

JAVA_OPTS

CATALINA_OPTS

在这些选项中.

配置相对简单,例如:

配置时,您需要特别注意,不要冲掉先前的配置,例如

在配置JAVA_OPTS时,添加之前配置的内容,并这样写:

JAVA_OPTS =“ $ JAVA_OPTS添加了内容”


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-312637-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 捧剑仆
        捧剑仆

        这样才能输了面子赢了里子

      • 马希声
        马希声

        我选择也觉得我要换新一下我自己的生活了

      • 李央央
        李央央

        绝大多数的人都不理解谢教授的真正用意

      热点图片
      拼命载入中...