java 写文件 异常 磁盘空间满_系统磁盘空间满的一个问题

我们的集成环境如果磁盘空间满,一般情况下可以通过删除log或者多余的文件来解决,但有时候,这种方法是无法解决的。以上次碰到情况为例:

服务器10.2.5.4磁盘空间满,致使某核心无法正常运行。于是登陆核查,如下:

# df -h

文件系统              容量  已用 可用 已用% 挂载点

/dev/sda2 9.7G 7.0G 2.3G 76% /

/dev/sda1 251M 19M 219M 8% /boot

/dev/sda5 54G 24G 28G 100% /home

none 1004M 0 1004M 0% /dev/shm

ccvob.alipay.net:/ccvob1

133G 68G 59G 54% /ccvob1

10.2.4.98:/home/nfsshare

225G 145G 69G 68% /share/upload

进入/home目录使用du查看/home下的磁盘使用率

# cd /home

# du -sh *

3.1M admin

1.3G ctu

1.2G godzilla

76K log

40K nagios

609M paygw

784M smsgw

20G trade

24K ukulele

发现目录home目录下的子目录所有文件大小加起来远远少于54G,可是却提示home已经100%占用。这种干扰du查看磁盘空间使用率的问题,一般是下面两种情况造成的:

1、用户删除了文件,这些删除的文件使用du无法查看,但系统仍然有进程在写被删除的文件。

2、磁盘分区的某一个目录挂载了另外一个分区时,du查看到的磁盘空间为挂载分区后的目录空间。

由于home目录未挂载另一分区,所以应该是用户删除系统的日志文件,而系统java进程没被停掉这一情况造成的。

解决方法:

1、查找被删除文件

被删除文件,在写程序未退出的情况下,被删除文件同样会占用磁盘空间。

# lsof -n | head -1

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

# lsof -n /home | grep deleted

由上面可以看出,这些log已经被删除,但是java进程依然在写这些log。

2、杀掉写文件的java进程,磁盘空间会自然释放

#pkill -9 19543

# df

文件系统               1K-块        已用     可用 已用% 挂载点

/dev/sda2 10080520 7257740 2310712 76% /

/dev/sda1 256667 19223 224192 8% /boot

/dev/sda5 56087900 25093392 28145384 45% /home

总结:由于我们经常在没有停掉系统的时候就直接删除log,而有时候系统的java进程在重新启动的时候并没有停掉,依然在系统中运行并不停的在写已经被删除的日志文件,多次累积过后,就会造成磁盘空间变满。所以,建议每次删除系统log前,请执行下#killall java 先将该用户下的系统停掉

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值