使用Fortify的PermGen内存不足错误



我正在运行强化静态代码扫描。

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空间内存不足错误通常是由内存泄漏引起的。

  1. Fortify使用自己的JRE(请参阅[Fortify Install Root]jre[Fortify Install Root]jre64)。

  2. 如果您使用-debug-verbose -logfile Project_Scan.txt,您可以看到扫描引擎是否存在内存压力问题,因为它每隔一段时间就会转储内存使用情况。

  3. 请确保您使用的是最新版本的Fortify。如果你的扫描需要20个小时,可能是最新版本解决了速度和内存问题。最近的是4.20。

  4. 为了加快扫描速度,您看过并行分析模式吗?这是在4.00中介绍的,您可以在《用户指南》附录B中阅读。

  5. 有一次,我在翻译周期中做了一些繁重的记忆调整,下面的工作做得很好。它也应该适用于扫描周期请注意,这是一个极端的内存使用情况,并不是所有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
    
  6. 您可以/应该使用JConsole来监视该过程。

我认为在Java 8中,PermGen空间已经被Metaspace完全取代。JVM选项

-XX:PermSize and -XX:MaxPermSize 

已被取代

-XX:MetaSpaceSize and -XX:MaxMetaspaceSize respectively. 

试试看。

最新更新