故障现象:数据存储的时候报ERROR: Packet for query is too large (2034> 1024)
. You can change this value on the server by setting the max_allowed_packet' variable.
排查过程:从报错看是 mysql的 max_allowed_packet参数值设置太少了,用
show VARIABLES like '%max_allowed_packet%';查看,显示的是1024,这当然就有问题了,超过1024就存不了,于是在/etc/my.cnf文件中【mysqld]下面加上
max_allowed_packet=10M,执行service mysql restart ,再用
show VARIABLES like '%max_allowed_packet%'查,生效了!再观察数据存储也没问题了!以为问题就此解决,结果是第二天发现又报这个错,用
show VARIABLES like '%max_allowed_packet%'查看,奇怪了,有变成1024了!好烦心!继续查资料,说是内存不足的问题,导致MySQL自动重新设置参数,于是top查看,发现 Java占了 3.2G,mysql占了600+M,总共4G,的确有可能!于是把jvm的-Xms设置为2G,再观察几天,这次真的解决了!
经验教训:不要把一台服务器的内存都用光了,要预留多点内存,另外mysql和Java程序最好分开部署。