亲爱的Sonarqube社区,
自更新到Sonarqube 6.1 后,我们在Sonarqube中收到错误,其中查询数据包太大。 我们做什么:Jenkins正在检查PHP源代码,然后SonarQube Scanner正在分析源代码并与SonarQube服务器通信。此过程因Jenkins中的日志输出而失败:
org.sonarqube.ws.client.HttpException: Error 500 on http://URL-TO-SONAR/sonar/api/ce/submit?projectKey=lhind.php.PRJName&projectName=PRJName : {"errors":[{"msg":"Fail to insert data of CE task AViRLtiaB_5m8twj_1J3"}]}
我们已经增加了最大数据包大小和innodb_log_file_size。我们没有使用SonarQube 6.1的相同数量的代码来解决这个问题。
有什么想法吗?
在SonarQube中,我们在sonar.log文件中得到以下异常:
2016.11.23 12:35:16 ERROR web[][o.s.s.w.WebServiceEngine] Fail to process request http://SONAR-URL.de:8443/sonar/api/ce/submit?projectKey=lhind.php.PRJName&projectName=PRJName
java.lang.IllegalStateException: Fail to insert data of CE task AViRLtiaB_5m8twj_1J3
at org.sonar.db.ce.CeTaskInputDao.insert(CeTaskInputDao.java:56) ~[sonar-db-6.1.jar:na]
(deleted because too much text ...)
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
**Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (24313938 > 16777216). You can change this value on the server by setting the max_allowed_packet' variable.**
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3671) ~[mysql-connector-java-5.1.39.jar:5.1.39]
(deleted because too much text ...)
at org.sonar.db.ce.CeTaskInputDao.insert(CeTaskInputDao.java:53) ~[sonar-db-6.1.jar:na]
... 34 common frames omitted
答案 0 :(得分:15)
在客户端和服务器上增加MySQL中允许的最大数据包大小以解决此问题。
服务器强>
有关如何在服务器上执行此操作的详细信息,请参阅此处的 Resolution 部分。建议将此值设置为256MB。在上面的堆栈跟踪中,数据包大小约为24MB。
https://confluence.atlassian.com/confkb/exceeds-max-allowed-packet-for-mysql-179443425.html
我喜欢上面的链接,因为它描述了如何在不停止数据库的情况下增加值,如果这对您很重要。
<强>客户端强>
在客户端上,增加SonarQube JDBC URL中maxAllowedPacket
参数的值。
<强>参考强>
有关更多详细信息,请参阅MySQL文档中的以下链接。
客户端和服务器都有自己的max_allowed_packet 变量,所以如果你想处理大数据包,你必须增加它 在客户端和服务器中都是变量。
maxAllowedPacket
要发送给服务器的最大允许数据包大小。如果未设置,则为该值 系统变量&#39; max_allowed_packet&#39;将用于初始化 这在连接时。如果设置得更大,此值将不会生效 而不是&#39; max_allowed_packet&#39;的价值。另外,由于内部原因 依赖于属性&#34; blobSendChunkSize&#34;,此设置有一个 最小值&#34; 8203&#34; if&#34; useServerPrepStmts&#34;设置为&#34; true&#34;。
默认值:-1
自版本:5.1.8
答案 1 :(得分:4)
我遇到了同样的问题,我们有一个限制,其中我们无法更改MySQL服务器配置(max_allowed_packet)
我能够通过更改客户端jdbc网址配置 - &gt;来实现此功能。将服务器配置保留原样。
请注意,我们必须在这里使用'useServerPrepStmts = true'。
jdbc:mysql://[dbhost]:[dbport]?useUnicode=true&rewriteBatchedStatements=true&characterEncoding=utf8&useServerPrepStmts=true&maxAllowedPacket=20000000&useSSL=false
检查mysql连接器配置参考here
SO上还有一篇文章详细讨论了客户端的变化 - 检查here
希望这有帮助!
答案 2 :(得分:1)
这是我遇到同样问题时的所作所为,并解决了我的问题。
服务器错误:
Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4237058 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable.
首先检查以了解当前值:
通过终端登录你的mysql并运行bellow命令。你可以看到如下的当前值。
mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set (0.00 sec)
将max_allowed_packet
值设置为这样的值。目的是根据您的要求增加价值。
mysql> SET GLOBAL max_allowed_packet=512000000;
再次运行以下命令以查看更新的值。您必须退出mysql(通过exit;
命令或单击CLI的关闭按钮)并重新登录。
mysql> SHOW VARIABLES LIKE 'max_allowed_packet';