访问服务器 request.getheader(origin)为null_服务器磁盘不足,1分钟快速搞定!

28e8ed87f7fec1ef4c6299628b819430.png

背景

对于系统服务器,一般由技术同学自行控制以及管理,但是针对服务器的监控以及告警比较容易被人忽视。所以经常会导致服务器上出现各种各样的问题。最常见的问题,就是磁盘空间被服务日志给打满了。 当服务器上磁盘已经被打满 ,服务无法正常运行时,需要做 的第一个工作就是去找到没用的日志文件,进行清空或者删除操作。 一、先看是不是 那当我们遇到类似的情况,比如访问无反应,服务器上没有日志了。第一步要做的,不是去想怎么处理,而是先确认是不是磁盘问题引起的。命令很简单df -h 476bbb01d8714a40db1a624b09c6a57d.png 先看看我们对应的目录磁盘使用率,是否有富余。如果磁盘还有空间,那我们就要从其他角度去检查服务的健康情况了。 二、再看为什么 当我们发现具体目录的使用率很高的时候,就可以进入到对应的目录里去使用下一个工具。du -s *查看当前目录所有文件夹占用的磁盘空间,此时占用磁盘空间数值的单位是K。如果想更直观些,可以使用du -sh *,此时单位根据大小可以自动展示成K、M、G等单位。 当然也可以跟上排序,推荐使用du -s * | sort -nr | more。如果使用du -sh * | sort -nr最终的排序,并不是空间从大到小,而是数值较大的会排在前面,比如500M会排在2G之前,因为500比2要大。通过上面的方法,可以快速定位到占用空间较大的文件夹,就可以一层一层去找到占用磁盘空间较大的文件了。 71e0b3f8a70037145f4dc0770a3b2805.png   041cc643af400f7ef0e4f3dabaee8eb8.png 三、解决方案 定位到大文件后,最简单的,大家想到的都是直接rm -f 文件名。针对于历史的日志文件。如果日志没有用了,当然可以用此种方案去处理,有一种情况,使用rm -f 文件名 是没有作用的。那就是删除的目标文件,当前是正在使用的状态下,比如某个tomcat正在往这个日志里面输出内容,如果我们直接删除此文件,文件虽然看不到了,但是磁盘空间并不会被释放。 有几种方案可以处理当前遇到的问题。1.利用/dev/null设备来清空文件,e.g. cat /dev/null > filename,cp /dev/null > filename。2.把一个不存在的内容重定向到文件中,e.g. > filename。3.输出空字符串到文件中,e.g. echo “” > filename。4. 利用“true”命令,e.g. true > filename,: > filename。5. 使用truncate命令来清空文件,e.g. truncate -s 0 filename。 四、长期解决方案 每当服务器磁盘出问题时,都可以通过上述的几个步骤去搞定磁盘问题。但是,如果此类问题经常出现,我们就需要不断重复上述的步骤,还是比较麻烦的,而且我们会发现,经常出问题的日志文件是在固定的几个目录下。这时候我们可以利用linux自带的crontab来执行一些固定的脚本来处理这些不断积累的日志文件。 针对历史没用的日志文件,我们可以每天定时去删除几天之前的日志。参考命令如下:
00 02 * * * /usr/bin/find /opt/log/* -type f -mtime +3 -exec rm {} \;
解释一下,crontab的时间设置,每天凌晨2点执行一次。可以根据自己负责的服务器情况,避免跟一些复杂的任务产生冲突。然后使用find命令找到日志目录下的所有日志文件。-mtime +3指距离当前时间96小时之前的所有文件。96/24=4天?为什么是+3呢,这个-mtime的参数,值得去深入理解一下。
  • -mtime 0 指过去24小时内被修改过的文件。

  • -mtime 1 指过去48小时至24小时内被修改过的文件。

  • -mtime 2 指过去72小时至48小时内被修改过的文件。

  • -mtime 3 指过去96小时至72小时内被修改过的文件。

可以看出来,后面的数字代表的意思是从当前时刻往前数,(N*24+24)小时至(N*24)小时内的所有被修改过的文件。那么当-mtime后面的参数带上“+”或者“-”的时候呢。也比较好理解,+就是在这个N的范围之前所有时间,-就是在N的范围之后所有的时间。继续举例子。
  • -mtime -0 指当前时间之前被修改过的文件(这不就是未来被修改过的文件吗?),其实大家可以在服务器上试一下,如果当前一个日志文件一直有内容输出,也是可以把这个文件找出来的,所以-mtime -0可以理解为此刻正在被修改的文件。

  • -mtime +0 就比较好理解了。就是在24小时之前被修改过的文件。

  • -mtime -1 指24小时之内被修改过的文件,与-mtime 0的效果一致。

  • -mtime +1 指48小时之前被修改过的文件。

  • -mtime -2 指过去48小时之内被修改过的文件。

  • -mtime +2 指过去72小时之前被修改过的文件。

  • -mtime -3 指过去72小时之内被修改过的文件。

  • -mtime +3 指过去96小时之前被修改过的文件。

到此,可以说明清楚,+3为什么不是3天(72小时)之前被修改过的所有文件,而是4天(96小时)之前被修改过的所有文件。 97b4cfb4697cd551e9cf4def1a26578b.png 处理几天前的日志文件,可以使用上面的定时任务,假设有一个服务的日志量特别大,一天或者几个小时之内就会把剩余的磁盘空间打满。这个时候我们可以怎么处理呢。按照文章上面的说法,直接删除日志文件是不可取的,如果涉及的服务并没有关闭或者重启,日志文件占用的磁盘空间并不会释放。这时候,就可以使用另外几种清空文件内容的命令了。参考命令如下:
0 */1 * * * /usr/bin/find /opt/log -type f -size +1G -exec cp /dev/null {} \;
类似之前的定时任务,执行频率调高,每一个小时执行一次,我们先要找到日志文件,多一个控制参数,就是找到内容超过1G的文件,只有特别大的文件,才是我们需要处理的目标。再去执行一个文件清空的命令,比如这边选择的是cp /dev/null filename。这样我们就可以做到,每小时去清空内容过多的日志文件。也不需要我们重启服务耽误其他测试工作。 总结 总结一下,发现服务器不可用的时候,可以先确认是否为磁盘问题(df命令),然后找到占用磁盘较多的文件(du),删除(rm)旧的或者清空(cat /dev/null)正在使用的日志文件。可以临时解决一次问题,如果经常出现类似的情况,我们就可以使用crontab来定时处理日志文件了。当然,针对线上的服务器,日志的备份还是比较重要的。千万不要图省事,参考本文的方式去处理。

也许想看

  • 怎样在Apache Httpclient上做扩展

  • 除敏捷实践外,项目管理还能做点什么?

  • 你应该知道的异步服务数据防丢失方案设计

  • 一文弄懂Nginx最核心的配置

  • [手把手系列之]Docker 部署 vue 项目

6c5d85c54977d6ccb885f462d8b94f02.png

好文我在看?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值