18

Tôi nhận được OutOfMemoryException khi thực hiện phân tích sonar trong dự án của mình. Dưới đây là dấu vết ngăn xếp:Giới hạn GC vượt quá giới hạn khi chạy bộ giải sonar

14:55:55.433 DEBUG - Release semaphore on project : [email protected][id=1,key=myProj_web,qualifier=TRK], with key batch-myProj_web 
14:55:55.711 DEBUG - To prevent a memory leak, the JDBC Driver [com.mysql.jdbc.Driver] has been forcibly deregistered 

INFO: ------------------------------------------------------------------------ 
INFO: EXECUTION FAILURE 
INFO: ------------------------------------------------------------------------ 
Total time: 12:48.979s 
Final Memory: 33M/910M 
INFO: ------------------------------------------------------------------------ 
ERROR: Error during Sonar runner execution 
org.sonar.runner.impl.RunnerException: Unable to execute Sonar 
     at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91) 
     at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69) 
     at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50) 
     at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102) 
     at org.sonar.runner.api.Runner.execute(Runner.java:100) 
     at org.sonar.runner.Main.executeTask(Main.java:70) 
     at org.sonar.runner.Main.execute(Main.java:59) 
     at org.sonar.runner.Main.main(Main.java:53) 
Caused by: org.sonar.api.utils.SonarException: Can not execute Findbugs 
     at org.sonar.plugins.findbugs.FindbugsExecutor.execute(FindbugsExecutor.java:154) 
     at org.sonar.plugins.findbugs.FindbugsSensor.analyse(FindbugsSensor.java:59) 
     at org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:79) 
     at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:70) 
     at org.sonar.batch.phases.PhaseExecutor.execute(PhaseExecutor.java:131) 
     at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:178) 
     at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) 
     at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) 
     at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:199) 
     at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:194) 
     at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:187) 
     at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) 
     at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) 
     at org.sonar.batch.scan.ScanTask.scan(ScanTask.java:56) 
     at org.sonar.batch.scan.ScanTask.execute(ScanTask.java:44) 
     at org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.java:82) 
     at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) 
     at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) 
     at org.sonar.batch.bootstrap.BootstrapContainer.executeTask(BootstrapContainer.java:175) 
     at org.sonar.batch.bootstrap.BootstrapContainer.doAfterStart(BootstrapContainer.java:163) 
     at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) 
     at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) 
     at org.sonar.batch.bootstrapper.Batch.startBatch(Batch.java:92) 
     at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:74) 
     at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:48) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87) 
     ... 9 more 
Caused by: java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC overhead limit exceeded 
     at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232) 
     at java.util.concurrent.FutureTask.get(FutureTask.java:91) 
     at org.sonar.plugins.findbugs.FindbugsExecutor.execute(FindbugsExecutor.java:146) 
     ... 38 more 
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded 
     at edu.umd.cs.findbugs.util.Strings.escapeXml(Strings.java:167) 
     at edu.umd.cs.findbugs.xml.XMLAttributeList.getQuotedAttributeValue(XMLAttributeList.java:132) 
     at edu.umd.cs.findbugs.xml.XMLAttributeList.toString(XMLAttributeList.java:111) 
     at edu.umd.cs.findbugs.xml.OutputStreamXMLOutput.openTag(OutputStreamXMLOutput.java:112) 
     at edu.umd.cs.findbugs.SourceLineAnnotation.writeXML(SourceLineAnnotation.java:887) 
     at edu.umd.cs.findbugs.ClassAnnotation.writeXML(ClassAnnotation.java:192) 
     at edu.umd.cs.findbugs.BugInstance.writeXML(BugInstance.java:2292) 
     at edu.umd.cs.findbugs.SortedBugCollection.writeXML(SortedBugCollection.java:576) 
     at edu.umd.cs.findbugs.SortedBugCollection.writeXML(SortedBugCollection.java:497) 
     at edu.umd.cs.findbugs.XMLBugReporter.finish(XMLBugReporter.java:46) 
     at edu.umd.cs.findbugs.DelegatingBugReporter.finish(DelegatingBugReporter.java:81) 
     at edu.umd.cs.findbugs.DelegatingBugReporter.finish(DelegatingBugReporter.java:81) 
     at edu.umd.cs.findbugs.DelegatingBugReporter.finish(DelegatingBugReporter.java:81) 
     at edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1256) 
     at edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:282) 
     at org.sonar.plugins.findbugs.FindbugsExecutor$FindbugsTask.call(FindbugsExecutor.java:201) 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:662) 

Tôi đã thử tăng bộ nhớ nhưng vấn đề vẫn tồn tại. Tôi đã sử dụng các tùy chọn sau trong khi chạy sonar: set SONAR_RUNNER_OPTS=-Xmx1024m -XX:MaxPermSize=512m

+0

Làm cách nào để xác định thành phần nào của SonarQube gặp sự cố? Có phải plugin trình kiểm tra mã trùng lặp hay cái gì khác không? – Yasin

+0

Tôi vẫn muốn biết cách xác định thành phần được thực thi lần cuối trước khi ngoại lệ. Có cách nào để nhận dạng nó bằng cách sử dụng nhật ký hoặc theo dõi ngăn xếp ở trên không? Tôi không thể hình dung ra được. – Yasin

+0

[Câu hỏi tương tự] (http://stackoverflow.com/q/10104443/1005481) cũng có thể hữu ích. –

Trả lời

10

OK, sau khi thực hiện một số nghiên cứu khác, tôi đã hiểu đúng. Tuy nhiên, tôi đã phải làm một số thiết lập.

  1. Bỏ qua việc phân tích thiết kế bao bì, sonar.skipPackageDesign=true
  2. Hủy bỏ các mục cho thư mục lib/thử nghiệm về tính chất của dự án của bạn tập tin
  3. Cho một số bộ nhớ hơn set SONAR_RUNNER_OPTS=-Xmx1536m -XX:MaxPermSize=512m
  4. Tùy chọn bạn có thể vô hiệu hóa phân tích thiết kế bằng cách sử dụng sonar.skipDesign=true
  5. Khởi động lại dịch vụ SonarQube và bạn sẽ tốt ngay bây giờ :)

Hãy cho tôi biết điều này có hiệu quả với bạn thông qua phiếu bầu của bạn hay không.

Để đọc thêm, vui lòng tham khảo this post

+0

liên kết được cung cấp không còn hoạt động: ( – gvasquez

+1

cập nhật liên kết – Yasin

+0

đã thử tất cả cài đặt thos qua MAVEN_OPTS từ Jenkins, nhưng tiếc là không thành công :( – gvasquez

Các vấn đề liên quan