问题:

硬盘显示被写满,但是用du -sh /*查看时占用硬盘空间之和还远小于硬盘大小,即找不到硬盘分区是怎么被写满的。
今天下午接到同事紧急求助,说生产线服务器硬盘满了。该删的日志都删掉了。可空间还是满的,情况危急啊。这个问题,在多年以前直接和间接的遇到过1-2次。以前太懒惰了,这次记录下来和大家分享。

相关日志如下:

█ 查看硬盘分区大小

 [root@www ~]# cat /etc/redhat-release
CentOS release 6.4 (Final)
[root@www ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 117G 111G % /
/dev/sda1 145M 12M 126M % /boot
tmpfs .0G .0G % /dev/shm

这是一台web服务器(apache+tomcat+mysql)
通过dh -h命令查看 总大小117G,使用了111G

 [root@www /]# fdisk -l

 Disk /dev/sda: 146.8 GB,  bytes
heads, sectors/track, cylinders
Units = cylinders of * = bytes Device Boot Start End Blocks Id System
/dev/sda1 * Linux
/dev/sda2 + Linux swap / Solaris
/dev/sda3 + Linux
[root@www /]# fdisk -l /dev/sda3 Disk /dev/sda3: 129.4 GB, bytes
heads, sectors/track, cylinders
Units = cylinders of * = bytes Disk /dev/sda3 doesn't contain a valid partition table

==========================================================================================
█ 使用du命令查看到底哪些目录占用了空间

[root@www /]# du -sh /*
8.6M /bin
6.1M /boot
2.8G /data ===》这里是DB目录
124K /dev
60M /etc
1.6G /home ===》这里是日志目录
120M /lib
24M /lib64
16K /lost+found
8.0K /media
0 /misc
12K /mnt
0 /net
8.0K /opt
0 /proc
614M /root
35M /sbin
8.0K /selinux
24K /server
8.0K /srv
0 /sys
24K /tmp
2.5G /usr
29G /var ==》这里是www目录

可以看出,上面所有目录之和 远小于总的空间占用111G,是什么占用了硬盘,还查不到呢?

解答:

出现上面问题原因:
在apache/tomcat服务在运行状态下,清空了运行服务的日志,这里是清理了当天或正在写入的apache及tomcat的日志文件,从而导致了上面问题。(有关原理细节见下文)引申下:一般情况下,大多数服务(包括脚本)在运行时,是不能删除当前正在写入的日志文件的。这点请大家要记牢。

本文的解决办法:

查找机器自身的服务,然后重起apache和tomcat。
重起apache后:

 [root@www ]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 117G 109G .3G % /
/dev/sda1 145M 12M 126M % /boot
tmpfs .0G .0G % /dev/shm

重起tomcat后:

[root@www ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 117G 38G 74G % /
/dev/sda1 145M 12M 126M % /boot
tmpfs .0G .0G % /dev/shm

上面问题原理分析:

1、这是一个文件系统层面的技术

2、当前 access.log 日志正被 apache 进程占用。通过 rm 命令删除 access.log,实际只删除了文件名(该日志文件应用记数不 ,因此空间不会被释放)

3、rm 命令删除了 access.log 后 apache 依然写日志到 access.log 中,当开启 apache 进程是,已经通过 access.log 定位到文件的 inode 了就是说再写日志是不通过 access.log,因此,即使删除了 access.log,apache 依然写日志到 access.log 所在的 inode 节点,所以导致硬盘空间增加。

4、因为删除了 access.log,所以,我们人类就看不到相关文件了,也就是说找不到该文件,du 也查不到。所以就会发现磁盘满而看不到什么文件撑满的硬盘,

Web服务器磁盘满故障的更多相关文章

  1. (转)Web服务器磁盘满故障深入解析

    Web服务器磁盘满故障深入解析 原文:http://blog.51cto.com/oldboy/612351 ############################################# ...

  2. Web服务器磁盘满故障深入解析

    问题:硬盘显示被写满,但是用du -sh /*查看时占用硬盘空间之和还远小于硬盘大小即找不到硬盘分区是怎么被写满的. 今天下午接到一学生紧急求助,说生产线服务器硬盘满了.该删的日志都删掉了.可空间还是 ...

  3. Web服务器磁盘满深入解析及解决

    ########################################################## 硬盘显示被写满但是用du -sh /*查看时占用硬盘空间之和还远#小于硬盘大小问的 ...

  4. 数据库服务器和web服务器磁盘占用查询

    对于Oracle数据库而言磁盘空间主要体现在表空间上,可使用sql语句进行查看Oracle 表空间的大小及使用情况: select sum(bytes)/1024/1024/1024 "Gb ...

  5. php 高级 多台web服务器共享session的方法

    解决多台web服务器共享session的问题,至少有以下三种方法:   一.将本该保存在web服务器磁盘上的session数据保存到cookie中 即用cookie会话机制替代session会话机制, ...

  6. [故障公告] 13:52-14:03,访问量突增,博客web服务器CPU 100%

    13:52-14:03,由于访问量突增,博客web服务器全线CPU 100%,造成博客站点不正常访问,由此给您带来麻烦,请您谅解. 为了迎接访问量的增长给web服务器CPU带来的巨大压力,上周我们已经 ...

  7. (转)Linux服务器磁盘空间占满问题

    转自:https://www.cnblogs.com/cindy-cindy/p/6796684.html 下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了),希望碰 ...

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

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

  9. Linux服务器磁盘空间占满问题

    下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了),希望碰到此类问题的人能带来帮助.   今天下班某电商技术部leader发现个问题,说他们服务器硬盘满了.把日志文件 ...

随机推荐

  1. tools:context=".MainActivity的作用(转)

    android:layout_width="match_parent" android:layout_height="match_parent" android ...

  2. JAVA学习网址收藏

    什么是JDK?http://baike.baidu.com/subview/25214/5047948.htm?fr=aladdin Java经典入门教程(环境说明) http://wenku.bai ...

  3. 用字符串模拟两个大数相加——java实现

    问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求.可以使用字符串来表示大数,模拟大数相加的过程. 思路: 1.反转两个字符串,便于从低位到高位相加和最高位 ...

  4. java 自动装箱自动拆箱

    1.Java数据类型 在介绍Java的自动装箱和拆箱之前,我们先来了解一下Java的基本数据类型. 在Java中,数据类型可以分为两大种,Primitive Type(基本类型)和Reference ...

  5. linux编程之内存映射

    一.概述                                                   内存映射是在调用进程的虚拟地址空间创建一个新的内存映射. 内存映射分为2种: 1.文件映射 ...

  6. 初探linux内核编程,参数传递以及模块间函数调用

    一.前言                                  我们一起从3个小例子来体验一下linux内核编程.如下: 1.内核编程之hello world 2.模块参数传递 3.模块间 ...

  7. Java Web之Servlet技术

    1.Servlet基础 针对Servlet技术开发,Sun公司提供了一些列接口和类,其中最重要的是javax.servlet.Servlet接口,两个重要的包是javax.servlet和javax. ...

  8. Java JDBC高级特性

    1.JDBC批处理 实际开发中需要向数据库发送多条SQL语句,这时,如果逐条执行SQL语句,效率会很低,因此可以使用JDBC提供的批处理机制.Statement和PreparedStatemen都实现 ...

  9. HDU 4630 No Pain No Game 树状数组+离线操作

    题意:给一串数字,每次查询[L,R]中两个数的gcd的最大值. 解法:容易知道,要使取两个数让gcd最大,这两个数最好是倍数关系,所以处理出每个数的所有倍数,两两间根据倍数关系形成一条线段,值为该数. ...

  10. Google类VR设备知识

    前言 本文所指的google类vr设备是指: 谷歌的Cardboard.三星Gear VR.暴风魔镜等这样的手机VR盒子,而并不是HTC Vive这类. 人眼立体感知能力 人的左右眼看到的东西是有差别 ...