Sonarでプロファイルとして「Findbugs」を使用して、以下のエラーを取得する大規模なJavaプロジェクトをデプロイしています。
Caused by: Java.util.concurrent.ExecutionException: Java.lang.OutOfMemoryError:
Java heap space
私はこれを解決しようとしました:
しかし、上記の方法は両方ともうまくいきませんでした。
以前の回答/コメントを飲み込むのに苦労しているためか、同じ問題を抱えており、非常に異なる解決策を見つけました。 1000万行のコード(これはF16戦闘機よりも多くのコードです)で、1行に100文字(クレイジーなサイズ)がある場合、コードベース全体を1GBのメモリにロードできます。 8GBのメモリを設定しましたが、まだ失敗しました。どうして?
回答:コミュニティのSonar C++スキャナーには、拡張子に文字「c」が含まれるファイルをピックアップするバグがあるようです。 .doc、.docx、.ipchなどが含まれます。したがって、メモリが不足しているのは、300 MBの純粋なコードと思われるファイルを読み取ろうとしているためですが、実際には無視する必要があります。
解決策:プロジェクト内のすべてのファイルで使用されている拡張子を見つけます( 詳細はこちら ):
dir /s /b | Perl -ne 'print $1 if m/\.([^^.\\\\]+)$/' | sort -u | grep c
次に、これらの他の拡張子を除外としてsonar.propertiesファイルに追加します。
sonar.exclusions=**/*.doc,**/*.docx,**/*.ipch
次に、メモリ制限を通常の量に戻します。
%Java_EXEC% -Xmx1024m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m %SONAR_RUNNER_OPTS% ...
これは私のために働いています:
SONAR_RUNNER_OPTS="-Xmx3062m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=128m"
Sonar-runner(.bat)ファイルに直接設定します
Mavenでソナーを実行しているときに同じ問題が発生しました。私の場合、ソナーを個別に呼び出すのに役立ちました:
mvn clean install && mvn sonar:sonar
の代わりに
mvn clean install sonar:sonar
http://docs.sonarqube.org/display/SONAR/Analyzing+with+Maven
注:私のソリューションはMavenに接続されているため、これは質問に対する直接的な答えではありません。しかし、それは他のユーザーがそれを踏むのに役立つかもしれません。
私はこのスレッドが少し古いことを知っていますが、この情報は誰かを助けるかもしれません。
私にとって、この問題はC++プラグインのトップアンサーが示唆するようなものではありませんでした。代わりに、私の問題はXml-Plugin( https://docs.sonarqube.org/display/PLUG/SonarXML )でした。これを無効にすると、分析が再び機能しました。
最初にいくつかのFindbugsルールを使用して独自の品質プロファイルを作成し、その後OutOfMemoryErrorに到達するまで徐々に追加するためにできること。コードに違反しているため、これをすべて失敗させるルールはおそらく1つだけです。このルールを無効にすると、確実に機能します。
問題はFindBugs側にあります。おそらく多くの違反がある大規模なプロジェクトを分析していると思います。同じ問題を抱えているSonarのメーリングリストの2つのスレッドを見てください。自分で試すことができるいくつかのアイデアがあります。
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
これは古いことは知っていますが、とにかく自分の答えを投稿しています。 32ビットJDK(バージョン8)を使用していて、それをアンインストールしてから64ビットJDK(バージョン12)をインストールすると、問題はなくなりました。