Linux性能统计命令

Linux性能统计命令

概述

使用场景

  • 性能测试
  • 性能分析

统计维度

  • 系统级别
  • 进程级别(更多使用)

常用性能指标

  • cpu 代表算法的高效性

  • mem 代表数据结构的使用合理性

  • net io 等更多的指标,不合理使用同样会在cpu和mem中体现出影响

系统性分析:建立监控平台,promethus(搭载grafana)

临时性分析:命令交互

CPU性能指标

主要指令:

  • top
  1. 获取cpu 信息

    cat /proc/cpuinfo

    image-20231026190544329

  2. 打开top命令的帮助文档

    man top

    image-20231026191428123

  3. 系统负载与进程cpu占用

    top

  • 启动时间,用户数,Tasks任务状态,%Cpu(s)当前CPU使用情况,MiB Mem内存使用情况,MiB Swap交换区使用情况,单个进程的CPU、内存使用情况

image-20231026190740106

  • cpu 利用率 进程的cpu利用情况

  • load average 系统负债情况

(在ps命令中cpu利用率是平均利用率,不准确)

  1. 进程数据存在/proc/{pid}中

    image-20231026191321017

内存性能指标

主要指令:

  • free
  • ps
  • top
  1. 获取内存使用数据

    cat /proc/meminfo

image-20231026193619300

  1. 打开free的帮助文档

    man free

    image-20231026192404418

  2. 使用g或者m作为单位统计

    free -g/-m

    available是指可以加上从buff/cache中可获取出来的内存,开启新进程时可用的内存

    image-20231026192546448

  3. top命令

    top

    top命令中会显示虚拟内存,保留内存,共享内存都展示出来

    image-20231026192843412

  4. 内存区域

    A区域指进程本身正在使用的内存,作为自己的保留内存,其他进程不可访问(Uss)

    B区域指共享内存,如共享的dll、ios文件,共享的库文件,统一存放(Rss保留内存 = A+B)

    ​ RSS加起来可能会大于总内存(存在共享内存)

    ​ PSS表示A+B/n,进程平摊共享内存的大小

    C区域指进程提前获取的空闲内存,用于后续准备,即虚拟内存

如果内存泄漏,则应该关注A区域,使用后未释放

image-20231026192743369

  1. ps命令

    ps

    获取当前时间系统的快照,可获取到内存情况

  2. 优化指令

    ps -e -o uid,pid,ppid,pcpu,pmem,rss,vsz,comm --sort -%mem | head -10

    提取出关键指标,cpu利用率,内存占用率,保留内存,虚拟内存等,并根据内存占用率排序

    image-20231026193906489

网络连接统计

  • netstat
  1. 打开netstat帮助文档

    man netstat

    image-20231026195743336

  2. netstat命令

    netstat -tlnp

    image-20231026194403512

    1. n: 表示用数字形式显示IP地址和端口号
    2. l: 表示监听(listening)的端口及其关联进程ID
    3. p: 显示进程pid值和进程名称
    4. t: 显示TCP协议相关的连接和监听套接字
    5. u: 显示UDP协议相关的连接和监听套接字
  3. 网络连接数达到上限

    netstat -tn

  • Proto 协议

  • Recv-Q/Send-Q 接受和发送的字节数

  • Local Address/Foreign Address 本机地址和远程地址

  • State 当前连接状态

    image-20231026194650520

  1. 网络状态
  • 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_WAITCLOSE_WAIT 会占用连接数,但却并非服务状态,需要统计是否处于该状态的线程数过多,已解决占用的问题

  1. 限制指标数

    ulimit -a

    获取到限制指标数

  2. 统计线程状态数

    netstat -tn | awk 'NR>2{print $NF}'| sort | uniq -c | sort -nr

    image-20231026195311018

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