您的位置:首页 > 其它

开发过程中jvm环境设置与查询

2016-12-28 14:52 337 查看
在开发过程中,常常由于项目占用的内存空间比较大,在项目启动或运行的过程中常常会抛出

eclipse JVM配置

java.lang.OutOfMemoryError

java.lang.OutOfMemoryError: PermGen space

等的由于JVM堆栈或永久区空间不足的错误,导致不能正常运行

在eclipse中可通过如下配置修改JVM的运行环境:

-Xmx1024m
-Xms1024m -XX:NewRatio=4 -XX:MaxPermSize=1024m

可根据情况进行调整

在eclipse中点击运行按钮下拉菜单,选择【Run Configurations】,选择要运行的程序或tomcat,在【Arguments】栏下的【VM arguments】参数下追加以上的配置信息就OK了。

eg:





下次再运行的时候就再也不怕JVM的资源问题了,但前提你得要有足够的内存资源供分配额。

windows下jvm运行情况查询

如要查看当前JVM下运行的状态,直接用JDK自带的工具查看就可以,在windows下找到JDK安装目录下的jvisualvm.exe,双击打开就可以运行了。



linux下JVM允许情况查询

在linux下查询jvm运行状态我一般这样查询:

[root@localhost ~]# jps
9862 jar
714 Bootstrap
1114 Jps
先通过jps查询出当前运行的进程ID,再通过jstat 查询出JVM相关的运行状态

[root@localhost ~]# jstat -gc 9862 1000 5
S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
1728.0 1728.0  93.0   0.0   14272.0   6821.0   35312.0    34974.2   47808.0 47538.1   6288   14.705   6      0.613   15.318
1728.0 1728.0  93.0   0.0   14272.0   6821.0   35312.0    34974.2   47808.0 47538.1   6288   14.705   6      0.613   15.318
1728.0 1728.0  93.0   0.0   14272.0   6821.0   35312.0    34974.2   47808.0 47538.1   6288   14.705   6      0.613   15.318
1728.0 1728.0  93.0   0.0   14272.0   6821.0   35312.0    34974.2   47808.0 47538.1   6288   14.705   6      0.613   15.318
1728.0 1728.0  93.0   0.0   14272.0   6821.0   35312.0    34974.2   47808.0 47538.1   6288   14.705   6      0.613   15.318
术语解释如下:
#S0C 生还者区0 容量(KB)
#S1C 生还者区1 容量(KB)
#S0U 生还者区0 使用量(KB)
#S1U 生还者区1 使用量(KB)
#EC 伊甸园区容量(KB)
#EU 伊甸园区使用量(KB)
#OC 老年区容量(KB)
#OU 老年区使用量(KB)
#PC 永久区容量(KB)
#PU 永久区使用量(KB)
#YGC 新生代GC次数
#YGCT 新生代GC时间
#FGC full GC 事件的次数
#FGCT full GC的时间
#GCT 总GC时间


从上面的例子可以看出,OC OU  PC PU这个栏的数据的数据老年区和永久区很快就会满了。

由于老年区存放的能被GC进行回收,故不对其进行优化配置,程序也不会出现内存溢出,所以对于这里OU可以不用对其进行配置。

由于PU永久区存放的是目前内存中的对象信息,如这个程序中一个List里存了大量数据,那么它就会存放在永久区中, 如果不对其进行优化,会导致程序出现outofmemoryError的错误异常。在这里,我刚刚查看的是tomcat的运行情况,那么就很有可能会导致出现tomcat在运行过程中宕机的问题,故需要根据机器的物理信息对其进行优化配置

linux下tomcat的JVM相关参数配置

tomcat对永久区的配置方法如下:

修改TOMCAT_HOME/bin/catalina.sh 
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: 如
JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m" 

我这里这样设置的

# Bugzilla 37848: only output this if we have a TTY
if [ $have_tty -eq 1 ]; then
#这里是我添加的配置信息,-Xms 初始化堆大小 -Xmx最大堆大小   -XX:PermSize 初始化永久区大小  -XX:MaxPermSize:最大永久区大小
JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=256m"
echo "Using CATALINA_BASE:   $CATALINA_BASE"
echo "Using CATALINA_HOME:   $CATALINA_HOME"
echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
保存,重启tomcat再查询下状态信息如下:

[root@localhost bin]# jps
9862 jar
1269 Bootstrap
1393 Jps
[root@localhost bin]# jstat -gc 1269 1000 3
S0C    S1C    S0U    S1U      EC       EU        OC         OU       PC     PU    YGC     YGCT    FGC    FGCT     GCT
8704.0 8704.0 5012.6  0.0   69952.0   6781.4   174784.0   60132.0   65536.0 41832.6     12    0.272   0      0.000    0.272
8704.0 8704.0 5012.6  0.0   69952.0   6781.5   174784.0   60132.0   65536.0 41832.6     12    0.272   0      0.000    0.272
8704.0 8704.0 5012.6  0.0   69952.0   6781.5   174784.0   60132.0   65536.0 41832.6     12    0.272   0      0.000    0.272
[root@localhost bin]#
这里的pc明显增大了许多,说明配置生效了

JAR程序JVM相关参数配置

对于某些JAR包的程序,它由于可能直接通过java -jar命令来运行,也可以对其进行相关的JVM配置,如spring boot的jar应用

其方法是直接在java 命令后加下参数即可,如

java -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=256m -jar program1.jar

我在这里这样配置:

nohup java -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m -jar myProgram.jar &
采用nohup让这个程序永久在机器上后台运行

在网上查询这些相关资料时,发现这篇博文很不错,对jstat的使用记录得很清楚:

地址--> http://blog.csdn.net/maosijunzi/article/details/46049117
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: