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 中的磁盘空间使用情况分析的主要内容,如果未能解决你的问题,请参考以下文章