随着大数据、云计算、等技术的发展,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内存 多少合适
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内存 多少合适的信息别忘了在本站进行查找喔。