关于设置Java虚拟机(JVM)的内存问题

关于设置Java虚拟机(JVM)的内存问题,第1张

最近做毕设时 遇到了一点小问题 在解析dblp xml文件时(该文件很大 最新版本为 MB) 老是报错

java lang OutOfMemoryError: Java heap space

最后通过查资料才知道 这是由于JVM堆内存不足造成的 JVM在启动动的时候一般会设置JVM Heap的值

其初始空间(即 Xms)是物理内存的 / 最大空间( Xmx)不可超过物理内存 在JVM中如果 %的时间是用于GC 且可用的Heap size 不足 %的时候将抛出此异常信息 出现这种问题可以通过修改JVM heap大小解决

点击(此处)折叠或打开

java Xms M Xmx M className

以上设置JVM初始化堆内存为 M 最大可用堆内存为 M

( )在命令行中设置的方法就如上面所述

( )在Eclipse中可以这样设置

在eclipse的 Run >Run Configurations >Arguments下的VM Arguments中设置

Xms M Xmx M

另外可以使用 java X查看其它JVM参数情况

点击(此处)折叠或打开

D:\work>java X

Xmixed mixed mode execution (default)

Xint interpreted mode execution only

Xbootclasspath:<directories and zip/jar files separated by >

set search path for bootstrap classes and resources

Xbootclasspath/a:<directories and zip/jar files separated by >

append to end of bootstrap class path

Xbootclasspath/p:<directories and zip/jar files separated by >

prepend in front of bootstrap class path

Xnoclassgc disable class garbage collection

Xincgc enable incremental garbage collection

Xloggc:<file>log GC status to a file with time stamps

Xbatch disable background pilation

Xms<size>set initial Java heap size

Xmx<size>set maximum Java heap size

Xss<size>set java thread stack size

Xprof output cpu profiling data

Xfuture enable strictest checks anticipating future default

Xrs reduce use of OS signals by Java/VM (see documentation)

Xcheck:jni perform additional checks for JNI functions

Xshare:off do not attempt to use shared class data

Xshare:auto use shared class data if possible (default)

Xshare:on require using shared class data otherwise fail

The X options are non standard and subject to change without notice

可以通过java lang Runtime的一些方法查看jvm的内存使用情况

点击(此处)折叠或打开

System out println( Total Memory: + Runtime getRuntime() totalMemory() / ( * + MB )

System out println( Free Memory: + Runtime getRuntime() freeMemory() / ( * ) + MB )

System out println( Max Memory: + Runtime getRuntime() maxMemory() / ( * ) + MB )

maxMemory()这个方法返回的是java虚拟机(这个进程)能构从 *** 作系统那里挖到的最大的内存 以字节为单位

totalMemory()这个方法返回的是java虚拟机现在已经从 *** 作系统那里挖过来的内存大小 也就是java虚拟机这个进程当时所占用的所有内存

freeMemory为当前jvm中没有使用的内存

附 jvm参数说明 (转自)

server:一定要作为第一个参数 在多个CPU时性能佳

Xms java Heap初始大小 默认是物理内存的 /

Xmx java heap最大值 建议均设为物理内存的一半 不可超过物理内存

XX:PermSize:设定内存的永久保存区初始大小 缺省值为 M (我用visualvm exe查看的)

XX:MaxPermSize:设定内存的永久保存区最大 大小 缺省值为 M (我用visualvm exe查看的)

XX:SurvivorRatio=   :生还者池的大小 默认是 如果垃圾回收变成了瓶颈 您可以尝试定制生成池设置

XX:NewSize: 新生成的池的初始大小 缺省值为 M

XX:MaxNewSize: 新生成的池的最大大小    缺省值为 M

如果 JVM 的堆大小大于 GB 则应该使用值 XX:newSize= m XX:MaxNewSize= m XX:SurvivorRatio= 或者将堆的总大小的 % 到 % 分配给新生成的池 调大新对象区 减少Full GC次数

+XX:AggressiveHeap 会使得 Xms没有意义 这个参数让jvm忽略Xmx参数 疯狂地吃完一个G物理内存 再吃尽一个G的swap

Xss 每个线程的Stack大小 Xss 这使得JBoss每增加一个线程(thread)就会立即消耗 M内存 而最佳值应该是 K 默认值好像是 k

verbose:gc 现实垃圾收集信息

Xloggc:gc log 指定垃圾收集日志文件

Xmn young generation的heap大小 一般设置为Xmx的 分之一

XX:+UseParNewGC 缩短minor收集的时间

XX:+UseConcMarkSweepGC 缩短major收集的时间 此选项在Heap Size 比较大而且Major收集时间较长的情况下使用更合适

XX:userParNewGC 可用来设置并行收集【多CPU】

XX:ParallelGCThreads 可用来增加并行度【多CPU】

lishixinzhi/Article/program/Java/hx/201311/26103

Elasticsearch是基于Java构建的,需要至少 Java8 来运行它。只支持Oracle的Java和OpenJDK。所有Elasticsearch节点和客户机都应该使用相同的JVM版本。

我们推荐您安装Java1.8.0_131版本或者Java 8发行版系列的后续版本。我们推荐您使用 LTS JAVA 版本。如果使用了已知的糟糕的Java版本,Elasticsearch将拒绝启动。

Elasticsearch将使用的Java版本可以通过设置JAVA_HOME环境变量进行配置。

默认情况下,Elasticsearch告诉JVM使用最小和最大大小为1 GB的堆。 在转移到生产环境时,重要的是配置堆大小,以确保Elasticsearch有足够的可用堆。

Elasticsearch将通过Xms(最小堆大小)和Xmx(最大堆大小)设置分配在jvm.options文件中指定的整个堆。

这些设置的值取决于服务器上可用RAM的数量。好的经验法则是:

显示启用了从零开始的压缩oops而不是:

下面是如何通过jvm.options文件设置堆大小的例子:

还可以通过环境变量设置堆大小。这可以通过注释掉jvm.options文件中的Xms和Xmx设置来实现并通过ES_JAVA_OPTS设置这些值:

注意: 为Windows服务配置堆与上述配置不同。Windows服务最初填充的值可以如上配置,但在安装服务之后会有所不同。有关更多细节,请参阅 Windows服务文档 。

默认情况下,Elasticsearch配置JVM将堆从内存溢出异常转储到默认数据目录(/var/lib/elasticsearch是针对RPM和Debian包发行版的,Elasticsearch安装根目录下的data目录是针对tar和zip存档发行版的)如果此路径不适合接收堆转储,则应修改条目 -XX:HeapDumpPath=… 在jvm.options文件中。如果指定目录,JVM将根据运行实例的PID为堆转储生成一个文件名。如果指定的是固定文件名而不是目录,那么当JVM需要对内存溢出异常执行堆转储时,文件必须不存在,否则堆转储将失败。

默认情况下,Elasticsearch启用GC日志。这些都是在jvm.options中配置的和默认设置到与Elasticsearch日志相同的默认位置。默认配置每64 MB旋转日志一次,最多可以消耗2 GB的磁盘空间。

默认情况下,Elasticsearch配置JVM将致命错误日志写入默认日志目录(/var/log/elasticsearch是RPM和Debian包发行版的,Elasticsearch安装根目录下的logs目录是针对tar和zip存档发行版的)。这些日志是JVM遇到致命错误(例如,分割错误)时生成的。如果这个路径不适合接收日志,您应该在jvm.options文件中修改条目 -XX:ErrorFile=… 为一个替代路径。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6406005.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-21
下一篇 2023-03-21

发表评论

登录后才能评论

评论列表(0条)

保存