探究Linux下JVM修改的方法 (linux jvm 修改)

随着大数据、云计算、等技术的发展,Java已经成为一种广泛应用于企业级应用和系统开发的编程语言。Java语言虽然具备很多优势,如平台无关性、面向对象编程等,但其性能却成为了一个亟待解决的问题。而与此同时,Linux作为一个稳定的操作系统成为了Java的首选运行平台之一。

JVM是Java平台的核心组件,负责Java代码与底层操作系统之间的交互,JVM对Java的应用性能有很大的影响,JVM参数的配置和调优可以显著提高Java应用的性能。本文将介绍如何在Linux下修改JVM参数来优化Java应用性能。

一、查看JVM参数

当我们安装Linux系统时,一般都会自带OpenJDK或OracleJDK。我们可以使用`java -version`命令查看当前Java版本:

“`

java version “1.8.0_73”

Java(TM) SE Runtime Environment (build 1.8.0_73-b02)

Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)

“`

同样,我们可以使用`java -XX:+PrintFlagsFinal`命令来查看当前JVM参数:

“`

[Global flags]

-XX:HeapDumpPath= Path to directory or filename for heap dumps; ‘-‘ means stdout (from heap dumper); ” means absolute path

-XX:InitialHeapSize= Initial Heap Size (in bytes)

-XX:MaxHeapSize= Maximum Heap Size (in bytes)

-XX:MaxMetaspaceSize= Maximum size of Metaspace (in bytes)

-XX:MaxPermSize= Maximum Permanent Generation Size (in bytes)

“`

可以看到,JVM参数有很多,但是并非所有的参数都需要手动修改。在很多情况下,我们只需要根据当前系统的硬件配置和应用的实际需求来适当调整JVM参数即可。

二、修改JVM参数

如果我们需要手动修改JVM参数,更先要做的是理解这些参数的作用。如下表所示,列出了一些常用的JVM参数,并说明了它们的作用。

| 参数 | 作用 |

| —- | —- |

| -Xms | 初始堆大小 |

| -Xmx | 更大堆大小 |

| -Xmn | 新生代大小 |

| -XX:PermSize= | 持久代(永久代)初始大小 |

| -XX:MaxPermSize= | 持久代(永久代)更大大小 |

| -XX:MaxMetaspaceSize= | Metaspace更大大小 |

| -XX:SurvivorRatio= | Eden区与Survivor区的比例 |

| -XX:NewRatio= | 新生代与老年代的比例 |

| -XX:MaxTenuringThreshold= | 对象晋升年龄阈值 |

| -XX:+PrintGCDetls | 打印GC详细信息 |

| -XX:+HeapDumpOnOutOfMemoryError | 当Java应用发生OutOfMemoryError错误时,导出dump文件 |

| -XX:HeapDumpPath= | 导出dump文件的路径 |

例如,如果我们需要将Java应用的堆内存调整为2G,我们可以将`-Xmx`参数设置为`-Xmx2g`。同样的,如果JVM需要使用10G的物理内存,我们可以将`-Xmx`设置为`-Xmx10g`。

如果我们需要将打印GC详细信息,我们可以在JVM启动参数中添加`-XX:+PrintGCDetls`参数。

我们可以通过修改`/etc/environment`文件来修改系统全局的JVM参数:

“`

_JAVA_OPTIONS=-Xmx2g

“`

这里的`-Xmx2g`参数表示JVM的堆内存设置为2G。

也可以通过在运行Java应用程序时指定JVM参数来进行动态修改:

“`

java -Xmx2g -jar myapp.jar

“`

以上命令表示使用2G内存来运行myapp.jar应用程序。

三、修改JVM参数的优化方法

在修改JVM参数时,不是更大的堆内存就能带来更优的性能。实际上,将JVM的内存设置得过大,反而会导致应用程序性能下降。

以下是一些优化Java应用程序性能的建议:

1. 避免使用并行GC。

并行GC试图充分利用多个CPU来并行执行GC,从而加速应用程序的运行速度。然而,在高并发或多线程环境中,使用并行GC会导致应用程序的Stw时间过长、GC后的内存碎片过多等问题。

建议使用CMS或G1 GC来代替并行GC。CMS GC主要用于临时应用程序,它允许在应用程序运行时进行GC,尽可能减少Stw时间;G1 GC可优化GC的内存碎片问题,使得既可以突出应用程序性能,又能同时保证良好的GC性能。

2. 合理设置堆的大小。

随着JVM使用的内存大小增加,GC的性能也会变差。因此,为了获取更佳性能,必须找到堆大小与GC的平衡点。建议使用工具如jstat、jmap等监控工具来确认峰值GC的大小。

3. 关闭不必要的GC日志。

GC日志会产生一些不必要的开销,从而降低应用程序的性能。建议只在需要进行GC调试时,开启GC日志以辅助性能优化。

4. 合理设置对象晋升年龄阈值。

对象晋升年龄阈值是指当一个对象经历了多次GC后,如果它任然存在,就会晋升为老年代。降低晋升年龄的阈值会加重GC的负担。建议适当提高晋升年龄的阈值。

结论

相关问题拓展阅读:

linux tomcat jvm内存 多少合适

为了解决tomcat在进行大并发请求时,出现内存溢出的问题,请修改tomcat的内存大小,其中分为以下两种方式:

一、使用 catalina.bat 等命令行方式运行的 tomcat

查看系统是否能支持所填更大内存命令:java -Xmx1024m -version,当所填值不合法时,执行该命令将报错

1、修改 tomcat\bin\Catalina.bat 文件

windows环境下:

在166行左右

rem Execute Java with the applicable properties ”以下每行

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs=”%JAVA_ENDORSED_DIRS%” -classpath “%CLASSPATH%” -Dcatalina.base=”则正困%CATALINA_BASE%” -Dcatalina.home=”%CATALINA_HOME%” -Djava.io.tmpdir=”%CATALINA_TMPDIR%” %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

在 %DEBUG_OPTS% 后面添加-Xms256m -Xmx512m

linux环境下:

打开在Tomcat的安装目录的bin文件的catalina.sh文件,进入编辑状态清颤.

在注释后面加上如下脚本:

JAVA_OPTS=’-Xms512m -Xmx1024m’

JAVA_OPTS=”$JAVA_OPTS -server -XX:PermSize=64M -XX:MaxPermSize=256m”

其中 JAVA_OPTS=’-Xms512m -Xmx1024m’ 是设置Tomcat使用的内存的大小.

-XX:PermSize=64M -XX:MaxPermSize=256m 指定类空间(用于加载类)的内存大小

保存后,重新以命令行的方式运行 tomcat ,即可,然后通过最后面介绍的如何观察tomcat现有内存情况的方法进行查看是否已经变更成功。

二、使用 系统中的 “服务”,或者开始菜单的可执行程序运行的tomcat

1、关闭 现在正在运行的tomcat

2.1

如果是tomcat 5.5 或者是 5.0.28 之后的版本,在 Java 选项卡中,下方,会有

Inital memory Pool:

Maximum memory Pool:

Thread stack size:

三个输入框,在这里即可不用孙念做上面的操作,直接配置内存大小,只需要设置

Inital memory Pool 为 256

Maximum memory Pool 为 512

点击确定后,重启tomcat 生效

如果您是低版本的tomcat,发现没有上面那几个录入框,请看下面的操作步骤

在开始菜单中,找到“Apache Tomcat 5.0”,并选择“Configure Tomcat”,在弹出的对话框窗口中,切换到 Java VM 选项卡,并在 Java Options 输入框的最前面输入

-Xms256m -Xmx512m

即输入框中的内容会像下面的代码(与自己的环境有所区别)

-Xms256m -Xmx512m

-Dcatalina.home=”C:\tomcat5″

-Djava.endorsed.dirs=”C:\tomcat5\common\endorsed”

-Xrs

设置完后,点击“确定”,并重启tomcat即可。

三、查看现有tomcat的内存大小情况

1、启动tomcat

2、访问 ,并输入您在安装tomcat时输入的用户与口令,如 admin ,密码 admin(密码是您在tomcat安装时输入的)

注:添加用户,修改conf/tomcat-users.xml

3、进入了Server Status页面,可以在JVM表格中看到

Free memory: 241.80 MB Total memory: 254.06 MB Max memory: 508.06 MB

上面的文字即代表了,当前空闲内存、当前总内存、更大可使用内存三个数据。

确定了更大内存足够大时,tomcat即可正常运转

最后总结下内存设置中常用的几个参数

(1)-Xms,jvm启动时,初始分配的堆/栈内存

(2)-Xmx,JVM更大允许分配的堆/栈内存,按需分配

(3)-Xss,设定每个线程的堆栈大小

(4)-XX:PermSize,JVM初始分配的非堆内存

(5)-XX:MaxPermSize,JVM更大允许分配的非堆内存,按需分配

举例:

linux jvm 修改的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux jvm 修改,探究Linux下JVM修改的方法,linux tomcat jvm内存 多少合适的信息别忘了在本站进行查找喔。


数据运维技术 » 探究Linux下JVM修改的方法 (linux jvm 修改)