近期遇到的线上问题总结
1、redis异常 Redis is configured to save RDB smapshots,but is currently not able to persist on disk. Commands that may modify the data set are disabled.Please reids logs for details about the error
解决方案 :将stop-writes-on-bgsave-error设置为no
127.0.0.1:6379> config set stop-writes-on-bgsave-error no
2、gc异常 java.lang.OutOfMemoryError: GC overhead limit exceeded
解决方案:暂未解决,等待查找解决方案
3、数据库异常 (因为磁盘挂载没有重启后自动挂载的原因)
线上果然很多奇奇怪怪的问题,某一天线上环境突然登陆不了,进入服务器发现web应用服务器进程还在,日志打印连接不了数据库,所以进入数据库服务器后发现数据库停了。很奇怪,就直接systemctrl restart mysql ,但是发现启动不了,遂去错误日志的目录中去看,发现没有该目录,很蒙圈。查看了my.cnf文件,日志目录和mysql的数据目录都不存在了。顿时慌了,找运维1一起解决,没找到具体原因。换了日志目录和数据目录后发现能启动了,但是之前的数据没有了,后联系运维2发现之前做过一次数据迁移,因之前磁盘满了导致,binlog日志无法存放所以挂载了一个硬盘作为mysql的数据盘(很有风险),但是服务器意外重启没有挂载到。重新挂载后还好数据都在。但是也是长了记性,同时修改了binlog日志的有效时间,删除之前没有用的binlog日志。
临时生效
# 查看默认设置的过期时间
show variables like "%expire_logs%";
# 设置保留15天
set global expire_logs_days=15
# 刷新日志
flush logs;
#查看新生成的binlog日志
show master status\G:
注意:以上命令在数据库执行会立即生效,请确定设置数据的保留日期,以免误删
永久生效
# 修改配置文件
vim /etc/my.cnf
[mysqld]模块
expire_logs_days=15
注意:在配置文件修改后,需要重启才能永久生效。另,0表示永不过期,单位是天
4、jvm打印gc日志
-Xms8192m -Xmx8192m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/anjian/heap.bin -Xloggc:/var/log/anjian/gc.log -Djava.security.egd=file:/dev/./urandom