一、性能统计知识
- 系统级性能数据分析;
- 进程级别性能数据分析。
1.1常用性能指标
- cpu:代表算法的高效性
- mem:代表数据结构的使用合理性
- net io 等更多指标。
1.2 统计方法
- 临时性分析:命令交互;
- 系统性分析:Prometheus、Grafana。
实际工作中使用这两个工具直接监控各个性能指标,以下是两个工具的介绍:
- Prometheus:Prometheus 是一种开源的监控系统,用于收集指标数据并存储在时间序列数据库中。它支持多种数据采集方式,如主动拉取、被动推送和服务发现等。Prometheus 可以监控各种类型的指标,包括服务器资源使用情况、应用程序性能指标、网络流量等。
- Grafana:Grafana 是一种开源的数据可视化工具,用于创建和共享实时监控仪表盘。它可以与多种数据源集成,包括 Prometheus、InfluxDB、Elasticsearch 等。Grafana 提供丰富的图表和可视化选项,以及灵活的仪表盘配置和布局功能。通过 Grafana,可以将收集的监控数据转化为直观的图形展示,可以更好地理解和分析数据,以及实时监控系统的状态和性能。
综上所述,Prometheus 用于收集和存储系统和应用程序的指标数据,而 Grafana 用于可视化和展示这些数据。它们一起提供了一个强大的监控和数据可视化解决方案,可帮助实时监控系统的性能、识别问题和优化机会,并提供直观的数据展示和报告。两者的工作原理如下图所示:
Prometheus界面:
Grafana界面:
1.3 CPU使用统计
- 查看cpu 信息:
cat /proc/cpuinfo
- 查看系统负载与进程CPU占用:
top
注:ps命令的cpu是平均cpu利用率,不适合查看CPU的使用。
1.4 内存(MEM)占用统计
1.4.1 常用命令
- free
- ps
- 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配合使用 |
1.4.3 meminfo命令
-
/proc/meminfo
文件是一个虚拟文件,保存了更多的内存使用数据; - 使用
cat /proc/meminfo
查看内存使用情况:
1.4.4 ps命令
- 命令:ps查看进程级别的内存分析。
参数 | 说明 |
---|---|
-e | 显示所有进程,包括系统进程和用户进程。 |
-f | 显示完整的进程信息,包括进程的父进程 ID 和启动时间等。 |
-aux | 以用户为单位显示进程信息,包括所有进程的详细信息。 |
-r | 只显示正在运行的进程。 |
-sort | 按照列名排序。 |
ps -e -o uid,pid,ppid,pcpu,pmem,rss,vsz,comm --sort -%mem | head -10
1.4.5 top命令
- 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命令。 |
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