我的磁盘空间去哪儿了?文件系统的火焰图

我的笔记本电脑最近的可用磁盘空间不足,原因是个谜。我有不同的工具来探索文件系统,包括从终端运行“find / -ls”命令,但它们使用起来可能很耗时。我想要按目录、子目录等查看空间的大图。
为此,我创建了一个简单的开源工具,使用火焰图作为最终的可视化。为了演示,这里是 Linux 4.9-rc5 源代码占用的空间。单击以缩放,按 Ctrl-F 进行搜索 ( SVG ):
如果您不熟悉火焰图,请参阅我的火焰图页面。在这种情况下,宽度对应于总大小。我创建它们是为了可视化堆栈跟踪,但由于它们是通用的分层可视化(技术上是具有倒置冰柱布局的邻接图),它们也适用于目录的层次结构。
我还用它来诊断朋友笔记本电脑的类似问题,结果证明这是由于备份应用程序占用了他们完全不知道的目录中的空间。
以下部分展示了如何自己创建一个。首先打开一个终端会话,以便您可以使用命令行。
使用 git
如果你有“git”命令,你可以获取FlameGraph存储库并从中运行命令:
git 克隆 https://github.com/brendangregg/FlameGraph
cd 火焰图
./files.pl /用户 | ./flamegraph.pl --hash --countname=bytes > out.svg
然后在浏览器中打开 out.svg。将“/Users”更改为您想要可视化的目录。这可能是所有内容的“/”(假设您没有安装可移动存储或网络文件系统,如果您这样做,它会意外地将它们包含在报告中)。
没有 git
如果您没有 git,您可以直接从 github 下载两个 Perl 程序:files.pl和flamegraph.pl,可以使用 wget 或通过浏览器下载(另存为)。那么步骤可以是:
chmod 755 文件.pl 火焰图.pl
./files.pl /用户 | ./flamegraph.pl --hash --countname=bytes > out.svg
同样,将“/Users”更改为您想要可视化的目录,然后在浏览器中打开 out.svg。
Linux 源代码示例
作为参考,我上面包含的 Linux 源代码示例是使用以下命令创建的:
文件.pl linux-4.9-rc5 | 火焰图.pl --hash --countname=字节
–title=“Linux 源码树按文件大小” --width=800 > files_linux49.svg
您可以使用以下选项自定义火焰图:
$ ./flamegraph.pl -h
选项 h 不明确(哈希、高度、帮助)
用法:./flamegraph.pl [选项] infile > outfile.svg

--title # 更改标题文本
--width # 图像宽度(默认 1200)
--height # 每帧的高度(默认16)
--minwidth # 省略较小的函数(默认 0.1 像素)
--fonttype # 字体类型(默认为“Verdana”)
--fontsize # 字体大小(默认 12)
--countname # 计数类型标签(默认“样本”)
--nametype # 名称类型标签(默认“功能:”)
--colors # 设置调色板。选择有:hot(默认)、mem、io、
              # 唤醒,链,java,js,perl,红色,绿色,蓝色,水色,
              # 黄色、紫色、橙色
--hash # 颜色由函数名哈希键控
--cp # 使用一致的调色板(palette.map)
--reverse # 生成堆栈反转的火焰图
--inverted # 冰柱图
--negate # 切换不同的色调(蓝色<->红色)
--help #这条信息

例如,
./flamegraph.pl --title="火焰图:malloc()" trace.txt > graph.svg

您可能需要了解 --minwidth 选项:比此更薄的矩形(缩小时为 1/10 像素)将被忽略,以节省 SVG 中的空间。但这可能意味着放大时会丢失一些东西。如果有问题,可以将 minwidth 设置为 0。
更新:请参阅我的后续帖子Flame Graphs vs Tree Maps vs Sunburst。

转载翻译自: https://www.brendangregg.com