我正在运行强化静态代码扫描。
main\Src>sourceanalyzer -64 -Xmx6500m -b project -scan -f project.fpr
JDK是1.8
java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
20小时后,我收到了PermGen OOM错误
[error]: Unexpected exception: java.lang.OutOfMemoryError: PermGen space
^Cendering results 99% [====================]
根据大量资源,PermGen在Java8中已经过时了。
任何想法?
答案 0 :(得分:1)
还可以选择增加PermGen空间
-XX:MaxPermSize=128m
还可以选择在PermGen空间上启用垃圾回收
-XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
尽管如此,您应该向HP咨询是否确实需要增加PermGen空间,它也可能是软件中的错误。 PermGen空间内存不足错误通常是由内存泄漏引起的。
答案 1 :(得分:1)
Fortify使用它自己的JRE(在[Fortify Install Root]\jre
和[Fortify Install Root]\jre64
下查看)。
如果使用-debug-verbose -logfile Project_Scan.txt
,您可以查看扫描引擎是否存在内存压力问题,因为它经常会占用内存使用量。
请确保您使用的是最新版本的Fortify。如果您的扫描需要20个小时,则可能是最新版本解决了速度和内存问题。最新的是4.20。
为了加快扫描速度,您是否看过并行分析模式?这是在4.00中引入的,您可以在用户指南附录B中阅读它。
我在一个点上进行了一些重度内存调整,并且以下内容运行良好。它也适用于扫描周期。 请注意,这是一个极端的内存使用情况,这不是所有Fortify使用的最佳选择。
-XX:MaxPermSize=256m -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+UseCompressedOops
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+DisableExplicitGC
-XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled
-XX:+CMSScavengeBeforeRemark -XX:CMSInitiatingOccupancyFraction=68
您可以/应该使用JConsole来观看该过程。
答案 2 :(得分:-1)
我认为在Java 8中,PermGen空间已被Metaspace完全取代。 JVM选项
-XX:PermSize and -XX:MaxPermSize
已被
取代-XX:MetaSpaceSize and -XX:MaxMetaspaceSize respectively.
试试。