故障整理

1.RocketMQ 部署不当导致磁盘空间不释放

背景

生产环境采用 RocketMQ 三主三从集群搭建,6 个实例部署在 3 台 Linux 服务器上(节省资源),每台服务器部署一主一从,生产上运行一段时间后,发现磁盘空间报警,发现df与du显示的空间不一致(相差几十G)。

问题原因

RocketMQ在同一台服务器上,启动一主一从 2 个实例,由于 2 个主从RocketMQ实例采用同样的 Logback 配置文件,写入的日志名称及滚动策略是一样的。

主从 2 个实例Logback在 Linux 下共享日志滚动时,会导致日志文件滚动后,但是其中一个 实例进程未释放日志文件的磁盘空间。

PS:我自己写了个Logback的 Demo,启动多个实例会重现该问题。

检查方法

查看 rocketmq 未释放文件

$ lsof | grep rocketmq | grep deleted

查看 rocketmq 未释放文件的磁盘总大小,$7 是lsof 的 size 字段,单位 Byte

$ lsof | grep rocketmq | grep deleted |awk 'BEGIN{sum=0}{sum+=$7}END{print sum/1024/1024 "MB"}'

彻底解决

新增 3 台服务器,迁移RocketMQ的 3 个从节点到新服务器即可;
不增加服务器情况下,重新复制一份RocketMQ安装目录,修改 Logback 中的日志路径;
分析Logback源码,修改日志滚动实现,见参考文章。

2.加入cdn后访问网站提示重定向过多

背景:

给一个静态资源网站添加cdn提高访问速度。CDN源站配置了http回源。

原因:

未添加cdn之前静态资源网站添加了强制跳转https , 添加CDN后,当CDN回源时会把请求重定向到CDN的https,这就会导致请求在cdn和源站之间不停的重定向。

解决方法:

1.CDN回源选择协议跟随
2.源站去掉强制跳转https.
3.添加本地hosts

3.shell脚本不执行 问题:

背景:

某天研发某同事找我说帮他看看他写的shell脚本,死活不执行,报错。我看了下,脚本很简单,也没有常规性的错误,报“:badinterpreter:Nosuchfileordirectory”错。看这错,我就问他是不是在windows下编写的脚本,然后在上传到linux服务器的……果然。

原因:

在DOS/windows里,文本文件的换行符为rn,而在nix系统里则为n,所以DOS/Windows里编辑过的文本文件到了nix里,每一行都多了个^M。

解决方法:

1)重新在linux下编写脚本;
2)vi:%s/r//g:%s/M//g(M输入用Ctrl+v,Ctrl+m)附:sh-x脚本文件名,可以单步执行并回显结果,有助于排查复杂脚本问题。

4.crontab输出结果控制

背景:

/var/spool/clientmqueue目录占用空间超过100G

原因:

cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了/var/spool/clientmqueue目录下的那些文件,日积月累可能撑破磁盘。

解决:

1)直接手动删除:ls|xargsrm-f;
2)彻底解决:在cron的自动执行语句后加上>/dev/2>&1

你可能感兴趣的:(故障整理)