Linux 中的磁盘空间使用情况分析

Posted

技术标签:

【中文标题】Linux 中的磁盘空间使用情况分析【英文标题】:Disk Space Usage Profiling in Linux 【发布时间】:2016-05-23 09:09:05 【问题描述】:

我在 Linux [Red Hat] 上运行 C++ 程序,该程序在硬盘上创建临时文件以计算其结果。我需要知道该程序在运行时从磁盘中使用了多少空间。我无法更改源代码以保留文件,因此我可以在生成结果之前和之后减去 Program 文件夹的大小。在这种情况下,是否有任何分析工具或命令行可以帮助我。

【问题讨论】:

【参考方案1】:

我想你可以在程序从终端运行之前和之后使用du -h /path/todir

du - 估计文件空间使用率

-h, --人类可读 人类可读格式的打印尺寸(例如,1K 234M 2G)

如果您需要更多选择,请查看man du

【讨论】:

感谢您的回复,但此命令不会在我的程序运行期间分析磁盘使用情况,它会根据硬盘上创建的文件打印前后的磁盘空间使用情况。如果程序在运行期间创建临时文件并删除它们,此命令是否会报告这些文件的磁盘空间使用情况?【参考方案2】:

您可以使用 /proc/[pid]/io 中维护的统计信息。

来自 /proc 手册页:

此文件包含进程的 I/O 统计信息,例如 示例:

              # cat /proc/3828/io
              rchar: 323934931
              wchar: 323929600
              syscr: 632687
              syscw: 632675
              read_bytes: 0
              write_bytes: 323932160
              cancelled_write_bytes: 0

write_bytes: bytes written
                     Attempt to count the number of bytes which this process
                     caused to be sent to the storage layer.

你可以编写类似的脚本,

#!/bin/bash
c=0
echo $1
rm /tmp/writtenBytes.txt
psout=`ps aux | grep "$1" | grep -v $0 | grep -v grep `
while [[ "$psout" != "" ]]
do
    pid=`echo $psout | awk 'print $2'`
    cat /proc/$pid/io  | grep write  | grep -v cancelled >> /tmp/writtenBytes.txt   
    psout=`ps aux | grep "$1" | grep -v $0 | grep -v grep`
    echo $psout
    sleep 1
done

身份运行此脚本
bash -x getIO.sh "postgres: stats collector"

此脚本将创建文件 /tmp/writtenBytes.txt,其中包含名为“postgres: stats collector”的进程写入的字节数

【讨论】:

以上是关于Linux 中的磁盘空间使用情况分析的主要内容,如果未能解决你的问题,请参考以下文章

如何监控linux阿里云磁盘空间

linux怎样查看磁盘分区情况

1.linux服务器磁盘满了,怎么删除

linux下查看磁盘空间占用

Ubuntu 14.04中如何查看磁盘空间使用情况

linux磁盘空间丢失,如何找回?