使用Fortify PermGen outofmemory错误

时间:2014-10-16 09:51:01

标签: java out-of-memory permgen fortify

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

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中已经过时了。

任何想法?

3 个答案:

答案 0 :(得分:1)

还可以选择增加PermGen空间

Increase permgen space

-XX:MaxPermSize=128m

还可以选择在PermGen空间上启用垃圾回收

-XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled

尽管如此,您应该向HP咨询是否确实需要增加PermGen空间,它也可能是软件中的错误。 PermGen空间内存不足错误通常是由内存泄漏引起的。

答案 1 :(得分:1)

  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来观看该过程。

答案 2 :(得分:-1)

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

-XX:PermSize and -XX:MaxPermSize 

已被

取代
-XX:MetaSpaceSize and -XX:MaxMetaspaceSize respectively. 

试试。