出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列。
文章目录
- 前言
- 一、vmstat--虚拟内存统计
- 二、iostat--用于报告中央处理器统计信息
- 三、dstat--系统监控工具
- 2.读入数据
- 总结
前言
- 背景知识:具备背景知识是分析性能问题时需要了解的。比如硬件 cache;再比如操作系统内核。应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程序无法充分利用 cache,从而导致性能下降。比如不必要地调用过多的系统调用,造成频繁的内核 / 用户切换等。
- 性能分析工具
首先来看一张图:
一、vmstat–虚拟内存统计
- vmstat(
VirtualMeomoryStatistics,虚拟内存统计
):是 Linux 中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU 等的整体情况进行监视。 - vmstat 的常规用法:
vmstat interval times
即每隔 interval 秒采样一次,共采样 times 次,如果省略 times,则一直采集数据,直到用户手动停止为止。
简单举个例子:
[root@matrix01 ~]# vmstat 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
30 0 0 17375844 1820 79094832 0 0 0 54 0 0 15 6 79 0 0
6 0 0 17693352 1820 79095664 0 0 0 2309 90280 109807 13 6 80 0 0
8 0 0 16006636 1820 79099904 0 0 0 2848 82054 105837 15 7 78 0 0
可以使用 ctrl+c
停止 vmstat
采集数据。
- 第一行显示了系统自启动以来的平均值,第二行开始显示现在正在发生的情况,接下来的行会显示每5秒间隔发生了什么,每一列的含义在头部,如下所示:
- ① procs:r 这一列显示了多少进程在等待cpu,b列显示多少进程正在不可中断的休眠(
等待IO
)。 - ② memory:swapd 列显示了多少块被换出了磁盘(
页面交换
),剩下的列显示了多少块是空闲的(未被使用
),多少块正在被用作缓冲区,以及多少正在被用作操作系统的缓存。 - ③ swap:显示交换活动:每秒有多少块正在被换入(
从磁盘
)和换出(到磁盘
)。 - ④ io:显示了多少块从块设备读取(
bi
)和写出(bo
),通常反映了硬盘I/O。 - ⑤ system:显示每秒中断(in)和上下文切换(
cs
)的数量。 - ⑥ cpu:显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(
非内核
),执行系统代码(内核
),空闲以及等待IO。
- ① procs:r 这一列显示了多少进程在等待cpu,b列显示多少进程正在不可中断的休眠(
- 内存不足的表现:free memory 急剧减少,回收 buffer 和 cache 也无济于事,大量使用交换分区(swpd),页面交换(swap)频繁,读写磁盘数量(io)增多,缺页中断(in)增多,上下文切换(cs)次数增多,等待IO的进程数(b)增多,大量CPU时间用于等待IO(wa)
二、iostat–用于报告中央处理器统计信息
iostat 用于报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息,默认显示了与vmstat 相同的 cpu 使用信息,使用以下命令显示扩展的设备统计:
[root@matrix01 ~]# iostat -dx 5
Linux 3.10.0-957.27.2.el7.x86_64 (matrix01) 2022年12月16日 _x86_64_ (48 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 8.36 0.00 2.88 2.88 0.00 2.82 0.00
sdc 0.00 0.00 0.00 24.02 0.01 146.72 12.22 0.00 0.10 0.18 0.10 0.06 0.13
sdb 0.00 1.76 0.88 148.78 16.13 2393.49 32.20 0.04 0.28 0.49 0.28 0.05 0.69
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 5.07 0.00 0.53 0.53 0.00 0.53 0.00
dm-1 0.00 0.00 0.00 0.07 0.00 0.30 8.67 0.00 0.35 0.42 0.35 0.34 0.00
dm-2 0.00 0.00 0.00 0.07 0.00 0.30 8.67 0.00 0.35 0.58 0.35 0.35 0.00
dm-4 0.00 0.00 0.00 0.07 0.00 0.30 8.68 0.00 0.37 0.96 0.37 0.35 0.00
dm-5 0.00 0.00 0.00 0.00 0.01 0.00 7.87 0.00 47.96 59.07 20.55 13.98 0.00
dm-6 0.00 0.00 0.00 0.31 0.00 52.67 339.55 0.01 25.02 5.00 25.06 0.32 0.01
dm-7 0.00 0.00 0.00 0.31 0.00 52.67 339.65 0.01 25.03 5.98 25.06 0.32 0.01
dm-9 0.00 0.00 0.00 0.31 0.00 52.65 339.93 0.26 853.85 10.15 854.86 0.40 0.01
- 第一行显示的是自系统启动以来的平均值,然后显示增量的平均值,每个设备一行。
常见 linux 的磁盘 IO 指标的缩写习惯:
rq 是 request,
r 是 read,
w 是 write,
qu 是 queue,
sz 是 size,
a 是verage,
tm 是 time,
svc 是 service。
- ① rrqm/s 和 wrqm/s:每秒合并的读和写请求,“合并的”意味着操作系统从队列中拿出多个逻辑请求合并为一个请求到实际磁盘。
- r/s和w/s:每秒发送到设备的读和写请求数。
- rsec/s和wsec/s:每秒读和写的扇区数。
- avgrq –sz:请求的扇区数。
- avgqu –sz:在设备队列中等待的请求数。
- await:每个IO请求花费的时间。
- svctm:实际请求(服务)时间。
- %util:至少有一个活跃请求所占时间的百分比。
三、dstat–系统监控工具
dstat 显示了 cpu 使用情况,磁盘 io 情况,网络发包情况和换页情况,输出是彩色的,可读性较强,相对于 vmstat
和iostat 的输入更加详细且较为直观。在使用时,直接输入命令即可,当然也可以使用特定参数。
代码如下(示例):dstat –cdlmnpsy
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。