最近一个集群出现了不稳定的问题。重启之后也很快挂掉,问题是在某个时间点之前工作一直很稳定。。
首先检查了各个配置和日志都没发现什么问题。
后来跑了一下如下命令,才发现某个out文件居然有几百G的容量:
find ./ -name "*.out" | xargs ls -alh
问题就出来这里,程序启动用了nohup强制进入后台运行,往out文件不停写日志,在out文件还小的情况下没啥问题,一旦这个文件大到一定程度,那就导致写入日志会非常卡,最后导致整个集群挂掉。不知道当年哪位大哥埋的坑。。
在不停止程序清空out文件的方法有两种:
cp /dev/null nohup.out
cat /dev/null > nohup.out
但是对于一些很重要的debug信息,这样搞又会简单粗暴了点。所以可以限制只向out输出错误日志:
nohup ./program >/dev/null 2>log &
附注:
- 0:表示标准输入
- 1:标准输出,在一般使用时,默认的是标准输出
- 2:标准错误信息输出
如果还是想要保存所有的日志,那就只能请出老牌的工具logrotate了。这个有点复杂,而且网上有很多资料了,跳过。我其实也很好奇,搭集群的大哥为了偷懒,没有配置这个。
最后对于这样的进入后台运行的程序,还有个办法,就是用superviosr管理起来。supervisor可以配置保留日志的分数
和每个日志的大小,虽然无法按日期分日志,但是也能满足需求。
网友评论