你能帮我解决以下问题吗?
语境:
我们正试图将我们现有的运行在Java6(Glassfish)上的应用程序迁移到Java8(在Jetty9上)。 之前,我们能够在Java7上成功迁移相同的设置(在jetty9上)。 但客户决定现在就用Java 8。 在这个过程中,我们遇到了一些内存问题,下面是细节:
问题描述:
共享库 – 64位Ubuntu上的Java 32位
Path.equals()在Windows 10上为两个不同的文件夹(小写m和大写M)返回true
将JDK添加到netbeans 8.1
在ubuntu 14.04中安装JDK8
选定的目录不是JDK的有效家园 – Ubuntu上的Intellij IDEA
启动Jetty服务器后,java进程的初始(RES)内存使用量约为5.5克。 在运行应用程序一段时间后,内存使用缓慢上升,并消耗机器上最大的可用物理内存(8g),最终导致服务器/系统崩溃。
这个问题只在linux环境下遇到。 在Windows环境中找不到这样的问题。
Profiler发现:
使用VisualVM和jconsole监视服务器。 在两个分析器中,JVM的内存(堆和非堆)使用率都低于分配的限制。
环境详情:
Java Version : 8 Server : Jetty 9.2.10 OS : linux on a virtual machine(Linux version 2.6.32-279.14.1.el6.x86_64 ([email protected]) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Tue Nov 6 23:43:09 UTC 2012 Java Options : -xms3072M -server -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:+UseG1GC -XX:MaxGCPauseMillis=75 -Xmx3072M -Xss1024K -XX:InitialCodeCacheSize=192M -XX:CodeCacheExpansionSize=3M -XX:CodeCacheMinimumFreeSpace=3M -XX:ReservedCodeCacheSize=600M -XX:MinMetaspaceExpansion=3M -XX:MaxMetaspaceExpansion=18M -XX:MaxMetaspaceSize=500M -XX:MaxDirectMemorySize=288M -XX:CompressedClassspaceSize=512M -XX:ParallelGCThreads=12 -XX:ConcGCThreads=4 -Dsun.rmi.dgc.server.gcInterval=86400000 -Dsun.rmi.dgc.client.gcInterval=86400000
PS:请不要将其标记为重复。 我已经阅读了很多关于stackoverflow的答案,但没有解决或解决我的问题。
更新
我开始使用以下Java选项的docker,从那时起,内存使用量在4.5g-4.8g(大约142小时)之间。 它对我来说看起来很稳定。 我通过java选项标记(Xmx&MetaspaceSize)保留了大约2g的内存,但总是使用额外的2.5g。 这是在Linux机器上的Java 8的正常行为?
使用的Java选项:
-server -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=../logs/jvm.log -XX:+UseG1GC -XX:MaxGCPauseMillis=75 -XX:ParallelGCThreads=12 -XX:ConcGCThreads=12 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:../logs/gc.log -XX:NativeMemoryTracking=summary -Xmx1500m -Xss256k -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/logs/jetty.hprof -Dsun.rmi.dgc.server.gcInterval=86400000 -Dsun.rmi.dgc.client.gcInterval=86400000
谢谢你的时间!
JAVA应用程序随机崩溃的DLL问题
Windows上的Java 8 64位,符合FIPS 140标准的NSS
Linux上的JDK 1.8缺lessJNI包含文件
降级到1.7后,我仍然在使用java -version时看到Java 1.8
在安装JDK之后,Chrome无法正常工作
由于注释模块扫描jar并存在内存泄漏,Java8 / 9似乎是Jetty中的一个问题。 参考。 https://github.com/eclipse/jetty.project/issues/575 。 我的解决方案(因为我不使用Jetty注释)是通过注释掉jetty / modules / annotations.mod中的行来禁用注释模块。 所以领带文件看起来像这样:
# # Jetty Annotation Scanning modulee # [depend] # Annotations needs plus,and jndi features plus [lib] # Annotations needs jetty annotation jars lib/jetty-annotations-${jetty.version}.jar # Need annotation processing jars too #lib/annotations/*.jar [xml] # Enable annotation scanning webapp configurations #etc/jetty-annotations.xml
编辑1 – 替代解决方案
关闭所有的注释扫描可能过于激烈,它也会依赖于jsp。 另一种方法是提供一个Web应用程序上下文,使用模式来限制扫描。 把它保存在一个xml文件中,并将它与战争一起部署在webapps中,或者将它包含在战争中。
<Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextpath">/[myApp]</Set> <Set name="war">/[DIRECTORY]/[myApp[.war</Set> <Call name="setAttribute"> <Arg>org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern</Arg> <Arg>SCAN-NO-JARS</Arg> </Call> </Configure>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。