top,htop,df,perf

以下为常用的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 指定进程PID
  • sleep 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>

八、推荐工具链与进阶工具

工具特点/用途地址
perfLinux性能分析核心工具自带,或apt install linux-tools-common
FlameGraph通用火焰图生成工具https://github.com/brendangregg/FlameGraph
async-profilerJava性能分析利器https://github.com/jvm-profiling-tools/async-profiler
py-spyPython程序分析工具https://github.com/benfred/py-spy

九、实践建议

  • 建议定期对关键应用进行火焰图分析。
  • 在优化性能前后分别生成火焰图进行对比。
  • 尽量控制采样频率(如每秒99次即可),避免对程序过大干扰。

总结:

火焰图是一种简单直观、功能强大的性能分析工具,已广泛应用于各类软件开发和优化工作中。

学习使用火焰图,可以大幅提高性能调优的效率,减少定位性能问题的时间,是程序开发、运维工程师必备技能之一。

<think>好的,我现在需要帮用户整理服务器性能优化及故障排查的指南,涵盖CPU、内存、磁盘I/O、网络延迟、进程管理等方面的命令和方法。首先,我得回忆一下之前用户提到的引用内容,比如iostat、top、vmstat这些工具,还有他们提到的排查流程,比如先整体后局部。用户可能希望得到一个结构清晰的步骤,每个部分有对应的命令和解释,方便他们一步步操作。 首先,CPU部分,常用的命令是tophtop,可以看整体负载,还有mpstat看每个核心的使用情况。需要提到用户态、内核态、等待IO的时间这些指标,以及如何定位高CPU进程。比如用ps命令配合排序。 接下来是内存,free和vmstat是基础,要解释buffer和cache的区别,以及如何判断是否内存不足。可能还需要提到oom-killer的情况,以及如何用sar来监控内存使用趋势。磁盘I/O方面,iostat是必须的,要关注%util和await这些指标。iotop可以看具体进程的IO情况,还有smartctl检查硬盘健康状态。这部分用户之前引用里也提到了iostat,所以需要重点展开。网络延迟的问题,ping和traceroute是基本的,mtr结合了两者。netstat和ss用来查看连接状态,iftop看流量。可能还需要提到TCP重传和丢包的检查方法,比如用sar -n TCP。 进程管理的话,top和ps已经提过,但可能需要更详细的用法,比如psaux --sort=-%cpu来排序进程。strace和perf用来分析进程行为,特别是针对CPU高的进程。最后,日志和系统监控工具,比如journalctl查看系统日志,还有Prometheus和Grafana做长期监控,用户之前引用里也提到过,所以需要包含这部分。另外,引用里的APM工具如Skywalking可能对用户有帮助,但用户现在问的是命令和方法,可能放在进阶部分。需要确保每个部分都有对应的命令示例,并且解释每个指标的意义,比如CPU的us、sy、wa,内存的free、available,磁盘的await、%util等。还要注意结构清晰,分点列出,符合用户要求的“先整体后局部”的逻辑。可能还需要在最后添加相关问题,比如如何分析某个具体指标,或者优化方法,这样用户可以根据指南进一步深入。</think>### 服务器性能优化及故障排查指南 #### 一、CPU性能排查 1. **整体负载分析** ```bash top # 实时查看CPU使用率、负载及进程占用情况(按1查看多核) htop # 增强版top(需安装) mpstat -P ALL 1 # 查看每个CPU核心的详细使用率(%usr/%sys/%iowait等) ``` - **关键指标**:用户态(`%us`)、内核态(`%sy`)、等待I/O(`%wa`)、空闲(`%id`),若`%wa`高则需排查磁盘I/O[^1]。 2. **定位高CPU进程** ```bash ps aux --sort=-%cpu | head -n 10 # 按CPU使用率排序进程 pidstat 1 -u # 实时监控进程的CPU使用率 perf top # 分析函数级CPU热点(需安装perf) ``` --- #### 二、内存排查 1. **内存整体使用** ```bash free -h # 查看物理内存和Swap使用情况 vmstat 1 # 监控内存、Swap、磁盘I/O等(关注si/so是否为0) cat /proc/meminfo | grep -E "MemFree|Cached|Available" # 详细内存信息 ``` - **关键指标**:`Available`值反映可用内存,若低于10%可能触发OOM-Killer[^3]。 2. **内存泄漏定位** ```bash sar -r 1 # 监控内存变化趋势 pmap -x <PID> # 查看进程内存映射 jstat -gcutil <PID> 1000 # 监控JVM堆内存(针对Java应用) ``` --- #### 三、磁盘I/O排查 1. **磁盘整体性能** ```bash iostat -x 1 # 监控磁盘I/O利用率、响应时间(%util、await) dstat --disk # 实时磁盘读写速率 df -Th # 查看磁盘空间及文件系统类型 ``` - **关键指标**:`%util`>80%表示磁盘繁忙,`await`>10ms可能存在瓶颈[^1]。 2. **高I/O进程定位** ```bash iotop -oPa # 显示实时I/O占用进程(需安装) pidstat -d 1 # 监控进程的磁盘读写 lsof +D /path # 查看目录下被打开的文件及进程 ``` --- #### 四、网络延迟排查 1. **基础网络检测** ```bash ping <IP> # 测试基础延迟 traceroute <IP> # 追踪路由路径 mtr <IP> # 结合ping+traceroute(需安装) netstat -s | grep -E "retransmit|timeout" # 查看TCP重传/超时 ``` 2. **流量与连接分析** ```bash iftop -i eth0 # 实时监控网卡流量(需安装) ss -antp # 查看TCP连接状态(替代netstat) tcpdump -i eth0 -w capture.pcap # 抓包分析(结合Wireshark) ``` --- #### 五、进程管理 1. **进程状态监控** ```bash ps -ef --forest # 查看进程树结构 pstree -p <PID> # 显示进程子线程 strace -p <PID> # 跟踪系统调用(排查阻塞) ``` 2. **资源占用聚合** ```bash atop # 综合监控CPU/内存/磁盘/网络(需安装) nmon # 交互式资源监控工具 ``` --- #### 六、进阶工具 1. **日志与追踪** ```bash journalctl -u <服务名> --since "10分钟前" # 查看systemd服务日志 tcpdump -i eth0 'port 80' -w http.pcap # 抓取HTTP流量 ``` 2. **长期监控方案** - **Prometheus+Grafana**:配置`node_exporter`采集系统指标,可视化监控[^2]。 - **APM工具**:使用SkyWalking、Pinpoint追踪应用级性能[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值