Linux 基础教程 36-查看系统性能
uptime
uptime命令功能比较简单,主要功能如下所示:
- 查看服务器的开机时长
- 查看CPU负载
基本用法
uptime
用法示例
[root@localhost ~]# uptime
15:33:08 up 10 days, 4:40, 2 users, load average: 1.56, 1.22, 0.92
输出内容解释如下所示:
| 显示内容 | 解释 |
|---|---|
| 15:33:08 | 系统当前时间 |
| up 10 days, 4:40 | 主机已运行时间,时间越长,说明机器越稳定 |
| 2 users | 用户连接数,是总连接数而不是用户数 |
| load average: 1.56, 1.22, 0.92 | 系统平均负载,统计最近1、5、15分钟的系统平均负载 |
系统平均负载:指在某一段时间间隔内运行队列中的平均进程数。根据实际工程经验来看,单核负载在 0.7 以下是安全的,如超过则需要进行优化了。
除了使用uptime外,我们也可以使用以下方式来获取系统的平均负载情况。
[root@localhost ~]# cat /proc/loadavg
1.32 1.35 1.15 1/5585 28715
- 前面3个数字分别表示最近1、5、15分钟的系统平均负载
- 1/5585:分母表示系统的总进程数,分子表示正在运行的进程数
- 28715:最近一个启动运行进程的ID
free
free常用来查看系统的可用内存和已使用内存等信息。
基本用法
free [选项]
常用选项如下所示:
| 选项 | 解释 |
|---|---|
| -b | 以byte为单位显示内存使用情况 |
| -k | 以KB为单位显示内存使用情况 |
| -m | 以MB为单位显示内存使用情况 |
| -g | 以GB为单位显示内存使用情况 |
| -t | 额外显示内存总和 |
| -h | 以较短的数字(默认为3位数)进行显示且增加单位,方便查看 |
| -s time | 持续观察内存使用情况 |
| -c count | 常与-s一直使用,用来设置采样样本数 |
| -l | 详细显示高峰和低谷时的内存使用统计情况 |
采用-k/-m/-g/-h显示的值均采用向下取整的方式显示,如果需要精确查看,则建议使用-b
用法示例
1、显示主机内存使用情况
[root@localhost ~]# free -t -m
total used free shared buff/cache available
Mem: 128652 32106 87049 1293 9496 94266
Swap: 4095 0 4095
Total:132748 32106 91145
输出内解释如下所示:
total:可用物理内存总量
used:已经使用的内存数,包含buff/cache
free:可使用的内存数,不含buff/cache
share:多个进程共享的内存数
buff/cache:buff/cache占用量
Swap:交换分区使用量,虚拟内存
Total:物理内存总数
vmstat
vmstat是一个Linux监控工具,全称为Virtual Memory Statistics。可用于查看关于进程、内存、I/O、等系统整体运行状态。
基本用法
vmstat [选项] [采样间隔] [采样样本数]
常用选项如下所示:
| 选项 | 解释 |
|---|---|
| -a | 显示活动/非活动的内存信息 |
| -f | 显示自系统启动以来的系统创建的总任务数 |
| -t | 增加时间戳 |
| -m | 显示slabinfo信息 |
| -n | 头部信息仅显示一次 |
| -s | 以表格形式显示内存指标及系统事件信息等 |
| -d | 显示各磁盘的统计信息 |
| -p | 显示特定分区的详细统计信息 |
| delay | 设置两次更新之间的时间间隔,如果不指定,则默认显示从开机到现在的平均值 |
| count | 指定采样的样本数,如delay指定而count不指定则一直持续监控和输出 |
用法示例
1、常用用法
vmstat delay count
- delay:采样时间间隔
- count:采样的样本数

2、查看服务器创建了多少个任务数
[root@localhost ~]# vmstat -f
51221915 forks
3、显示特定分区的统计信息:
[root@localhost ~]# vmstat -p /dev/sdb1
sdb1 reads read sectors writes requested writes
754 35990 81 22102
结果分析
对于vmstat出来的统计结果,如何判定是否存在问题了?不同的服务器、操作系统、应用场景等均不一样,也无法给出统一的判断标准,需要大家根据实际情况进行综合判断。以下是一些实际应用中的经验,仅供参考:
- 1、如果cache的值比较大,则说明系统缓存了比较多的磁盘数据,有利于磁盘I/O性能的提升,此时,bi会相对较小,因为很多读写磁盘的操作都由cache来承担了。
- 2、si和so则代表读写SWAP的数量,这两个值如果长期大于0,则表示系统需要经常读写交换分区,这样会消耗CPU资源和磁盘I/O性能。如能确定物理内存存在瓶颈,则需要进行扩容或迁移了。
- 3、如free的值很低,基于接近于0,也不一定就是系统内存已经耗尽,还需要结合buffer和cache的使用量,如果buffer和cache占用了很多内存资源,则代表没有问题,说明系统把空闲的内存都用于缓存,反而是提升了I/O性能,当系统需要内存时,buffer和cache可以随时被回收回来。
- 4、如果bi和bo值很大,则说明系统正在进行大量的磁盘读写操作。如果是用户正在进行的操作,则没有问题,否则需要进行排查哪个设备或分区在进行大量读写操作。
- 5、如果us的值经常大于50%,则说明用户进程占用的CPU时间比较多,需要对占用较多的程序进行排查和优化了。
- 6、如果sy值比较高,需要排查系统是否存在问题。
- 7、如果wa值比较高,则说明CPU总是在等待I/O操作,说明磁盘已经成为瓶颈,需要排查磁盘是否存在问题或优化程序的读写操作
- 8、如果r值总是超过CPU核数,则说明CPU可能成为瓶颈,可考核升级CPU等
mpstat
mpstat全称Multiprocessor statistics,也是一个监控工具,主要对象是CPU。
基本用法
mpstat [选项] [采样间隔] [采样样本数]
常用选项如下所示:
| 选项 | 解释 |
|---|---|
| -I | 显示中断统计信息 |
| -P | 显示指定CPU编号的统计信息,0为第一个CPU |
| -u | 显示CPU的使用情况 |
| -A | 等同于-u -I ALL -P ALL |
与-I一起使用的参数如下所示
- SUM:显示所有CPU中断次数之和
- CPU:显示每个CPU中断次数
- ALL:将SUM和CPU的内容一起显示
与-P一起使用的参数如下所示
- ON:仅统计在线的CPU使用情况
- ALL:统计所有CPU的使用情况
CPU常用指标
该指标一般是使用选项-u出来的统计结果,如下所示:
| 指标 | 解释 |
|---|---|
| CPU | CPU编号 |
| %usr | 用户进程所使用的CPU占比 |
| %nice | 对进程进行降级时的CPU占比 |
| %sys | 内核进行使用的CPU占比 |
| %iowait | 空闲态中等待I/O请求所使用的CPU占比 |
| %irq | 处理系统中断所使用的CPU占比 |
| %soft | 软件中断所使用的CPU占比 |
| %steal | 虚拟管理程序所使用的CPU占比 |
| %guest | 运行虚拟处理器所使用的CPU占比 |
| %gnice | 运行降级虚拟程序所使用的CPU占比 |
| %idle | CPU空闲态的CPU占比 |
用法示例
1、查看所有CPU运行状态

2、查看指定CPU编号的运行状态

3、查看CPU中断情况
因为CPU的运算速度比外部硬件要快很多。以硬盘为例,如果是简单的顺序执行,则CPU需要等待很长
时间,不停询问硬盘是否读取完成,而这样会浪费很多CPU时间。为此人们提出一种中断机制,使得读取硬
盘这样的操作交给其他设备来完成,而CPU则挂起当前进程,将控制权转让给其他来处理的进程,当其他设
备处理完成后通知CPU,系统将当前进程标识为活动进行,从而继续执行,处理硬盘的读取操作。

top
top是Linux中一个常用的性能监控工具并能周期性地进行更新,我们因此也可以快速了解服务器的运行状态。
基本用法
top [选项]
常用的选项如下所示:
| 选项 | 解释 |
|---|---|
| -b | 以批处理模式进行操作 |
| -c | 显示完整的命令信息 |
| -d | 更新时间间隔 |
| -n number | 指定循环显示的次数 |
| -u number/name | 显示指定用户ID/用户名的进程 |
| -p pid | |
| -s | 安全模式 |
| -S | 累积模式 |
交互模式
交换械是指在top显示相关信息时,在不影响显示信息的同时进行的其他操作等,详细如下所示:
| 快捷键 | 说明 |
|---|---|
| f | 添加或删除进程信息项 |
| k | 终止进程,需要输入PID号 |
| r | 更改进程优先级 |
| S | 切换到累积模式 |
| s或d | 更改刷新时间 |
| m | 切换显示内存信息 |
| t | 切换显示进程和CPU状态信息 |
| c | 切换显示命令名称和完整命令行 |
| P | 根据CPU使用率大小进行排序 |
| T | 根据时间/累计时间进行排序 |
| W | 将当前设置保存到~/.toprc文件中 |
| q | 退出top进程 |
| b | 将当前进程进行高亮显示 |
| l | 是否显示系统负载信息和启动时间 |
| 1(数字1) | 显示每个CPU核心单独的性能数据 |
用法示例
1、第一个示例:

示例详解
系统级信息

进程指标信息
| 指标 | 说明 | 参考值 |
|---|---|---|
| PID | 进程ID | |
| PRID | 父进程ID | |
| USER | 进程所属用户,启用进程的用户名 | |
| PR | Priority缩写,进程优先级 | |
| NI | Nice缩写,用于调节优先级,与PR有关,越小越早被执行 | -20~20 正数优先级降低,负数优先级提升 |
| VIRT | 进程虚拟内存使用量 | |
| RES | 进程使用且未被交换出的物理内存使用量 | |
| SHR | 共享内存使用量 | |
| S | 进程状态 | R:运行 S:睡眠 D:不可中断的睡眠状态 T:跟踪、停止 僵尸 |
| %CPU | CPU使用率 | |
| %MEM | 内存使用率 | |
| TIME+ | 进程的CPU使用时间累积和 | 单位为1/100秒 |
| TIME | 进程占用的CPU时间累积和 | 单位为秒 |
| RUSER | 进程的实际用户名,即登录到Shell所用用户名 | |
| UID | 进程所属用户的ID | |
| GROUP | 进程所属的组名 | |
| TTY | 启动进程的终端名称 | |
| P | 进程最近一次所使用的CPU编号 | |
| SWAP | 进程使用且被交换出来的虚拟内存使用量 | |
| CODE | 进程对应的可执行代码所占用的物理内存量 | |
| DATA | 进程对应的数据部分(数据段、栈等)所占用的物理内存量 | |
| nFLT | 页面错误次数 | |
| nDRT | 最后一次写入到目前为止被修改过的页面数 | |
| WCHAN | 如果进程处理睡眠状态,则显示睡眠状态中系统调用名 | |
| Flags | 进程标志 | |
| COMMAND | 进程所对应的命令名 |
iostat
iostat命令主要用来CPU的统计信息和每个设备、硬盘的IO统计信息
基本用法
iostat [选项] [采样间隔] [采样样本数]
常用的选项如下所示:
| 选项 | 解释 |
|---|---|
| -c | 仅显示CPU的统计信息,即单独输出CPU的平均统计信息 |
| -d | 仅显示设备的统计信息 |
| -h | 将各设备的统计信息以易于查看的方式进行显示 |
| -k | 以kb/s显示统计信息 |
| -m | 以mb/s显示统计信息 |
| -t | 增加显示时间戳 |
| -x | 显示额外信息 |
| -y | 忽略自系统启动以来的第一行信息 |
用法示例
1、iostat示例

2、查看硬盘的IO信息

各指标详细解释如下所示:
| 指标 | 说明 |
|---|---|
| tps | 每秒进程的I/O读写请求总数 |
| MB_read/s | 每秒读取的字节数,单位为MB/s |
| MB_wrtn/s | 每秒写入的字节数,单位为MB/s |
| MB_read | 读取的字节总数 ,单位为MB |
| MB_wrtn | 写入的字节总数 ,单位为MB |
看到第一组第一行的数字非常大,是否就可以断定I/O存在问题了? 在iostat输出的第一组第一行数据,
表示是自Linux系统启动刚才本命令执行这段期间的统计结果,而后面的几组数据才真正表示了在iostat
采样周期的统计结果,而如果要排除第一组的数据可以使用选项 -y
3、显示额外的统计信息

各指标详细解释如下所示:
| 指标 | 说明 |
|---|---|
| rrqm/s | 每秒对该设备的读取请求总次数 |
| wrqm/s | 每秒对该设备的写入请求总次数 |
| r/s | 每秒完成读取的I/O次数 |
| w/s | 每秒完成写入的I/O次数 |
| rMB/s | 每秒实际读取的大小,单位为MB |
| wMB/s | 每秒实际写入的大小,单位为MB |
| avgrq-sz | 平均每次I/O操作的数据大小 |
| avgqu-sz | 平均等待处理I/O操作的队列长度 |
| await | 平均每次I/O请求等待时间(含等待时间和处理时间),一般应低于5ms |
| r_await | 每次读取I/O请求等待时间 |
| w_await | 每次写入I/O请求等待时间 |
| svctm | 平均每次I/O操作的服务时间 |
| %util | 周期内用于I/O操作的时间比率,即I/O队列非空的时间比率,即(r/s+w/s )*(svctm/1000) |
需要关注的参数如下所示:
- %util:表示磁盘的忙碌情况,较大则代表I/O请求太多,硬盘可能存在瓶颈,一般不超过80%
- await大于svctm:差值越小,则说明队列时间越短,反之差值越大,则队列时间越长,系统可能存在问题
- svctm接近await,则说明I/O几乎没有等待时间
- await远大于svctm,则说明I/O队列太长,则响应时间会变长
4、显示CPU统计信息

各指标详细解释如下所示:
| 指标 | 说明 |
|---|---|
| %user | 显示CPU在用户级(应用程序)执行时的时间占比 |
| %nice | 显示CPU在用户级(应用程序)使用NICE权限执行时的时间占比 |
| %system | 显示CPU在系统级(内核)执行时的时间占比 |
| %iowait | 显示CPU在空闲状态期间未完成的磁盘I/O时间占比 |
| %steal | 显示hypervisor服务另一个虚拟处理器时,虚拟CPU等待实际CPU的时间占比 |
| %idle | 显示CPU在空闲状态期间系统未完成的磁盘I/O时间占比 |
- 如果steal值比较高的话,需要扩容虚拟机,这是因为服务器上的另一个虚拟机可能拥有更大更多的CPU时间片而占用了你的虚拟机的CPU时间
- 如果iowait值比较高,则可能硬盘存在I/O瓶颈
- 如果idle值比较高,则表示CPU长期处于空闲状态
- 如果idle值比较高但系统响应慢时,则有可能是CPU在等待内存分配,可考虑扩容内存容量
- 如果idle值如果长期低于10%,则CPU处理能力是瓶颈
本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

Linux 基础教程 36-查看系统性能的更多相关文章
- 嵌入式LINUX基础教程 第2版
嵌入式LINUX基础教程 第2版 目录 第1章 入门 11.1 为什么选择Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准及相关组织 31.4.1 Linux标准基 ...
- Linux基础教程
Linux基础教程之<Linux就该这么学>之学习笔记第一篇... ========================= 一.Basic Linux Commands 基本的Linux ...
- Linux 基础教程 26-基础网络配置
基本配置 要想上网,计算机需要有专门的网络连接设备,即网络接口卡或者网卡.网卡按照与计算机主机的连接方式可以分为PCI网卡.ISA网卡及无线网卡(USB网卡)等.在Linux中可以使用命令ls ...
- 『学了就忘』Linux基础命令 — 36、查看系统痕迹相关命令
目录 1.w命令 2.who命令 3.last命令 4.lastlog命令 5.lastb命令 系统中有一些重要的痕迹日志文件,如/var/log/wtmp./var/run/utmp./var/lo ...
- Embedded Linux Primer----嵌入式Linux基础教程--章节介绍
章节介绍 第一章,“导引”,简要介绍了Linux被迅速应用在嵌入式环境的驱动因素,介绍了与嵌入式Linux相关的几个重要的标准和组织. 第二章,“第一个嵌入式经历”,介绍了与后几章所构建的嵌入式Lin ...
- Linux 基础教程 35-软件包管理-YUM
YUM基础 使用RPM在Linux中安装.卸载软件或服务进会经常碰到RPM包的依赖,而我们在安装软件A时,提示依赖于软件B,安装软件B时又会出现提示依赖于软件C等一系列的依赖关系.这时大家会提 ...
- Linux 基础教程 34-软件包管理-RPM
对于Linux而言管理各类软件,如安装.卸载和升级等是常有的事情和必备的技能.以CentOS为例,常用的安装包命令有rpm和yum. RPM基础 RPM(RedHat Package ...
- Linux 基础教程 25-命令和文件查找
which 不管是在Windows还是Linux系统中,我们都会偶尔执行一些系统命令,比如Windows常见的cmd.ping.ipconfig等,它们的位置都在%systemdrive%中. ...
- 《嵌入式Linux基础教程学习笔记一》
常用书目下载地址:http://www.cnblogs.com/pengdonglin137/p/3688029.html 第二章 1.进程上下文和中断上下文(Page20) 当应用程序执行系统调用, ...
随机推荐
- CentOS 6.0 VNC远程桌面配置方法(转帖)
问题:新装开发机,安装VNC软件后,按照下面文档配置后,无法用VNC view连接,关闭防火墙后可以连上 解决方法:说明问题出在防火墙配置上,除了允许15900端口外,还有其他要设,经过排查后,加上如 ...
- Spring cloud 之Feign基本使用
首先导入feign的依赖: <!-- 添加feign声明式webservice client --> <dependence> <groupId>org.sprin ...
- Python调用R语言
网络上经常看到有人问数据分析是学习Python好还是R语言好,还有一些争论Python好还是R好的文章.每次看到这样的文章我都会想到李舰和肖凯的<数据科学中的R语言>,书中一直强调,工具不 ...
- umount时目标忙解决办法
标签(空格分隔): ceph ceph运维 osd 在删除osd后umount时,始终无法umonut,可以通过fuser查看设备被哪个进程占用,之后杀死进程,就可以顺利umount了. [root@ ...
- 寒武纪-1005 Travel(树形DP)
一.题目链接 http://aiiage.hustoj.com/problem.php?id=1005 二.题面 PDF:http://aiiage.hustoj.com/upload/file/20 ...
- web开发,click,touch,tap事件浅析
一.click 和 tap 比较 两者都会在点击时触发,但是在手机WEB端,click会有 200~300 ms,所以请用tap代替click作为点击事件. singleTap和doubleTap 分 ...
- VueRouter
使用VueRouter的前提: 1, 必须导入vue-router.js文件 2, 要有VueRouter()实例 3, 要把VueRouter实例挂载到Vue实例中 4, 路由的入口 ...
- 关于TP5中的依赖注入和容器和facade
看了不少的文章,也看了官方的介绍,还是根据自己的理解,写写看法,理清下思路 只是单纯的说依赖注入Dependency Injection和容器 别的不白扯 比如有A,B,C三个类 A类的1方法依赖B类 ...
- svn can't save server certificate
f I use any svn command communicating with the remote server I get the following error: Error valida ...
- 【转】深入了解CPU两大架构ARM与X86
来自:https://blog.csdn.net/u014641018/article/details/53484565 重温下CPU是什么 中央处理单元(CPU)主要由运算器.控制器.寄存器三部分组 ...