背景

对于系统服务器,一般由技术同学自行控制以及管理,但是针对服务器的监控以及告警比较容易被人忽视。所以经常会导致服务器上出现各种各样的问题。最常见的问题,就是磁盘空间被服务日志给打满了。当服务器上磁盘已经被打满,服务无法正常运行时,需要做的第一个工作就是去找到没用的日志文件,进行清空或者删除操作。一、先看是不是那当我们遇到类似的情况,比如访问无反应,服务器上没有日志了。第一步要做的,不是去想怎么处理,而是先确认是不是磁盘问题引起的。命令很简单df -h先看看我们对应的目录磁盘使用率,是否有富余。如果磁盘还有空间,那我们就要从其他角度去检查服务的健康情况了。二、再看为什么当我们发现具体目录的使用率很高的时候,就可以进入到对应的目录里去使用下一个工具。du -s *查看当前目录所有文件夹占用的磁盘空间,此时占用磁盘空间数值的单位是K。如果想更直观些,可以使用du -sh *,此时单位根据大小可以自动展示成K、M、G等单位。当然也可以跟上排序,推荐使用du -s * | sort -nr | more。如果使用du -sh * | sort -nr最终的排序,并不是空间从大到小,而是数值较大的会排在前面,比如500M会排在2G之前,因为500比2要大。通过上面的方法,可以快速定位到占用空间较大的文件夹,就可以一层一层去找到占用磁盘空间较大的文件了。三、解决方案定位到大文件后,最简单的,大家想到的都是直接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小时)之前被修改过的所有文件。处理几天前的日志文件,可以使用上面的定时任务,假设有一个服务的日志量特别大,一天或者几个小时之内就会把剩余的磁盘空间打满。这个时候我们可以怎么处理呢。按照文章上面的说法,直接删除日志文件是不可取的,如果涉及的服务并没有关闭或者重启,日志文件占用的磁盘空间并不会释放。这时候,就可以使用另外几种清空文件内容的命令了。参考命令如下:

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 项目

好文我在看?

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

  1. 将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定

    1.前言 前段时间,自己搞了个阿里云的服务器.想自己在上面折腾,但是不想因为自己瞎折腾而污染了现有的环境.毕竟,现在的阿里云已经没有免费的快照服务了.要想还原的话,最简单的办法就是重新装系统.而一旦重 ...

  2. nas存储用网线直连服务器,几分钟就搞定 搭建NAS存储必备秘籍

    1什么是NAS存储呢? 在科技领域,有一个奇怪的理论叫"懒人效应",其认为懒人往往推动了技术的发展,无数厂商为满足懒人的各种奇葩要求而研发了更好用的产品. 看电影是很多人都喜欢的事 ...

  3. 乐视盒子服务器有响应,乐视盒子卡顿这样做快速搞定,这几个方法你要学会

    原标题:乐视盒子卡顿这样做快速搞定,这几个方法你要学会 乐视盒子作为目前用户保有量比较高的的一个电视盒子产品,有时候难免会出现卡顿的情况,很多人都不知道怎么解决,这边小编给大家盘点几个好用的方法,让大 ...

  4. HttpServletResponse.getWriter().print乱码,request.getHeader乱码,解决方法

    1.添加响应类型即可 //这句话的意思,是让浏览器用utf8来解析返回的数据         response.setHeader("Content-type", "te ...

  5. web页面防盗链功能使用--request.getHeader(Referer)

    使用Request对象设置页面的防盗链 所谓的防盗链就是当你以一个非正常渠道去访问某一个Web资源的时候,服务器会将你的请求忽略并且将你的当前请求变为按正常渠道访问时的请求并返回到相应的页面,用户只有 ...

  6. java获取IP地址,request.getHeader(“x-forwarded-for“)

    Nginx配置 前后端分离之后,采用nginx作为静态服务器,并通过反向代理的方式实现接口跨域的方式,在降低开发成本的同时也带来了诸多问题,例如客户端真实IP的获取. 在一些特殊场景下,比如风控和支付 ...

  7. shell脚本:Dos 攻击防范、系统发送告警、MySQL 数据库备份单、MySQL 数据库备份多、Nginx 日志分析、网卡实时流量、服务器磁盘利用率

    系统配置初始化脚本 #/bin/bash # 设置时区并同步时间 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime if ! crontab ...

  8. 关于Linux服务器磁盘空间占满问题的解决方法

    下面给大家分享一篇关于Linux服务器磁盘占满问题解决方法(/dev/sda3 满了),需要的的朋友参考下吧 下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了),希望 ...

  9. foreign 磁盘阵列_服务器磁盘 foreign

    Dell R710服务器磁盘恢复数据库一例(记录) 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51ct ...

最新文章

  1. C语言文件读写(5)-文件位置相关
  2. python和sqlserver_利用python实现mysql数据库向sqlserver的同步
  3. linux 配置思科路由器,将配置文件导入cisco2611路由器步骤
  4. 课程设计完成之后要考虑的问题
  5. H - Holy Grail
  6. 草稿-乱-爬虫-post请求数据与Request Payload
  7. python的开发环境包括_下搭建 Python 开发环境
  8. windows下用XShell远程ubuntu时连接失败
  9. c语言学习-字符串输出
  10. electronjs设置宽度_Js操作DOM元素及获取浏览器高宽的简单方法
  11. CSDN积分赚取方法
  12. Autoware 矢量地图标注(Autoware Maptool插件)
  13. 用户根据短信验证码注册
  14. 《戴上“白帽子”的黑客们:把漏洞变成礼物》
  15. c语言编写方波信号的思路,频率可调的方波信号发生器设计及电路
  16. 左手鼠标指针_使您的鼠标指针左手友好
  17. python 北京出租车收费3.45_北京出租车计费标准和价目表
  18. cmd 批量命名,批量删除
  19. python中frame用法_Python实例之wxpython中Frame使用方法
  20. 《如何高效学习》:将所学的知识运用到实际中去

热门文章

  1. springMVC——Xml配置方式实现Helloworld
  2. Why is it recommended to create clusters with odd number of nodes? | 为什么集群节点建议奇数个?
  3. JVM从入门到精通(四):内存屏障与JVM指令,对象的内存布局
  4. MySQL事务及锁机制大揭秘 - 公开课笔记
  5. PAT1001 A+B Format (20 分)
  6. JDK12的新特性:teeing collectors
  7. c++的线程安全静态检查
  8. spring与cxf的整合
  9. Python网络爬虫从入门到实践 -- chapter 1 -- 网络爬虫入门
  10. JSONObjec的作用详解——Web网络系列学习笔记