为什么学习性能统计?
两个主要场景:
- 性能测试 - 了解应用程序的资源占用和行为特征,查找性能瓶颈。
- 日常性能分析 - 包括手机应用性能、服务器负载、浏览器性能等,了解和监控运行状况。
性能统计的维度
- 系统级别性能数据分析 - 查看整体系统状态如CPU负载、内存使用情况等。
- 进程级别性能数据分析 - 关注特定进程的资源使用与性能表现。
性能统计指标
- 核心指标:CPU和内存利用率。
- 附属指标:网络连接、磁盘I/O、数据库慢查询等(它们会影响核心指标)。
常用命令和工具
-
交互式命令:
top
,vmstat
,iostat
,mpstat
,free
等。 - 监控平台:Prometheus + Grafana,用于系统性分析和数据长期存储。
CPU性能统计
获取CPU基本信息
cat /proc/cpuinfo
系统级别和进程级别的CPU使用
使用top
命令查看整体和个别进程的CPU使用情况。
进程级别的详细CPU统计
查看特定进程的CPU使用详细信息:
cat /proc/[pid]/stat
关键指标
- CPU利用率
- 系统负载
内存性能统计
使用top
命令了解内存使用情况。
关键指标
- 内存利用率
- 进程内存使用
Linux 内存管理命令
主要命令
-
free
- 显示系统内存的总量、使用情况和可用空间。
- 输出值一般按照 KB 单位。
- 关键指标:
-
total
: 整体内存大小。 -
used
: 已使用的内存量。 -
free
: 空闲的内存量。 -
shared
: 共享内存的数量。 -
buffers/cached
: 缓冲区和缓存使用的内存量。 -
available
: 可被新进程使用的内存量(考虑了缓存和buffer的回收能力)。
-
内存相关指标解释
-
Buffers
和Cached
:- 存储临时数据,常用于磁盘读写操作,可以优化系统性能。
-
Available
:- 是指系统可以立即回收的内存,对于启动新进程等操作十分关键。
/proc 文件系统
-
/proc/meminfo
:- 提供详细的内存使用情况,内容比
free
命令更丰富。
- 提供详细的内存使用情况,内容比
Linux 性能和资源监控命令
-
top
- 实时显示系统进程的资源使用情况。
- 包括 CPU 和内存的使用率,以及其他关键的性能指标。
- 可以通过不同参数进行排序和筛选。
-
ps
- 列出当前系统的进程和其状态。
-
ps aux
可以查看详细信息,包括 CPU 和内存使用率。 - 尽管 CPU 统计可能不够准确,内存统计是准确的。
进程内存相关指标
- RSS (Resident Set Size)
- 进程实际使用的物理内存量。
- PSS (Proportional Set Size)
- 将共享内存平均分配到各进程后的内存占用估计。
- USS (Unique Set Size)
- 进程独立使用的内存量。
- VSS (Virtual Set Size)
- 进程分配的总虚拟内存量,包括所有分配的内存(使用中、空闲、共享)。
监控和自动化
- 在工作环境中,更高效的方法是建立监控平台。
- 使用 agent 收集数据,并利用诸如 Prometheus 和 Grafana 这样的工具进行数据的可视化和警报。
Linux 排序和统计命令
sort
命令
sort
命令在 Linux 中是用于排序文本文件中的行的工具。使用不同的选项和参数可以控制排序的行为。
基本用法
-
sort
:默认对内容进行升序排序。 -
sort -r
:对内容进行降序排序。
常用参数
- -b:忽略开头的空白字符
- -f:将小写字母看做大写字母
- -h:根据存储容量排序(KB、MB、GB)
- -n:按数字排序
- -o:把结果写入文件
- -r:以相反的顺序来排序
- -t:指定分隔符,默认为空格
- -V:按照数字版本排序
- -k:指定排序的关键字,与-t 参数配合使用
实例
- 忽略空白字符排序:
sort -b fileName
- 按照数字大小排序:
sort -n fileName
- 根据特定列排序:
sort -t ',' -k 2 fileName
- 指定输出文件:
sort fileName -o sortedFileName
- 逆序排序(例如数值的降序):
sort -nr fileName
- 按版本号排序:
sort -V fileName
uniq
命令
uniq
命令用于从输入中过滤掉重复的行。它通常与 sort
命令结合使用,因为 uniq
需要排序过的输入以便正确地检测重复。
基本用法
- uniq:过滤连续的重复行。
- -c:统计重复出现的次数
- -d:所有邻近的重复行只被打印一次。重复次数要大于等于 2
- -D:所有邻近的重复行将全部打印
- -f:跳过对前 n 个列的比较
- -s:跳过对前 n 个字符的比较
- -w:只对每行前 n 个字符进行比较
wc
命令
wc
(word count) 命令用于统计文本中的行数、单词数和字符数。
基本用法
-
wc fileName
:显示文件中的行数、单词数和字符数。 -
wc -l fileName
:仅显示行数。 -
wc -w fileName
:仅显示单词数。 -
wc -c fileName
:仅显示字符数。
进程(Process)
进程是 Linux 平台上一个可执行程序的运行实例。在操作系统中,进程是资源分配和调度的基本单位。当启动一个程序时,操作系统会为该程序创建一个进程,并分配必要的内存和其他资源,以执行程序指令。
线程(Thread)
线程是进程中的执行单元。它是进程的一个组成部分,可以被操作系统调度执行。一个进程中可以有多个线程,共享进程资源,但是有它们自己的执行路径和执行状态。
进程周期
-
Created
:进程被创建。 -
Ready
:进程准备好运行并等待 CPU 分配。 -
Running
:进程正在CPU上执行。 -
Waiting
:进程等待某些事件发生或正在请求服务。 -
Terminated
:进程已完成执行或被终止。
进程状态(Process States)
管理进程和线程的常用命令
ps
:列出系统中的进程
-
ps -ef
:显示当前所有进程。 -
ps aux
:BSD 风格,列出详细进程信息。 -
ps -o pid,ppid,pcpu,pmem,cmd
:自定义输出进程信息。
top
:交互式监视进程及资源利用率
- 实时显示系统中进程的资源占用状况。
kill
:通过进程 ID 终止进程。
fg
, bg
:将作业放回前台或后台。
-
fg
:操作系统中将后台进程调至前台。 -
bg
:让被挂起的进程在后台继续运行。