Недостаточно памяти для завершения анализа - PullRequest
0 голосов
/ 19 января 2019

Я столкнулся с очень необычной ошибкой, связанной с сканированием укреплений.Это началось вчера вечером, и я изо всех сил пытался решить его, так как это влияло на работу всей команды.Я получаю следующее сообщение об ошибке в консоли Jenkins.

Я попытался устранить неполадку, увеличив размер памяти и размер кучи Java с помощью следующего аргумента в коде конвейера Jenkins, но это тоже не помогло.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'
        ])
    }
}

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Может быть, в вашем сценарии лучше использовать CloudScan.

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

"Фаза трансляции, которая не требует много ресурсов и времени, завершена на сборочном компьютере. После завершения перевода CloudScan генерирует пакет, который затем перемещается в распределенное облако машин (датчиков) для сканирования. Кроме того, чтобы освободить сборочные машины, этот процесс позволяет легко добавлять больше ресурсов в облако и расширять систему по мере необходимости, не прерывая процесс сборки. Кроме того, Fortify Software Security Center может направить CloudScan на вывод файлов FPR непосредственно на сервер ".

0 голосов
/ 22 января 2019

Fortify SCA занимает много памяти для сканирования средних и крупных приложений.

Вокруг строки 13 в вашем примере удалите "fortifyMemory: '-Xmx1G -Xms600M -Xss24M -mt',".

Вокруг строки 17, если это возможно, увеличьте объем памяти до "-Xmx16G" (или как угодно). По сути, продолжайте бросать больше памяти на проблему до тех пор, пока предупреждение / ошибка «Недостаточно памяти» от Fortify не исчезнет.

Кроме того ...

Объяснение того, что может происходить

Опция Fortify SCA '-mt' означает, что вы хотите включить режим параллельного анализа, который предназначен для того, чтобы попытаться ускорить сканирование вашего исходного кода, создав несколько подчиненных процессов для помощи в сканировании. С помощью '-mt' Fortify автоматически создаст 1 подчиненный процесс для каждого ядра процессора на вашем хосте, а из-за вашего '-Xmx1GB' Fortify выделит 1 ГБ памяти для каждого процесса. Так что ошибка, которую вы видите, может быть связана с тем, что одному или нескольким ведомым не хватает памяти.

Заключение

Для этого начального сканирования не используйте режим параллельного анализа. Вот почему мы удаляем строку 13 в вашем примере. Кроме того, у вас снова есть настройки конфигурации дубликата памяти в строке 17. После того, как вы можете успешно выполнить сканирование, попробуйте набрать обратно объем памяти, а затем попробуйте поиграть в режиме параллельного анализа. При использовании режима параллельного анализа, формула для определения того, сколько памяти можно выделить с помощью '-Xmx': (- 2 ГБ) / <количество ядер процессора>

...