Java 在tomcat pid上运行jmap的说明

Java 在tomcat pid上运行jmap的说明,java,tomcat,jvm,heap,Java,Tomcat,Jvm,Heap,我在catalina.sh顶部修改了以下内容: export CATALINA_OPTS="-Xms512m -Xmx1500m" 我的服务器上有4GB的ram,我正在进行负载测试,所以我想把一切都交给tomcat 我应该调整哪些其他JVM设置以最大化每秒请求数? PerMem也很重要吗 对于下面的jmap输出,我有点困惑 我将Xmx设置为1500megs,当我看到“maxheapsize”是1500m时,它似乎已经更新了 但是它在哪里显示了我使用了多少堆以及有多少是免费的呢 我看到在堆使用量

我在catalina.sh顶部修改了以下内容:

export CATALINA_OPTS="-Xms512m -Xmx1500m"
我的服务器上有4GB的ram,我正在进行负载测试,所以我想把一切都交给tomcat

我应该调整哪些其他JVM设置以最大化每秒请求数?

PerMem也很重要吗

对于下面的jmap输出,我有点困惑

我将Xmx设置为1500megs,当我看到“maxheapsize”是1500m时,它似乎已经更新了

但是它在哪里显示了我使用了多少堆以及有多少是免费的呢

我看到在堆使用量63mb(eden)下,那是什么?

热点(read sun)堆被分成几个部分,因此当您指定-Xmx时,实际上是在为整个堆设置最大值,而不是其中的一部分

Eden是整个堆的一小部分,它保持小规模以确保应用程序在收集过程中不会长时间停止。所有新对象(适合的)进入伊甸园开始,如果他们不是垃圾,他们将被提升到幸存者空间或任期

幸存者(往返空间)是GC尝试获取可能是垃圾但在eden收集过程中无法快速计算的对象的地方,有两个幸存者空间充当缓冲区,一个由GC填充,另一个被排入使用期,如果你观看这些图表,你会看到这两个空格在使用中翻转

任期是长寿命对象驻留的地方,此堆通常相当大,并通过与eden不同的算法收集

Perm在某种程度上与堆的其余部分是分开的,它是常量字符串(任何被“插入”的字符串)和类字节码所在的位置。很少需要对其进行调优,通常只需要对大型应用程序或(严重)自动生成代码的应用程序进行调优

如果没有暂停时间,我真的不能说JVM设置是否正确,但是从堆大小来看,您似乎使用了大约1.2GB的分配。除非您的应用程序出现任何令人不快的暂停,否则我认为您已经完成了GC调优(人们经常在没有真正了解他们所做的事情的情况下使用大量的标志,直到您向自己证明需要这些标志为止)

您的目标是降低web应用程序的延迟,因此使用ConcurrentMarkSweep作为保留期收集器是明智的选择