0%

Linux 性能优化笔记

分享根据《Linux性能优化》课程图片整理的笔记。

前言

实验环境:ubuntu 18.04、切换至root权限下操作

查看命令详细使用方法,可以:man xxx
提及到路径的话,一般可以 cat /x/xx/xxx
提及到工具的话,如果没安装,可以:apt-get install xxx

CPU篇

CPU性能指标

Linux 性能优化

根据指标找工具

性能指标 工具 说明
平均负载 uptime
top
uptime最简单;
top提供了更全的指标
系统整体CPU使用率 vmstat
mpstat
top
sar
/proc/stat
top、vmstat、mpstat只可以动态查看,

/proc/stat/是其他性能工具的数据来源
进程CPU使用率 top
pidstat
ps
htop
atop
top和ps可以按CPU使用率给进程排序,
而pidstat只显示实际用了CPU的进程

htop和atop以不同颜色显示更为直观
系统上下文切换 vmstat 除了上下文切换次数,
还提供运行状态和不可中断状态进程的数量
进程上下文切换 pidstat 注意加上-w 选项
软中断 top
/proc/softirqs
mpstat
top提供软中断CPU使用率,
而/proc/softirqs和mpstat提供了各种软中断在每个CPU上的运行次数
硬中断 vmstat
/proc/interrupts
vmstat提供总的中断次数,
而/proc/interrupts提供各种中断在每个CPU上运行的累积次数
网络 dstat
sar
tcpdump
dstat和sar提供总的网络接收和发送情况,
而tcpdump则是动态抓取正在进行的网络通讯
I/O dstat
sar
dstat和sar都提供了I/O的整体情况
CPU个数 /proc/cpuinfo
lscpu
lscpu更直观
事件剖析 perf
execsnoop
perf可以用来分析CPU的缓存以及内核调用链,execsnoop用来监控短时进程

根据工具查指标

性能工具 CUP性能指标
uptime 平均负载
top 平均负载、运行队列、整体的CPU使用率以及每个进程的状态和
CPU使用率
htop top增强版,以不同颜色区分不同类型的进程,更直观
atop CPU、内存、磁盘和网络等各种资源的全面监控
vmstat 系统整体的CPU使用率、上下文切换次数、中断次数、
还包括处于运行和不可中断状态的进程数量
mpstat 每个CPU的使用率和软中断次数
pidstat 进程和线程的CPU使用率、中断上下文切换次数
/proc/softirqs 软中断类型和在每个CPU上的累积中断次数
/proc/interrupts 硬中断类型和在每个CPU上的累积中断次数
ps 每个进程的状态和CPU使用率
pstree 进程的父子关系
dstat 系统整体的CPU使用率
sar 系统的整体CPU使用率,包括可配置的历史数据
strace 进程的系统调用
perf CPU性能事件剖析,如调用链分析、CPU缓存、CPU调度
execsnoop 监控短时进程

CPU性能优化分析

Linux 性能优化

内存篇

内存性能指标

Linux 性能优化

根据指标找工具

内存指标 性能工具
系统已用、可用、剩余内存 free
vmstat
sar
/proc/meminfo
进程虚拟内存、常驻内存、共享内存 ps
top
进程内存分布 pmap
进程Swap换出内存 top
/proc/pid/status
进程缺页异常 ps
top
系统换页情况 sar
缓存(Cache)/缓冲区(Buffer)用量 free
vmstat
sar
cachestat
缓存(Cache)/缓冲区(Buffer)用量 cachetop
SWAP已用空间和剩余空间 free
sar
Swap换入换出 vmstat
内存泄漏检测 memleak
valgrind
指定文件的缓存大小 pcstat

根据工具查指标

性能工具 内存指标
free
/proc/meninfo
系统已用、可用、剩余内存以及缓存和缓冲区的使用量
top
ps
进程虚拟、常驻、共享内存以及缺页异常
vmstat 系统剩余内存、缓存、缓冲区、换入、换出
sar 系统部分内存换页情况、内存使用率、缓存和缓冲区用量
以及Swap
cachestat 系统缓存和缓冲区的命中率
cachetop 进程缓存和缓冲区的命中率
slabtop 系统Slab缓存使用情况
/proc/pid/status 进程Swap内存等
/proc/pid/smaps
pmap
进程地址空间和内存状态
valgrind 进程内存错误检查器,用来检测内存初始化、泄漏、
越界访问等各种内存错误
memleak 内存泄漏检测
pcstat 查看指定文件的缓存情况

内存性能优化分析

Linux 性能优化

I/O篇

I/O性能指标

Linux 性能优化

根据指标找工具

性能指标 工具 说明
文件系统空间容量、使用量以及剩余空间 df 详细文档见
info coreutils ‘df invocation’
索引结点容量、使用量以及剩余量 df 使用 -i 选项
页面缓存和可回收Slab缓存 /proc/meminfo
sar、vmstat
使用 sar -r 选项
缓冲区 /proc/meminfo
sar、vmstat
使用 sar -r 选项
目录项、索引节点以及文件系统的缓存 /proc/slabinfo
slabtop
slabtop更直观
磁盘I/O使用率、IOPS、
吞吐量、响应时间、I/O平均大小
以及等待队列长度
iostat
sar、dstat
使用 iostat -d -x 或 sar -d 选项
进程I/O大小以及I/O延迟 pidstat
iotop
使用 pidstat -d 选项
块设备I/O事件跟踪 blktrace 示例:blktrace -d /dev/sda -o- (管道符) blkparse -i-
进程I/O系统调用跟踪 strace 通过系统调用跟踪进程的I/O
进程块设备I/O大小跟踪 biosnoop
biotop
需要安装bcc软件包

根据工具查指标

性能工具 性能指标
iostat 磁盘I/O使用率、IOPS、吞吐量、响应时间、I/O平均大小以及等待队列长度
pidstat 进程I/O大小以及I/O延迟
sar 磁盘I/O使用率、IOPS、吞吐量以及响应时间
dstat 磁盘I/O、IPOS以及吞吐量
iotop 按I/O大小对进程排序
slabtop 目录项、索引结点以及文件系统的缓存
/proc/slabinfo 目录项、索引结点以及文件系统的缓存
/proc/meminfo 页缓存和可回收Slab缓存
/proc/diskstats 磁盘的IOPS、吞吐量以及延迟
/proc/pid/io 进程IOPS、I/O大小以及I/O延迟
vmstat 缓存和缓冲区用量汇总
blktrace 跟踪块设备I/O事件
biosnoop 跟踪进程的块设备I/O大小
biotop 跟踪进程的并按I/O大小排序
strace 跟踪进程的I/O系统调用
perf 跟踪内核中的I/O事件
df 磁盘空间和索引结点使用量和剩余量
mount 文件系统的挂载路径以及挂载参数
du 目录占用的磁盘空间大小
tune2fs 显示和设置文件系统参数
hdparam 显示和设置磁盘参数

I/O性能优化分析

Linux 性能优化

网络篇

根据指标找工具

性能指标 工具 说明
吞吐量(BPS) sar
nethogs
iftop
分别可以查看网络接口、进程以及IP地址的网络吞吐量
PPS sar
/proc/net/dev
查看网络接口的PPS
连接数 nestat
ss
查看网络连接数
延迟 ping
hping3
通过ICMP、TCP等测试网络延迟
连接跟踪数 conntrack 查看和管理连接跟踪状况
路由 mtr
route
traceroute
查看路由并测试链路信息
DNS dig
nslookup
排查DNS解析问题
防火墙和NAT iptables 配置和管理防火墙及NAT规则
网卡功能 ethtool 查看和配置网络接口的功能
抓包 tcpdump
Wireshark
抓包分析网络流量
内核协议栈跟踪 bcc
systemtap
动态跟踪内核协议栈的行为

根据工具查指标

性能工具 主要功能
ifconfig
ip
配置和查看网络接口
ss 查看网络连接数
sar
/proc/net/dev/sys/class/net/eth0/statistics
查看网络接口的收发情况
nethogs 查看进程的网络收发情况
iftop 查看IP的网络收发情况
ethool 查看和配置网络接口
conntrack 查看和管理连接跟踪状况
nslookup
dig
排查DNS解析问题
mtr
route
traceroute
查看路由并测试链路信息
ping
hping3
测试网络延迟
tcpdump 网络抓包工具
Wireshark 网络抓包和图形界面分析工具
iptables 配置和管理防火墙及NAT规则
perf 剖析内核协议栈的性能
systemtap
bcc
动态追踪内核协议栈的行为

结语&案例

“纸上得来终觉浅,绝知此事要躬行” 。在此,提供本人实践的课程案例,希望对你有帮助。

案例:某个应用的 CPU 使用率居然达到 100%,我该怎么办?
案例:系统的 CPU 使用率很高,但为啥却找不到高 CPU 的应用?
案例:系统中出现大量不可中断进程(D)和僵尸进程(Z)怎么办?