我正在运行强化静态代码扫描。
mainSrc>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中已经过时。
有什么想法吗?
还有增加PermGen空间的选项
增加置换空间
-XX:MaxPermSize=128m
还有一个选项可以在PermGen空间上启用垃圾收集
-XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
尽管如此,你还是应该向惠普咨询是否真的需要增加PermGen的空间,这也可能是软件中的一个错误。PermGen空间内存不足错误通常是由内存泄漏引起的。
-
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来监视该过程。
我认为在Java 8中,PermGen空间已经被Metaspace完全取代。JVM选项
-XX:PermSize and -XX:MaxPermSize
已被取代
-XX:MetaSpaceSize and -XX:MaxMetaspaceSize respectively.
试试看。