web-dev-qa-db-fra.com

Sonar - OutOfMemoryError: Java heap space

Je déploie un grand projet Java sur Sonar en utilisant "Findbugs" comme profil et j'obtiens l'erreur ci-dessous:

Caused by: Java.util.concurrent.ExecutionException: Java.lang.OutOfMemoryError:
Java heap space

Ce que j'ai essayé de résoudre ce problème:

  1. % SONAR_RUNNER_OPTS% a été remplacé par -Xms256m -Xmx1024m pour augmenter la taille du segment de mémoire dans le fichier bat du sondeur.
  2. Mettez le paramètre "sonar.findbugs.effort" comme "Min" dans les paramètres globaux du Sonar.

Mais les deux méthodes ci-dessus n'ont pas fonctionné pour moi.

20
shekhar verma

J'ai eu le même problème et j'ai trouvé une solution très différente, peut-être parce que j'ai du mal à avaler les réponses/commentaires précédents. Avec 10 millions de lignes de code (c'est plus de code que dans un avion de chasse F16), si vous avez 100 caractères par ligne (une taille folle), vous pouvez charger la base de code entière dans 1 Go de mémoire. Je lui ai mis 8 Go de mémoire et il a toujours échoué. Pourquoi?

Réponse: Parce que le scanner communautaire Sonar C++ semble avoir un bogue où il prend n'importe quel fichier avec la lettre "c" dans son extension. Cela inclut .doc, .docx, .ipch, etc. Par conséquent, la raison pour laquelle il manque de mémoire est parce qu'il essaie de lire un fichier qui, selon lui, représente 300 Mo de code pur, mais il devrait vraiment être ignoré.

Solution: Trouvez les extensions utilisées par tous les fichiers de votre projet ( voir plus ici ):

dir /s /b | Perl -ne 'print $1 if m/\.([^^.\\\\]+)$/' | sort -u | grep c

Ajoutez ensuite ces autres extensions en tant qu'exclusions dans votre fichier sonar.properties:

sonar.exclusions=**/*.doc,**/*.docx,**/*.ipch

Réglez ensuite vos limites de mémoire à des niveaux réguliers.

%Java_EXEC% -Xmx1024m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m %SONAR_RUNNER_OPTS% ...
13
Ryan Shillington

cela a fonctionné pour moi:

SONAR_RUNNER_OPTS="-Xmx3062m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m"

Je le place directement dans le fichier sonar-runner (.bat)

10
seoservice.ch

J'ai eu le même problème lors de l'exécution de sonar avec maven. Dans mon cas, cela a aidé à appeler le sonar séparément:

mvn clean install && mvn sonar:sonar

au lieu de

mvn clean install sonar:sonar

http://docs.sonarqube.org/display/SONAR/Analyzing+with+Maven

Remarque: Parce que ma solution est connectée à maven, ce n'est pas la réponse directe à la question. Mais cela pourrait aider d'autres utilisateurs qui tomberont dessus.

7
Matt

Je sais que ce fil est un peu ancien mais cette info pourrait aider quelqu'un.

Pour moi, le problème n'était pas comme suggéré par la première réponse avec le plugin C++. Au lieu de cela, mon problème était le plug-in Xml ( https://docs.sonarqube.org/display/PLUG/SonarXML ) après l'avoir désactivé, l'analyse a de nouveau fonctionné.

2
SLuck

Ce que vous pouvez faire pour créer votre propre profil de qualité avec seulement quelques règles Findbugs au début, puis ajouter progressivement de plus en plus jusqu'à ce que vous atteigniez son OutOfMemoryError. Il n'y a probablement qu'une seule règle qui fait échouer tout cela parce que votre code la viole - et si vous désactivez cette règle, cela fonctionnera certainement.

Le problème est du côté de FindBugs. Je suppose que vous analysez un grand projet qui a probablement de nombreuses violations. Jetez un œil à deux fils de discussion dans la liste de diffusion de Sonar ayant le même problème. Il y a quelques idées que vous pouvez essayer par vous-même.

http://sonar.15.n6.nabble.com/Java-lang-OutOfMemoryError-Java-heap-space-td4898141.html

http://sonar.15.n6.nabble.com/Java-lang-OutOfMemoryError-Java-heap-space-td5001587.html

0
ppapapetrou

Je sais que c'est vieux, mais je poste quand même ma réponse. J'ai réalisé que j'utilisais le JDK 32 bits (version 8) et après l'avoir désinstallé puis installé le JDK 64 bits (version 12), le problème a disparu.

0
behrooz dalvandi