以下为常用的Linux命令,用于查看进程、内存和磁盘的情况:
一、查看进程
- 查看所有运行中的进程(动态更新):
top
- 查看所有进程的详细信息:
ps aux
- 根据进程名查找进程:
ps aux | grep 进程名
- 树形结构显示进程:
pstree
二、查看内存使用情况
- 查看内存整体使用情况:
free -h
- 实时查看内存占用最多的进程:
top
按 Shift + M 按内存占用排序。
- 更直观的内存使用情况(推荐):
htop
需安装:
sudo apt install htop
三、查看磁盘使用情况
- 查看磁盘整体使用情况:
df -h
- 查看当前目录下各文件(夹)大小:
du -sh *
- 查看根目录下一级目录的磁盘占用:
sudo du -sh /*
- 查看磁盘的I/O性能情况:
iostat -dx 1
需安装:
sudo apt install sysstat
综合工具推荐:
- 推荐安装
htop(进程、内存)和glances(全面监控):
sudo apt install htop glances
使用方法:
htop # 查看进程、内存等
glances # 查看磁盘、内存、进程、网络等实时信息
以上这些命令都是Linux系统管理、调试必备的工具,可以满足日常监控需求。
一、火焰图(Flame Graph)是什么?
火焰图(Flame Graph)是一种可视化性能分析工具,用于分析程序(尤其是CPU密集型程序)的性能瓶颈。
由著名性能专家 Brendan Gregg 创造,它能直观展示程序在运行期间调用栈(stack traces)耗费时间的比例。
二、火焰图的特点
-
直观性强:
- 每个方块表示函数调用,宽度表示耗时比例。
- 方块上下堆叠形成调用链,越往上层是越细粒度的函数调用。
-
交互式分析:
- 可以放大、缩小或点击查看具体函数调用路径和时间占比。
-
语言和平台无关:
- 支持C/C++、Java、Python、Go、Node.js等各种语言。
- 支持Linux内核、用户空间程序、Docker容器等。
三、火焰图的组成与结构
火焰图典型结构如下:
+--------------------------+
| main() |
+------+---------+---------+
| |
+--------+----+ foo()
| bar() |
+---+----+ +---+---+
| baz() | | qux() |
+--------+ +-------+
- X轴:表示 CPU 占用比例(宽度越宽,占用时间比例越大)。
- Y轴:表示调用栈的深度(越往上表示调用越深)。
- 颜色:通常随机,无实际含义;可用于区分不同函数调用。
四、如何生成火焰图(以Linux为例)
1. 准备工具
火焰图生成需要两个关键工具:
- perf:Linux下的性能分析工具。
- FlameGraph:火焰图生成工具(GitHub开源)。
安装方法:
# 安装perf工具(Debian/Ubuntu)
sudo apt install linux-tools-common linux-tools-$(uname -r)
# 下载并安装FlameGraph
git clone https://github.com/brendangregg/FlameGraph.git
2. 生成perf数据(以CPU分析为例)
# 示例:对程序 ./myapp 性能采样 30秒
sudo perf record -F 99 -g -- ./myapp
# 或对已运行进程PID采样30秒:
sudo perf record -F 99 -g -p <PID> -- sleep 30
参数解释:
-F 99每秒采样99次-g捕获调用栈-p PID指定进程PIDsleep 30持续采样30秒
3. 转换perf数据到火焰图格式
- 生成调用栈折叠文件(stack-collapse文件):
sudo perf script > out.perf
./FlameGraph/stackcollapse-perf.pl out.perf > out.folded
4. 生成火焰图SVG文件
./FlameGraph/flamegraph.pl out.folded > flamegraph.svg
然后用浏览器打开flamegraph.svg,即可交互查看。
五、火焰图的解读技巧
- 宽度:宽度越大,表示此函数消耗CPU越多,重点优化。
- 顶部:越靠近顶部的函数,往往是具体占用CPU的热点。
- 底部:越靠近底部,代表调用入口,通常是主函数或线程入口。
- 异常情况:
- 频繁的短小调用栈可能意味着频繁的函数调用开销。
- 单个巨大方块往往意味着明显的CPU热点。
六、典型应用场景
- 定位高CPU占用程序的热点函数。
- 优化算法和数据结构。
- 分析线程或进程的瓶颈。
- 性能回归检测与诊断。
- 内核级别的性能问题诊断。
七、扩展功能与应用
1. 内存火焰图(Memory Flame Graph)
通过内存分配事件生成的火焰图,分析内存泄漏或异常分配。
# 示例:捕获malloc调用栈
sudo perf record -e malloc -g -- ./myapp
2. Java火焰图
使用async-profiler(推荐):
- 参考:https://github.com/jvm-profiling-tools/async-profiler
./profiler.sh -d 60 -f flamegraph.html <Java进程PID>
八、推荐工具链与进阶工具
| 工具 | 特点/用途 | 地址 |
|---|---|---|
perf | Linux性能分析核心工具 | 自带,或apt install linux-tools-common |
FlameGraph | 通用火焰图生成工具 | https://github.com/brendangregg/FlameGraph |
async-profiler | Java性能分析利器 | https://github.com/jvm-profiling-tools/async-profiler |
py-spy | Python程序分析工具 | https://github.com/benfred/py-spy |
九、实践建议
- 建议定期对关键应用进行火焰图分析。
- 在优化性能前后分别生成火焰图进行对比。
- 尽量控制采样频率(如每秒99次即可),避免对程序过大干扰。
总结:
火焰图是一种简单直观、功能强大的性能分析工具,已广泛应用于各类软件开发和优化工作中。
学习使用火焰图,可以大幅提高性能调优的效率,减少定位性能问题的时间,是程序开发、运维工程师必备技能之一。
1121

被折叠的 条评论
为什么被折叠?



