zoukankan      html  css  js  c++  java
  • jvm提示:ignoring option PermSize=512m; support was removed in 8.0

    先说一下项目:项目是古老的spring项目,部署在tomcat下。
    今天晚上,项目中的trans服务上线,从catalina.out观察服务重启log

    信息: Stopping ProtocolHandler ["http-bio-8280"]
    四月 1, 2021 8:36:09 下午 org.apache.coyote.AbstractProtocol stop
    信息: Stopping ProtocolHandler ["ajp-bio-8209"]
    四月 1, 2021 8:36:09 下午 org.apache.coyote.AbstractProtocol destroy
    信息: Destroying ProtocolHandler ["http-bio-8280"]
    四月 1, 2021 8:36:09 下午 org.apache.coyote.AbstractProtocol destroy
    信息: Destroying ProtocolHandler ["ajp-bio-8209"]
    /www/epaysch/tomcat-trans-8280/bin/catalina.sh: 行 419: 15147 已杀死               "/usr/local/java/jre/bin/java" "-Dnop" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms1024m -Xmx2048m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048 -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8 -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs="" -classpath "/www/epaysch/tomcat-trans-8280/bin/bootstrap.jar:/www/epaysch/tomcat-trans-8280/bin/tomcat-juli.jar" -Dcatalina.base="/www/epaysch/tomcat-trans-8280" -Dcatalina.home="/www/epaysch/tomcat-trans-8280" -Djava.io.tmpdir="/www/epaysch/tomcat-trans-8280/temp" org.apache.catalina.startup.Bootstrap start
    Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=512m; support was removed in 8.0
    Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=2048; support was removed in 8.0
    四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server version: Apache Tomcat/7.0.90
    四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server built: Jul 2 2018 17:05:37 UTC 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server number: 7.0.90.0
    四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: OS Name: Linux 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: OS Version: 3.10.0-862.el7.x86_64 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Architecture: amd64 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Java Home: /usr/local/java/jre 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: JVM Version: 1.8.0_191-b12 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: JVM Vendor: Oracle Corporation 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: CATALINA_BASE: /www/epaysch/tomcat-trans-8280
    四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: CATALINA_HOME: /www/epaysch/tomcat-trans-8280
    四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dnop 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Xms1024m 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Xmx2048m 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Xss1024K 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -XX:PermSize=512m 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -XX:MaxPermSize=2048
    四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dfile.encoding=UTF8 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dsun.jnu.encoding=UTF8 四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
    四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Djava.endorsed.dirs=
    四月 1, 2021 8:36:29 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dcatalina.base=/www/epaysch/tomcat-trans-8280

    发现有如下提示。这是HotSpot虚拟机的一个提示。这句话的意思是,PermSize 、 MaxPermSize 这些参数在jdk1.8已经移除了。

    Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=512m; support was removed in 8.0
    Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=2048; support was removed in 8.0

    再看近期发版的服务重启log,也有这个提示。

    [viewlog@youfu-server tomcat-trans-8280]$ grep 'ignoring option PermSize' /www/epaysch/tomcat-trans-8280/logs/catalina.2021-03-2*.out 
    /www/epaysch/tomcat-trans-8280/logs/catalina.2021-03-23.out:Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=512m; support was removed in 8.0

    ps一下tomcat的进程,从中可以看到有-XX:PermSize=512m -XX:MaxPermSize=2048参数

    (这里分享个小技巧:我们使用viewlog账号查看生产服务器的log,通常只有grep、ls这些命令,而没有权限执行ps这些命令。 如下这种执行方式就是小窍门)

    [viewlog@youfu-server bin]$ cd /usr/bin/
    [viewlog@youfu-server bin]$ ./ps -ef |grep 'tomcat-trans'
    viewlog   3585  1391  0 12:09 pts/10   00:00:00 grep --color=auto tomcat-trans
    yfpay    30832     1  0 Apr08 ?        00:00:00 /bin/sh /www/epaysch/tomcat-trans-8280/bin/catalina.sh start
    yfpay    30833     1  0 Apr08 ?        00:02:07 /usr/local/sbin/cronolog /www/epaysch/tomcat-trans-8280/logs/catalina.%Y-%m-%d.out
    yfpay    30834 30832  1 Apr08 ?        01:23:05 /usr/local/java/jre/bin/java -Dnop -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms1024m -Xmx2048m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048 -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8 -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs= -classpath /www/epaysch/tomcat-trans-8280/bin/bootstrap.jar:/www/epaysch/tomcat-trans-8280/bin/tomcat-juli.jar -Dcatalina.base=/www/epaysch/tomcat-trans-8280 -Dcatalina.home=/www/epaysch/tomcat-trans-8280 -Djava.io.tmpdir=/www/epaysch/tomcat-trans-8280/temp org.apache.catalina.startup.Bootstrap start

    查看tomcat/bin/catalina.sh,有如下jvm配置参数

    JAVA_OPTS="-Xms1024m -Xmx2048m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048 -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"

    查看java版本,服务器jdk版本是1.8,即8.0

    [root@youfu-server ~]# java -version
    java version "1.8.0_191"
    Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

     查看java安装目录

    [root@youfu-server ~]# whereis java
    java: /usr/local/java /usr/local/java/bin/java
    [root@youfu-server ~]# which java
    /usr/local/java/bin/java

    经查,java8已经摈弃了Perm的配置,不能再配置Perm永久代参数。而是引入了一个新的概念Metaspace。

    在java虚拟机内部,class文件中包括类的版本、字段、方法、接口等描述信息,还有运行时常量池,用于存放编译器生成的各种字面量和符号引用。存放这些“永久”数据的区域叫做永久代(Permanent Generation,简称PermGen)。永久代是一片连续的堆空间。在JVM启动时通过命令行指定参数-XX:MaxPermSize来设定永久代最大可分配的内存空间。一个明显的问题是,PermGen的size很难调整,并且一旦这个值设置不当,当JVM加载的类信息容量超过了这个设定值后,应用将会报OOM错误(OutOfMemoryError)。
    JAVA从JDK7的HotSpot虚拟机开始永久代的移除工作。

    永久代在JDK8中被完全的移除了。所以永久代的参数-XX:PermSize和-XX:MaxPermSize也被移除了。
    在JDK8中,类的元数据信息(class metadata)不再存储在连续的堆空间上,而是被存储在叫做Metaspace的本地内存(native memory)中。
    由于类的元数据可以在本地内存(native memory)之外分配,所以其最大可利用空间是整个系统内存的可用空间。这样,我们程序猿将不再会遇到OOM错误。

    那么,解决办法就是修改java配置参数为:

    JAVA_OPTS="-Xms1024m -Xmx2048m -Xss1024K -XX:MataspaceSize=512m -XX:MaxMetaspaceSize=2048 -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"

    参考Java PermGen 去哪里了? ,本文对JVM永久代以及JDK8 JVM里的Metaspace有全面的介绍。是一篇好文。

  • 相关阅读:
    网站构建前期知识掌握
    Lucene学习之CURD
    Lucene学习之初步了解
    jQuery的extend详解
    jQuery和DOM对象之间的转换
    Tomcat教程
    Log4j配置
    Java学习之Java中常用对象
    Java学习之Comparable与Comparator的区别
    测试工具。
  • 原文地址:https://www.cnblogs.com/buguge/p/14608565.html
Copyright © 2011-2022 走看看