事情的起因是我在 tail -f 查看java日志时 发现日志不动态追加了,并且报了redis的 I/O 错误
程序报错如下
redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.
开始排查
第一个想法是程序是否还在正常跑
结果程序正常
第2个想法是redis i/o 错误 RDB设置了上限?满了?还是内存满了
htop 看了下 内存还有 2个 g
又看了下 redis.conf 配置文件,maxmemory 并没有开启 ,
继续排查找解决方案,stop-writes-on-bgsave-error yes 这个命令是在redis最后一次保存操作异常后就禁止写入,好 给他改成 no
结果在我 :wq 时 ,提示磁盘满了,这就不对了
开始排查磁盘
命令:df -hl
文件系统 容量 已用 可用 已用% 挂载点
/xxx/xxx 40G 40G 0G 100% /
xxx 1.9G 0 1.9G 0% /dev
xxx 1.9G 0 1.9G 0% /dev/xxx
xxx 1.9G 536K 1.9G 1% /xxx
xxx 1.9G 0 1.9G 0% /xxx/xxx/xxx
xxx 380M 0 380M 0% /xxx/xxx/0
看来真是磁盘满了,但不知道是哪里满了,根目录全局扫描下
命令:du -s -h *|sort -nr
38G home
我这个文件夹下只跑了 java程序和部分日志不可能这么大啊,继续排查,进入home 继续 du -s -h *|sort -nr
发现 nohup.out 占到了 38个G
解决方法:cat /dev/null > nohup.out
程序恢复
思考下:
原因是我跑的程序是以 nohup java -jar -xms 。。。。 的方式,日志会不停的追加,其实可以有好多种方式解决
nohup java -jar pos.jar > /dev/null 2>&1 &
如果程序有自己的日志则不需要输出到 nohuo.out 文件rm -rf nohup.out
简单粗暴删了echo ‘’ > nohup.out 或 cat /dev/null > nohup.out
清空日志
这里用到了几个命令
htop:查看cpu 内存占用情况,也可以用 top
df -hl :查看整体磁盘空间占用情况
du -s -h *|sort -nr :查看当前目录下大文件空间占用情况
du -h :查看这个文件大小,并且自动换算单位 KB MB GB