Linux性能统计命令
概述
使用场景
- 性能测试
 - 性能分析
 
统计维度
- 系统级别
 - 进程级别(更多使用)
 
常用性能指标
- 
cpu 代表算法的高效性
 - 
mem 代表数据结构的使用合理性
 - 
net io 等更多的指标,不合理使用同样会在cpu和mem中体现出影响
 
系统性分析:建立监控平台,promethus(搭载grafana)
临时性分析:命令交互
CPU性能指标
主要指令:
- top
 
- 
获取cpu 信息
cat /proc/cpuinfo
 - 
打开top命令的帮助文档
man top
 - 
系统负载与进程cpu占用
top 
- 启动时间,用户数,Tasks任务状态,%Cpu(s)当前CPU使用情况,MiB Mem内存使用情况,MiB Swap交换区使用情况,单个进程的CPU、内存使用情况
 

- 
cpu 利用率 进程的cpu利用情况
 - 
load average 系统负债情况
 
(在ps命令中cpu利用率是平均利用率,不准确)
- 
进程数据存在/proc/{pid}中

 
内存性能指标
主要指令:
- free
 - ps
 - top
 
- 
获取内存使用数据
cat /proc/meminfo 

- 
打开free的帮助文档
man free
 - 
使用g或者m作为单位统计
free -g/-mavailable是指可以加上从buff/cache中可获取出来的内存,开启新进程时可用的内存
 - 
top命令
toptop命令中会显示虚拟内存,保留内存,共享内存都展示出来

 - 
内存区域
A区域指进程本身正在使用的内存,作为自己的保留内存,其他进程不可访问(Uss)
B区域指共享内存,如共享的dll、ios文件,共享的库文件,统一存放(Rss保留内存 = A+B)
 RSS加起来可能会大于总内存(存在共享内存)
 PSS表示A+B/n,进程平摊共享内存的大小
C区域指进程提前获取的空闲内存,用于后续准备,即虚拟内存
 
 如果内存泄漏,则应该关注A区域,使用后未释放

- 
ps命令
ps获取当前时间系统的快照,可获取到内存情况
 - 
优化指令
ps -e -o uid,pid,ppid,pcpu,pmem,rss,vsz,comm --sort -%mem | head -10提取出关键指标,cpu利用率,内存占用率,保留内存,虚拟内存等,并根据内存占用率排序

 
网络连接统计
- netstat
 
- 
打开netstat帮助文档
man netstat
 - 
netstat命令
netstat -tlnp
- n: 表示用数字形式显示IP地址和端口号
 - l: 表示监听(listening)的端口及其关联进程ID
 - p: 显示进程pid值和进程名称
 - t: 显示TCP协议相关的连接和监听套接字
 - u: 显示UDP协议相关的连接和监听套接字
 
 - 
网络连接数达到上限
netstat -tn
 
- 
Proto 协议
 - 
Recv-Q/Send-Q 接受和发送的字节数
 - 
Local Address/Foreign Address 本机地址和远程地址
 - 
State 当前连接状态

 
- 网络状态
 
- ESTABLISHED 成功连接 The socket has an established connection
 - SYN_SENT The socket is actively attempting to establish a connection
 - SYN_RECV A connection request has been received from the network.
 - FIN_WAIT1 The socket is closed, and the connection is shutting down.
 - FIN_WAIT2 Connection is closed, and the socket is waiting for a shutdown from the remote end
 - TIME_WAIT 主动关闭 The socket is waiting after close to handle packets still in the network
 - CLOSE The socket is not being used
 - CLOSE_WAIT 被动关闭 The remote end has shut down, waiting for the socket to close.
 - LISTEN The socket is listening for incoming connections
 
 TIME_WAIT 和CLOSE_WAIT 会占用连接数,但却并非服务状态,需要统计是否处于该状态的线程数过多,已解决占用的问题
- 
限制指标数
ulimit -a获取到限制指标数
 - 
统计线程状态数
netstat -tn | awk 'NR>2{print $NF}'| sort | uniq -c | sort -nr

 
ps、top、netstat帮助文档需要熟练掌握