3
votes

Pas assez de mémoire pour terminer l'analyse

Je suis confronté à une erreur très inhabituelle liée à l'analyse fortifiée. Cela a commencé hier soir et j'ai eu du mal à le résoudre car cela a eu un impact sur le travail de toute l'équipe. Je reçois le message d'erreur suivant dans la console Jenkins.

J'ai essayé de résoudre les problèmes en augmentant la mémoire et la taille du tas Java avec l'argument suivant dans le code du pipeline Jenkins, mais cela n'a pas non plus aidé. fortifyMemory: '-Xmx6G -Xms2400M -Xss48M' .

J'ai essayé d'exclure plus de fichiers en utilisant sourceExclusions: 'src / main / resources /**/*.* , mais cela n'a pas fonctionné aussi.

J'ai trouvé en ligne que peut-être utiliser le traitement parallèle et changer le type de version java en 64 bits -64 pourrait résoudre le problème, mais je n'ai pas pu le configurer correctement dans mon pipeline Jenkins car il n'y avait pas beaucoup d'informations disponibles.

S'il vous plaît laissez-moi savoir si quelqu'un sait comment passer ces deux indicateurs dans mon code de pipeline ci-dessous ou s'il existe une autre solution pour cela.

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'
        ])
    }
}


0 commentaires

3 Réponses :


2
votes

Fortify SCA consomme beaucoup de mémoire pour la numérisation des applications de taille moyenne à grande.

Autour de la ligne 13 de votre exemple, supprimez "fortifyMemory: '-Xmx1G -Xms600M -Xss24M -mt',".

Autour de la ligne 17, si possible, augmentez votre mémoire jusqu'à "-Xmx16G" (ou tout ce qui est possible). En gros, continuez à consacrer plus de mémoire au problème jusqu'à ce que l'avertissement / erreur "Mémoire insuffisante" de Fortify disparaisse.

Aussi ...

Explication de ce qui pourrait se passer

L'option «-mt» de Fortify SCA signifie que vous souhaitez activer le mode d'analyse parallèle qui est destiné à essayer d'accélérer l'analyse de votre code source en créant plusieurs processus esclaves pour aider à l'analyse. Avec '-mt', Fortify créera automatiquement 1 processus esclave pour chaque cœur de processeur sur votre hôte et en raison de votre '-Xmx1GB', Fortify allouera 1 Go de mémoire pour chaque processus. L'erreur que vous voyez peut donc être due au fait qu'un ou plusieurs esclaves manquent de mémoire.

< gagnantConclusion

Pour cette analyse initiale, n'utilisez pas le mode d'analyse parallèle. C'est pourquoi nous supprimons la ligne 13 de votre exemple. De plus, vous avez à nouveau les paramètres de configuration de la mémoire en double à la ligne 17. Une fois que vous avez réussi à produire une analyse, essayez de rappeler la quantité de mémoire, puis essayez de jouer avec le mode d'analyse parallèle. Lors de l'utilisation du mode d'analyse parallèle, une formule pour déterminer la quantité de mémoire à allouer en utilisant le '-Xmx' peut être: (- 2 Go) / <# de cœurs de processeur>


0 commentaires

0
votes

Dans votre scénario, il est peut-être préférable d'utiliser un CloudScan.

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

"La phase de traduction, qui demande beaucoup de temps et de processeur, est terminée sur la machine de construction. Une fois la traduction terminée, CloudScan génère un package, qu'il déplace ensuite vers un nuage distribué de machines (capteurs) pour l'analyse. De plus Pour libérer des machines de construction, ce processus facilite l'ajout de ressources supplémentaires au cloud et la croissance du système selon les besoins, sans avoir à interrompre votre processus de construction. De plus, Fortify Software Security Center peut diriger CloudScan pour générer des fichiers FPR directement sur le serveur. "


0 commentaires

0
votes

Une erreur System.OutOfMemoryException peut se produire lors de l'analyse Fortify.

Pour les fichiers .net, nous avons résolu le problème de correction du fichier dotnet-translate.exe utilisé dans la phase d'analyse Fortify à l'aide d'un petit outil appelé 4gb_patch.exe. L'outil corrige les exécutables x86 pour leur permettre d'avoir 4 Go de mémoire virtuelle sur les plates-formes x64 (au lieu de 2 Go). Vous pouvez télécharger l'outil sur https://ntcore.com/?page_id=371 .

Le fichier dotnet-translate.exe se trouve à cet emplacement: C: \ Program Files \ HPE_Security \ Fortify_SCA_and_Apps_xx.xx \ Core \ private-bin \ sca \ dotnet-translate.exe

Bien sûr, vous devez changer XX.xx avec votre version de Fortify SCA. ;)


0 commentaires