没有足够的内存来完成分析

时间:2019-01-19 15:41:53

标签: jenkins-pipeline heap fortify

我面临与强化扫描相关的非常不寻常的错误。它从昨天晚上开始,我一直在努力解决它,因为它影响了整个团队的工作。我在Jenkins控制台中收到以下错误消息。

我尝试通过在Jenkins管道代码中使用以下参数来增加内存和Java堆大小来进行故障排除,但这样做也没有帮助。 fortifyMemory: '-Xmx6G -Xms2400M -Xss48M'

我尝试使用排除更多文件 sourceExclusions: 'src/main/resources/**/*.*, 但这也没有用。

我在线发现可能使用并行处理并将java版本类型更改为64位-64可能解决了该问题,但由于没有太多可用信息,因此无法在Jenkins管道中正确配置它。

如果有人知道如何在下面的管道代码中传递这两个标志,或者是否有其他解决方案,请告诉我。

stage('Fortify Scan') {
    agent {
        label 'docker-fortify-slave'
    }
    steps {
        unstash 'build'
        fortifyscanjava([
            useExternalDependencyDirectory: false,
            buildVersion: "${TAG_VAL}",
            fortifyCredentialsId: "fortify-credentials",

            fortifyJavaVersion: '1.8',

            sourceDirectory: "${env.WORKSPACE}/dist",
            sourceExclusions: '',
            criticalThreshold: 0,
            fortifyMemory: '-Xmx32G -Xms4800M -Xss196M',
            highThreshold: 0,
            mediumThreshold: 1000,
            lowThreshold: 1000,
            fortifyVersion: '17.20',
            failBuildAfterThresholdPassed: true,
            archiveReports: true,
            uploadScan: false,
            sourceAnalyzerArgs: '',
            onlyNewIssues: true,
            outputFormatHtml: true,
            additionalIssueFilters: 'analysis:!Not an Issue'
        ])
    }
}

3 个答案:

答案 0 :(得分:1)

Fortify SCA占用大量内存,无法扫描中型到大型应用程序。

在您的示例的第13行附近,删除“ fortifyMemory:'-Xmx1G -Xms600M -Xss24M -mt'”。

围绕第17行,如果可能,将内存增加到“ -Xmx16G”(或任何可能的值)。基本上,要继续为问题添加更多的内存,直到Fortify发出的“内存不足”警告/错误消失为止。

还...

可能发生的情况的说明

Fortify SCA的“ -mt”选项意味着您想要启用并行分析模式,该模式旨在通过创建多个从属进程来协助扫描,从而尝试加快源代码的扫描速度。使用“ -mt”,Fortify将为主机上的每个cpu内核自动创建1个从属进程,由于使用了“ -Xmx1GB”,Fortify将为每个进程分配1GB的内存。因此,您看到的错误可能是因为一个或多个从属设备的内存不足。

结论

对于此初始扫描,请勿使用并行分析模式。这就是我们在您的示例中删除第13行的原因。此外,您在第17行再次具有重复的内存配置设置。 成功完成扫描后,请尝试拨回内存量,然后尝试使用并行分析模式进行播放。 当使用并行分析模式时,用于计算使用“ -Xmx”分配多少内存的公式可能是: (-2GB)/

答案 1 :(得分:0)

在您的情况下,最好使用CloudScan。

https://www.microfocus.com/documentation/fortify-software-security-center/1820/CloudScan_Guide_18.20.pdf

“翻译阶段在构建机器上完成,该阶段不需要处理器和时间。在翻译完成后,CloudScan会生成一个程序包,然后将其移动到分布式机器(传感器)云中以进行扫描。为了释放构建机器,此过程使您可以轻松地向云中添加更多资源并根据需要扩展系统,而不必中断构建过程。Fortify软件安全中心可以指导CloudScan直接将FPR文件输出到服务器。

答案 2 :(得分:0)

在Fortify扫描过程中可能会发生System.OutOfMemoryException错误。

对于.net文件,我们使用一个名为4gb_patch.exe的小工具解决了在Fortify扫描阶段使用的dotnet-translator.exe文件补丁的问题。该工具修补x86可执行文件,以使它们在x64平台上具有4 GB的虚拟内存(而不是2 GB)。您可以从https://ntcore.com/?page_id=371下载该工具。

dotnet-translator.exe文件可以在以下位置找到: C:\ Program Files \ HPE_Security \ Fortify_SCA_and_Apps_xx.xx \ Core \ private-bin \ sca \ dotnet-translator.exe

当然,您需要使用Fortify SCA版本更改XX.xx。 ;)