2017-03-14 56 views
0

我們遇到類似於Sonar analysis fails with SocketTimeoutExceptionRead timed out on SonarQube analysis中已討論過的問題,但它發生在5.6.2版本中。我們有大量的聲納分析,作爲從午夜開始到清晨結束的一系列夜間建築。只有第一個分析(有時第一對夫婦的分析)由SocketTimeoutException報告的上傳過程中受到影響:Sonar報告上載失敗,原因是SocketTimeoutException

[exec] 00:15:33.724 DEBUG: Upload report 
[exec] 00:16:34.065 INFO: ------------------------------------------------------------------------ 
[exec] 00:16:34.065 INFO: EXECUTION FAILURE 
[exec] 00:16:34.065 INFO: ------------------------------------------------------------------------ 
[exec] 00:16:34.065 INFO: Total time: 1:28.329s 
[exec] 00:16:34.320 ERROR: Error during SonarQube Scanner execution 
[exec] java.lang.IllegalStateException: Fail to request http://mysonar:9000/sonar/api/ce/submit?projectKey=myproject&projectName=myproject 
[exec] at org.sonarqube.ws.client.HttpConnector.doCall(HttpConnector.java:212) 
[exec] at org.sonarqube.ws.client.HttpConnector.post(HttpConnector.java:175) 
[exec] at org.sonarqube.ws.client.HttpConnector.call(HttpConnector.java:146) 
[exec] at org.sonar.batch.bootstrap.BatchWsClient.call(BatchWsClient.java:67) 
[exec] at org.sonar.batch.report.ReportPublisher.upload(ReportPublisher.java:172) 
[exec] at org.sonar.batch.report.ReportPublisher.execute(ReportPublisher.java:127) 
[exec] at org.sonar.batch.phases.PublishPhaseExecutor.publishReportJob(PublishPhaseExecutor.java:64) 
[exec] at org.sonar.batch.phases.PublishPhaseExecutor.executeOnRoot(PublishPhaseExecutor.java:51) 
[exec] at org.sonar.batch.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:86) 
[exec] at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:192) 
[exec] at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142) 
[exec] at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127) 
[exec] at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:241) 
[exec] at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:236) 
[exec] at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:226) 
[exec] at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142) 
[exec] at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127) 
[exec] at org.sonar.batch.task.ScanTask.execute(ScanTask.java:47) 
[exec] at org.sonar.batch.task.TaskContainer.doAfterStart(TaskContainer.java:86) 
[exec] at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142) 
[exec] at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127) 
[exec] at org.sonar.batch.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:106) 
[exec] at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:119) 
[exec] at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:62) 
[exec] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[exec] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
[exec] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[exec] at java.lang.reflect.Method.invoke(Method.java:498) 
[exec] at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60) 
[exec] at com.sun.proxy.$Proxy0.execute(Unknown Source) 
[exec] at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:233) 
[exec] at org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151) 
[exec] at org.sonarsource.scanner.cli.Main.runAnalysis(Main.java:110) 
[exec] at org.sonarsource.scanner.cli.Main.execute(Main.java:74) 
[exec] at org.sonarsource.scanner.cli.Main.main(Main.java:61) 
[exec] Caused by: java.net.SocketTimeoutException: timeout 
[exec] at okio.Okio$3.newTimeoutException(Okio.java:207) 
[exec] at okio.AsyncTimeout.exit(AsyncTimeout.java:261) 
[exec] at okio.AsyncTimeout$2.read(AsyncTimeout.java:215) 
[exec] at okio.RealBufferedSource.indexOf(RealBufferedSource.java:306) 
[exec] at okio.RealBufferedSource.indexOf(RealBufferedSource.java:300) 
[exec] at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196) 
[exec] at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:191) 
[exec] at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:79) 
[exec] at com.squareup.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:909) 
[exec] at com.squareup.okhttp.internal.http.HttpEngine.access$300(HttpEngine.java:93) 
[exec] at com.squareup.okhttp.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:894) 
[exec] at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:748) 
[exec] at com.squareup.okhttp.Call.getResponse(Call.java:277) 
[exec] at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:234) 
[exec] at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:196) 
[exec] at com.squareup.okhttp.Call.execute(Call.java:79) 
[exec] at org.sonarqube.ws.client.HttpConnector.doCall(HttpConnector.java:209) 
[exec] ... 34 more 
[exec] Caused by: java.net.SocketException: Socket closed 
[exec] at java.net.SocketInputStream.read(SocketInputStream.java:204) 
[exec] at java.net.SocketInputStream.read(SocketInputStream.java:141) 
[exec] at okio.Okio$2.read(Okio.java:139) 
[exec] at okio.AsyncTimeout$2.read(AsyncTimeout.java:211) 
[exec] ... 48 more 
[exec] 00:16:34.322 ERROR: 
[exec] 00:16:34.322 ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging. 
[exec] 00:16:34.320 INFO: Final Memory: 59M/426M 
[exec] 00:16:34.320 INFO: ------------------------------------------------------------------------ 
[exec] Result: 1 
[echo] Sonar execution failed, please check the log 

通常情況下,上傳僅需毫秒(大約200毫秒的最大項目),而在此在60秒後似乎發生超時(在00:15:33上傳,在00:16:34失敗)。與此同時,服務器上的access.log顯示出一種非常奇怪的模式:POST /sonar/api/ce/submit在初始上傳請求後6分鐘到達服務器,並且在客戶端收到TimeoutException(和時鐘之後5分鐘)時在00:21:39到達服務器客戶端和服務器完全同步)。

10.0.206.160 - - [13/Mar/2017:00:15:09 +0100] "GET /sonar/batch/project.protobuf?key=myprojectkey HTTP/1.1" 200 2556 "-" "SonarQubeRunner/2.7" 
10.0.206.160 - - [13/Mar/2017:00:15:09 +0100] "GET /sonar/api/qualityprofiles/search.protobuf?projectKey=myprojectkey HTTP/1.1" 200 909 "-" "SonarQubeRunner/2.7" 
10.0.206.160 - - [13/Mar/2017:00:21:39 +0100] "POST /sonar/api/ce/submit?projectKey=myprojectkey&projectName=myproject HTTP/1.1" 200 60 "-" "SonarQubeRunner/2.7" 

即使陌生人,聲納GUI實際上呈現所有的初始載時間的時間戳(在客戶端處,00:15)的分析結果和所述後臺任務視圖顯示下列時間戳:提交= 12: 15:33 AM,開始= 12:22:03 AM,完成= 12:22:08 AM。 基本上,從分析的角度來看,一切都是有效的,但由於超時異常,構建仍然失敗。

回答

0

這個問題對我們的設置是特別的。這是由Sonar數據庫備份與夜間版本同時運行造成的。在運行mysqldump以創建備份的~20分鐘期間,Sonar服務完全無響應,並在客戶端嘗試上傳分析報告時導致SocketTimeoutException。

這種情況下的解決方案:將數據庫備份移動到Sonar閒置時。