Linux常用性能监控指南

2018/11 01 16:11

当性能出现问题时,可以通过 Linux 操作系统的命令获取性能信息。本节会介绍一些常用的 Linux 的性能监控命令。

 

top 命令 – 监控进程状态

这个命令适合用来实时掌握操作系统的整体情况,且能够实时反映出系统各个进程的资源的占用情况,类似于 windows 的任务管理器。使用 top 命令可以显示进程信息。

结合这个视图讲解各个数据的含义。

第一行:
15:23:22 — 当前系统时间
1 days, 5:52 — 系统已经运行了1天5小时52分钟(在这期间没有重启过)
1 users — 当前有2个用户登录系统
load average: 0.63, 0.44, 0.29 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
第二行:
Tasks — 任务(进程),系统现在共有74个进程,其中处于运行中的有1个,73个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
第三行:
cpu状态
0.7% us — 用户空间占用CPU的百分比。
1.3% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
97.0% id — 空闲CPU百分比
1.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si — 软中断(Software Interrupts)占用CPU的百分比
0.0% st — 虚拟机偷取时间占用CPU的百分比
第四行:内存状态
1016396k total — 物理内存总量
153760k free — 空闲内存总量
463184k used — 使用中的内存总量
399452k buffer/cache — 缓存的内存量
第五行:swap交换分区
0k total — 交换区总量
0k free — 空闲交换区总量
0k used — 使用的交换区总量
309908k avail Mem — 可用交换取总量
第六行,空行:
第七行,各进程的监控:

依次对应:
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

ps 命令 – 查看当前进程

这个命令适合用来查看某个瞬间存在哪些进程,这些进程的信息和状态等。通过 ps 命令,可以判断当前进程的状态,从而找出问题的原因。使用 ps 命令可以显示系统中当前所有的进程。

依次对应

F 代表这个程序的旗标 (flag), 4 代表使用者为 superuser;
S 代表这个程序的状态 (STAT);
UID 代表执行者身份
PID 进程的ID号!
PPID 父进程的ID;
C CPU使用的资源百分比
PRI指进程的执行优先权(Priority的简写),其值越小越早被执行;
NI 这个进程的nice值,其表示进程可被执行的优先级的修正数值。
ADDR 这个是内核函数,指出该程序在内存的那个部分。如果是个执行 的程序,一般就是『 - 』
SZ 使用掉的内存大小;
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作;
TTY 登入者的终端机位置;
TIME 使用掉的 CPU 时间。
CMD 所下达的指令名称

 

同时,也可以指定查看相关的进程。下面来看一个例子,其中,查看所有 java 进程。

 

 

netstat 命令 – 查看网络连接情况

这个命令可以知道 Linux 系统的网络情况,适合用来查看网络连接信息。其中,可以查看当前的所有连接。

此外,可以监听 TCP 的连接。

 

甚至可以统计端口的当前连接数。下面来看一个例子,其中,查看 64591 端口的当前连接数。

iostat 命令 – 监控系统设备的 IO 负载情况

这个命令适合用来监控系统设备的 IO 负载情况,对系统的磁盘操作活动进行监控。iostat 首次运行时,显示系统启动开始的各项统计信息,之后运行 iostat 将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。下面来看一个例子,其中,每秒采样一次,连续 5 次,观察磁盘 IO 的使用情况。

 

sar 命令 – 性能监控

这个命令适合用来监控 CPU 的使用率和空闲情况,以及磁盘 I/O 的使用情况、网卡流量的使用情况等。监控 CPU 的情况,可以使用 –u 参数,输出 CPU 使用情况的统计信息。下面来看一个例子,其中,每秒采样一次,连续 10 次,观察 CPU 的使用情况。

CPU:all 表示统计信息为所有 CPU 的平均值。

%user:显示在用户级别(application)运行使用 CPU 总时间的百分比。

%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。

%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比。

%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比。

%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。

%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比。

1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈

2. 若 %idle 的值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量

3. 若 %idle 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU 。

 

值得注意的是,如果 %user + %system 超过 85%,进程可能要花时间在运行队列中等待,因此响应时间和吞吐量会受影响。但是,使用率 100% 不一定意味着 CPU 就是性能瓶颈,此时可以进一步查看 vmstat 命令中的 r 值是否超出服务器的 CPU 数量。此外,%system 比较大,说明系统管理方面花了很多时间。需要进一步的分析其它软硬件因素。监控磁盘 I/O 的情况,可以使用 –d 参数,输出每个块设备的活动信息。下面来看一个例子,其中,每秒采样一次,连续 10 次,观察磁盘 I/O 的使用情况。其中,-p 参数可以打印出磁盘的设备名称。

如果 %util 接近100%,可能由于产生的 I/O 请求太多,I/O 系统已经满负荷,因此磁盘存在瓶颈。此外,如果 %await 远大于 %svctm,可能是因为磁盘 I/O 队列太长,导致响应时间变慢。

 

vmstat 命令 – 虚拟内存监控

这个命令适合用来监控 CPU 使用率,内存使用,虚拟内存交换情况,IO读写情况等。下面来看一个例子,其中,每秒采样一次,连续 5 次,观察虚拟内存的使用情况。

其中,第一行显示是 Linux 操作系统启动后的平均值,所以一般看第二行后面的值。

其中,swpd、 si、 so 三个指标的值比较高,很可能是内存不足。如果 cache 使用率非常低,而 swap 的 si 或 so 有比较高的数据值时,应该警惕内存的性能问题。此外,注意的是,当内存严重不足时,系统会频繁使用调页和交换,这增加了磁盘 I/O 的负载,进一步降低了系统对作业的执行速度,即系统 I/O 资源问题又会影响到内存资源的分配。

 

nmon 命令 – 性能监控

nmon 可以在一个屏幕上显示所有重要的性能信息,包括 CPU 信息、内存信息、网络信息、磁盘 I/O 信息等,并动态地对其进行更新。可通过 IBM 官网上免费下载获取或者通过 yum 命令直接安装。这里,使用 wget 方式进行下载与安装。

至此,安装完成。通过下面命令进行启动。

在运行界面上,输入 C 显示CPU信息,输入 M 显示内存信息,输入 N 显示网络信息,输入 D 显示硬盘 I/O 信息。

--转载请注明: https://www.guangboyuan.cn/linux%e5%b8%b8%e7%94%a8%e6%80%a7%e8%83%bd%e7%9b%91%e6%8e%a7%e6%8c%87%e5%8d%97/

发表回复

(必填)