答案:Linux性能分析需结合systemd-analyze与多种工具,从启动到运行时全面排查。首先用systemd-analyze查看启动耗时,blame定位慢服务,critical-chain分析关键路径,plot生成可视化图表;运行时则用top/htop、vmstat、mpstat监控CPU,free、vmstat、slabtop分析内存,iostat、iotop检测磁盘I/O,ss、iftop排查网络问题;需避免误读free和load average,建立性能基线,结合perf、strace、bpftrace深入追踪,并通过监控系统实现趋势分析,理解cgroups资源限制影响。

在Linux系统里琢磨性能问题,说白了,就是一场侦探游戏。你得从各种蛛丝马迹中找出瓶颈,无论是CPU、内存、磁盘I/O还是网络。
systemd-analyze
要深入分析Linux系统的性能,我们通常会从宏观到微观,从启动到运行时,多维度地审视。
首先,
systemd-analyze
systemd-analyze
systemd-analyze blame
systemd-analyze critical-chain
systemd-analyze plot > boot.svg
但启动只是系统生命周期的一部分。运行时性能分析需要更多工具:
top
htop
%us
%sy
%wa
load average
%us
%sy
vmstat 1
r
cs
r
mpstat -P ALL 1
free -h
Swap
Swap
vmstat 1
si
so
ps aux --sort=-%mem
slabtop
iostat -xz 1
%util
r/s
w/s
rkB/s
wkB/s
await
iotop
top
netstat -tulnpa
ss -tulnpa
iftop
ss -s
性能分析是个迭代的过程:发现问题 -> 假设原因 -> 验证 -> 优化。它要求你不仅仅是看数字,更要理解这些数字背后的含义。
systemd-analyze
systemd-analyze
当你运行
systemd-analyze
Kernel
Initrd
Userspace
Userspace
接下来,
systemd-analyze blame
unit
.service
.mount
.device
network-online.target
mysql.service
docker.service
systemd-analyze critical-chain
最后,
systemd-analyze plot > boot.svg
解读这些输出时,关键在于结合你的系统知识。一个服务耗时10秒,这算长吗?这取决于这个服务的功能和它所处的环境。对于一个简单的Web服务器,10秒可能太长;但对于一个需要加载大量数据、进行复杂初始化的数据库服务,10秒可能就比较正常。所以,没有绝对的“长”或“短”,只有相对的“异常”。
systemd-analyze
systemd-analyze
CPU诊断:
top
htop
top
htop
load average
load average
%us
%sy
%sy
htop
vmstat 1
r
cs
in
r
wa
mpstat -P ALL 1
mpstat
内存诊断:
free -h
available
Swap
free
buff/cache
available
Swap
vmstat 1
si
so
ps aux --sort=-%mem
slabtop
slabtop
磁盘I/O诊断:
iostat -xz 1
%util
await
await
r/s
w/s
rkB/s
wkB/s
iotop
top
iotop
网络诊断:
ss -s
netstat -s
TIME_WAIT
CLOSE_WAIT
netstat -tulnpa
ss -tulnpa
iftop
iftop
这些工具各有侧重,但它们组合起来,就能为你描绘出系统性能的全貌。关键在于,你不能只看一个指标,而是要综合分析,形成一个完整的性能画像。
性能分析这活儿,干久了总会遇到一些坑,也会总结出一些门道。避免误区,掌握一些高级技巧,能让你少走弯路,更快地找到问题的症结。
常见误区:
free
free -h
free
buff/cache
available
Swap
load average
load average
load average
高级技巧:
使用perf
top
perf
# 记录某个命令的性能数据 perf record -F 99 -a sleep 10 # 分析数据并显示调用图 perf report
这能帮你定位到代码层面的性能瓶颈。
strace
strace -p <PID>
strace
bpftrace
eBPF
eBPF
bpftrace
eBPF
# 示例:追踪所有进程的openat系统调用
bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("%s %s\n", comm, str(args->filename)); }'这个工具的学习曲线有点陡峭,但一旦掌握,它能提供前所未有的洞察力。
结合监控系统进行趋势分析: 单次性能分析只能反映某个时间点的状态。将性能指标(如CPU利用率、内存使用、磁盘I/O、网络流量)整合到像Prometheus + Grafana这样的监控系统中,可以让你看到长期的趋势,发现周期性问题,并在问题发生前收到预警。
理解cgroups
cgroups
cgroups
cgroup
性能分析是一个持续学习和实践的过程。它没有一劳永逸的解决方案,更多的是一种思维方式:带着疑问去观察,用工具去验证,用数据去说话。
以上就是如何在Linux中分析性能 Linux systemd-analyze诊断的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号