如何找出打满磁盘的进程

本文介绍了在Linux系统中如何找出占用磁盘空间和读写通道的进程。首先,通过df命令检查磁盘使用情况,接着使用iotop定位读写最多的进程,再用lsof查看进程读写的文件,最后通过block_dump和iodump获取更详细的进程读写信息,从而找出问题源头。
摘要由CSDN通过智能技术生成

集群机器的磁盘经常会被某些进程打满

  1. 磁盘空间被打满,其他进程无法继续写入
  2. 磁盘的读写通道被打满,其他进程因为读写缓慢而影响性能

问题1: 磁盘空间被打满

1.1. 检查机器磁盘使用

主要是使用df命令来查看磁盘空间的使用,如下图所示:
image.png

Linux中df命令的输出清单的第1列是代表文件系统对应的设备文件的路径名(一般是硬盘上的分区);第2列是文件系统的类型;第3,4,5列给出分区总大小、已使用、剩余。用户也许会感到奇怪的是,第4,5列之和不等于第3列。这是因为缺省的每个分区都留了少量空间供系统管理员使用。即使遇到普通用户空间已满的情况,管理员仍能登录和留有解决问题所需的工作空间。清单中Use% 列表示普通用户空间使用的百分比,即使这一数字达到100%,分区仍然留有系统管理员使用的空间。最后,Mounted on列表示文件系统的挂载点。

上图中文件系统的类型有两种,ext4和tmpfs,可能会有疑问tmpfs是什么。ext4是基于硬盘的文件系统,tmpfs是基于内存的文件系统,具体可看:https://blog.csdn.net/cherisegege/article/details/79311621

由上图可知,通过df命令,上诉的%user列就是我们要找的磁盘使用情况,因此我们只要编写一个命令来获取磁盘使用即可

##df 获取磁盘使用情况
##grep 过滤出以dev开头的设备(比如基于内存的文件系统不以/deve开头)
##awk 输出df命令的第1,6,7列,分别是设备路径、磁盘使用率、挂载点
##sed 将一行中的%去除
df -lhT |grep '^/dev/'|awk '{print $1,$6,$7}' |sed 's/%//g'

1.2 找出占用空间最大的目录

## du -a 显示指定目录下文件的大小
## sort -n -r 按数值大小降序
## head -n 10 保留top 10
du -a /dump/15 | sort -n -r | head -n 10
## find指令为找出500M以上的文件,print0和xargs -0配合使用,用来解决文件名中有空格或特殊字符问题
## du -m是查看这些文件的大小,并以m为单位显示。
## sort -nr是按照数字反向排序(大的文件在前)
find /dump/15 -size +500M -print0|xargs -0 du -m|sort -nr

问题2: 磁盘读写通道被打满

2.1 使用iotop找到读写最大的进程

若是io util很高,但是无法快速的定位到IO负载的来源进程和来源文件,可以使用iotop来定位。iotop是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘IO的信息(

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值