Linux常用命令--性能统计

一、性能统计知识

  • 系统级性能数据分析;
  • 进程级别性能数据分析。

1.1常用性能指标

  • cpu:代表算法的高效性
  • mem:代表数据结构的使用合理性
  • net io 等更多指标。

1.2 统计方法

  • 临时性分析:命令交互;
  • 系统性分析:Prometheus、Grafana。

实际工作中使用这两个工具直接监控各个性能指标,以下是两个工具的介绍:

  1. Prometheus:Prometheus 是一种开源的监控系统,用于收集指标数据并存储在时间序列数据库中。它支持多种数据采集方式,如主动拉取、被动推送和服务发现等。Prometheus 可以监控各种类型的指标,包括服务器资源使用情况、应用程序性能指标、网络流量等。
  2. Grafana:Grafana 是一种开源的数据可视化工具,用于创建和共享实时监控仪表盘。它可以与多种数据源集成,包括 Prometheus、InfluxDB、Elasticsearch 等。Grafana 提供丰富的图表和可视化选项,以及灵活的仪表盘配置和布局功能。通过 Grafana,可以将收集的监控数据转化为直观的图形展示,可以更好地理解和分析数据,以及实时监控系统的状态和性能。

综上所述,Prometheus 用于收集和存储系统和应用程序的指标数据,而 Grafana 用于可视化和展示这些数据。它们一起提供了一个强大的监控和数据可视化解决方案,可帮助实时监控系统的性能、识别问题和优化机会,并提供直观的数据展示和报告。两者的工作原理如下图所示:

Prometheus界面:

Grafana界面:

1.3 CPU使用统计

  1. 查看cpu 信息:cat /proc/cpuinfo

  1. 查看系统负载与进程CPU占用:top


注:ps命令的cpu是平均cpu利用率,不适合查看CPU的使用。

1.4 内存(MEM)占用统计

1.4.1 常用命令

  1. free
  2. ps
  3. top

1.4.2 free命令

free输出信息(需牢记)

  • total Total installed memory (MemTotal and SwapTotal in /proc/meminfo)
  • used Used memory (calculated as total - free - buffers - cache)
  • free Unused memory (MemFree and SwapFree in /proc/meminfo)
  • shared Memory used (mostly) by tmpfs (Shmem in /proc/meminfo, available, on kernels 2.6.32, displayed as zero if not available)
  • buffers Memory used by kernel buffers (Buffers in /proc/meminfo)
  • cache Memory used by the page cache and slabs (Cached and Slab in /proc/meminfo)
  • buff/cache Sum of buffers and cache
  • available Estimation of how much memory is available for starting new applications, without swapping. not all reclaimable memory slabs will be reclaimed due to items being in use

加强记忆

指令 含义 速记法
total 总内存 (MemTotal, SwapTotal) 想象一块大蛋糕,表示全部的内存
used 已使用内存 (total - free - buffers - cache) 想象蛋糕被切成几块,表示已使用的内存
free 空闲内存 (MemFree, SwapFree) 想象蛋糕还剩下的部分,表示未使用的内存
shared 共享内存 (Shmem) 想象蛋糕上的一小块被共享给所有人,表示共享内存
buffers 内核缓存 (Buffers) 想象蛋糕上的一层奶油,表示内核缓存
cache 页面缓存和slabs (Cached, Slab) 想象蛋糕上的装饰物,表示页面缓存
buff/cache 缓存总量 (buffers + cache) 想象奶油和装饰物的总和,表示缓存总量
available 可用内存 想象蛋糕的可食用部分,表示可用内存

常用参数

参数 描述
-b 以Byte为单位,显示内存使用情况
-k 以KB为单位,显示内存使用情况
-m 以MB为单位,显示内存使用情况
-g 以GB为单位,显示内存使用情况
-h 根据内存大小,自动选择合适的单位显示
-s <间隔秒数>持续观察内存使用情况
-c <显示次数>和-s配合使用

image

image

1.4.3 meminfo命令

  • /proc/meminfo 文件是一个虚拟文件,保存了更多的内存使用数据;
  • 使用cat /proc/meminfo查看内存使用情况:

1.4.4 ps命令

  • 命令:ps查看进程级别的内存分析。
参数 说明
-e 显示所有进程,包括系统进程和用户进程。
-f 显示完整的进程信息,包括进程的父进程 ID 和启动时间等。
-aux 以用户为单位显示进程信息,包括所有进程的详细信息。
-r 只显示正在运行的进程。
-sort 按照列名排序。

image

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

1.4.5 top命令

1.5 网络连接(Net)统计

1.5.1 查看网络连接

命令:netstat -tnp | head -10

参数 说明
-a 显示所有选项,默认不显示listen相关。
-t (tcp)仅显示TCP相关。
-u (udp)仅显示UDP相关。
-n 拒绝显示别名,能显示数字的,都转换成数字。
-l 仅列出有在listen(监听)的服务状态。
-p 显示建立相关连接的程序名。
-c 每隔一个固定时间,执行该netstat命令。


image

1.5.2 网络状态

  • 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

1.5.3 数据统计

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