在衡量服务器的性能时,经常会涉及到几个指标: 如load、cpu、mem、qps、rt等。本文介绍一些基本的查看Load(机器负载)的命令。
目录
什么是负载
查看机器负载
1.top命令
2.uptime命令
3.w命令
4.ps命令
5.free命令
6.mpstat命令
7.df命令
8. ifstat命令
负载(load)是linux机器的一个重要指标,直观了反应了机器当前的状态。在UNIX系统中,系统负载是对当前CPU工作量的度量,被定义为特定时间间隔内运行队列中的平均线程数。load average 表示机器一段时间内的平均load。这个值越低越好。负载过高会导致机器无法处理其他请求及操作,甚至导致死机。
计算机的负载就是描述计算机工作量的一个概念。一般来说计算机负载涉及到CPU、内存、磁盘io、网络等各个方面。Linux的负载高,主要是由于CPU使用、内存使用、IO消耗三部分构成。任意一项使用过多,都将导致服务器负载的急剧攀升。
当我们说电路负载过高的时候,我们就要知道负载过高是指哪一个方面。就像妈妈看着近视你倒垃圾时大喊满了满了,懵逼的你还不知道是哪里满了,这样可是不行滴。
在Linux机器上,有多个命令都可以查看机器的负载信息。其中包括uptime、top、w等。
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况(每5秒钟刷新一次),类似于Windows的任务管理器,用于动态地监视进程活动与系统负载等信息。
其中,最耗资源的进程会显示在最上方。
[root@localhost~]top
//以下为得到的信息
top - 06:55:08 up 6 min, //运行时间
1 user, //用户数量(登录终端数)
load average: 0.80,0.70,0.34
//系统平均负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)
Tasks: 250 total, //同一服务器的进程总数
3 running, //正在运行的进程数量(正在使用CPU)
247 sleeping, //睡眠中的进程数
0 stopped, //停止(暂停)的进程数
0 zombie //僵死的进程数(僵尸进程)
%Cpu(s): //CPU信息
14.5 us, //用户占用CPU资源百分比
1.0 sy, //系统内核占用CPU资源百分比
0.0 ni, //用户进程空间内改变过优先级的进程占用CPU百分比
83.8 id, //空闲CPU百分比
0.0 wa, //等待输入输出的CPU时间百分比
0.7 hi, //硬中断(Hardware IRQ)占用CPU的百分比
0.0 si, //软中断(Software Interrupts)占用CPU的百分比
0.0 st
KiB Mem : //内存信息
3781.1 total, //物理内存总量
1948.7 free, //空闲内存总量
1080.3 used, //使用的物理内存总量
752.0 buff/ cache //用作内核缓存的内存量(缓冲区)
//buff表示输入型缓存 cache表示输出型缓存
KiB Swap: //交换分区(虚拟内存)信息
4096.0 total, //交换区总量
4096.0 free, //空闲交换区总量
0.0 used. //使用的交换区总量
6173.12 cached Mem //缓冲的交换区总量
2457.9 avail Mem //代表可用于进程下一次分配的物理内存数量(已被提前加载)
当我们执行top命令来查看进程信息时,此进程会一直占用终端,如需结束,需按q次进程才会归还终端。
列名 | 含义 |
---|---|
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 | 命令名/命令行 |
在此解释何为僵尸进程,一般情况下,僵尸进程是正在运行的无意义的进程,表示没有父进程的子进程。比如父进程被杀死或被意外中断,而其子进程仍在运行。
举一个例子:在你与朋友进行视频聊天的时候,开启摄像头捕捉的你影像就是聊天软件的子进程,在意外情况下,有可能聊天软件结束运行,而摄像头仍被调用,这时候摄像头便没有数据传输的去处,从而变成了僵尸进程。
当然,操作系统是由一定清理机制的,我们会发现,僵尸进程的数量在通常情况下基本是没有的,这就依靠了我们的1号进程。
此进程专门负责“打僵尸”,他的状态(STAT)为Ss表示此时他是正在休眠(S)的系统进程(s),他时不时会被调用,扫描进程寻找僵尸进程。他的清理过程是先将僵尸进程变成自己的子进程(收入囊中,收义子),后释放资源(干掉他)。
uptime命令能够打印系统总共运行了多长时间和系统的平均负载,即拿到top指令返回的头部信息。uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
[root@localhost~]uptime
//以下为得到的信息
06:55:08 up 6 min, //运行时间
1 user, //用户数量(登录终端数)
load average: 0.80,0.70,0.34
//系统平均负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)
一般将1分钟、5分钟、15分钟内系统的平均负载表示为load1、load5、load15。
w命令的主要功能其实是显示目前登入系统的用户信息。可以显示:当前时间,系统启动到现在的时间,登录用户的数目,系统在最近1分钟、5分钟和15分钟的平均负载。然后是每个用户的各项数据,项目显示顺序如下:登录帐号、终端名称、远 程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。
[root@localhost ~]$ w
11:21:37 up 48 days, 18:58, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.12.10 11:10 1.00s 0.02s 0.00s w
root pts/1 10.0.12.10 11:21 4.00s 0.01s 0.01s -bash
列名 | 含义 |
---|---|
USER | 登录用户 |
TTY | 用户登录使用的终端 |
FROM | 用户的登录IP |
LOGIN@ | 用户登录时间 |
IDLE | 用户空闲时间,从用户上一次任务结束后,开始记时 |
JCPU | 以终端代号来区分,表示在这段时间内,所有与该终端相关的进程任务所耗费的CPU时间 |
PCPU | 指WHAT域的任务执行后耗费的CPU时间 |
WHAT | 表示当前执行的任务 |
即process status,用于显示当前进程的状态。
[root@localhost ~]$ ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 5358 0.0 0.3 214564 3872 ? Ssl 10:13 0:00 /usr/sbin/rsyslogd -n
root 5359 0.0 0.3 112756 3712 ? Ss 10:13 0:00 /usr/sbin/sshd -D
root 5376 0.2 1.1 1005988 11716 ? Ssl 10:13 0:00 /usr/sbin/libvirtd
root 5384 0.2 0.1 126288 1600 ? Ss 10:13 0:00 /usr/sbin/crond -n
root 5385 0.0 0.4 481308 4120 ? Ssl 10:13 0:00 /usr/sbin/gdm
root 5389 0.0 0.0 25904 920 ? Ss 10:13 0:00 /usr/sbin/atd -f
参数 | 含义 |
---|---|
-A | 显示所有的进程,和 -e 的效果一样 |
-a | 显示所有进程,包括其他用户的进程 |
-u | 选择有效的用户id或者是用户名和启动时间 |
-x | 显示没有控制终端的进程,同时显示各个命令的具体路径 |
-e | 显示所有的进程,和 -A 的效果一样,包括没有控制终端的进程 |
-f | 显示更完成;通常与 -e 一起用 |
-l | 长格式显示 |
命令 | 含义 |
---|---|
ps | 只显示隶属于自己的进程状态 |
ps -aux | 显示左右进程 |
ps -aux | grep xxx | 过滤出要查看的进程 |
用于显示内存状态。free指令会显示内存的使用情况,显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区(包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等)。默认情况下是以KB为单位显示。
空闲内存:available = free + buffer(缓冲) + cache(缓存)
[root@localhost ~]$free
total used free shared buff/cache available
Mem: 976000 1020 7490 60 1240 7270
Swap: 2047000 0 20470
//shared:表示多个进程共享的内存总额
//buffers/cached:表示磁盘缓存的大小
参数 | 含义 |
---|---|
-b,-k,-m,-g | 以字节,KB,MB或GB显示输出 |
-h | 人类可读的输出(自动单位缩放) |
-l | 显示详细的低内存和高内存统计信息 |
-o | 使用旧格式(无-/ + buffers / cache行) |
-t | 显示RAM +交换总数 |
-s | 每[延迟]秒更新一次 |
-c | 更新[count]次 |
-a | 显示由内核导出的可用内存(每行> 80个字符) |
-V | 显示版本信息并退出 |
一款常用的多核CPU性能分析工具,用来实时查询每个CPU的性能指标,以及所有CPU的平均指标。此命令需要安装相关工具才能使用。
参数 |
含义 |
---|---|
-A |
等同于-u -I ALL -P ALL |
-I |
可以指定SUM CPU SCPU ALL四个参数,SUM表示每个处理器的中断总数,CPU表示每个核的每秒中断数量, SCPU表示每个核每秒的软中断数量,内核版本在2.6.31之后才支持。 |
-P |
统计的CPU编号,一般用ALL |
-u |
输出列的信息 |
-V | 查看工具版本号 |
这里找到前辈大神运行的代码样例。
[root@localhost~]$mpstat -P ALL 3 2
//–P ALL 选项指示该命令显示所有 CPU 的统计信息
//3 2 该指令每隔3秒运行一次,总共运行两次
Linux 2.6.32-642.el6.x86_64 (localhost.localdomain) 2020年04月11日 _x86_64_ (2 CPU)
//第一部分 输出首先显示了所有 CPU 的合计指标,然后显示了每个 CPU 各项的指标。
11时01分42秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
11时01分45秒 all 0.51 0.00 0.34 0.00 0.00 0.17 0.00 0.00 98.99
11时01分45秒 0 0.68 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.32
11时01分45秒 1 0.34 0.00 0.34 0.00 0.00 0.34 0.00 0.00 98.98
11时01分45秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
11时01分48秒 all 0.17 0.00 1.19 0.00 0.00 0.17 0.00 0.00 98.47
11时01分48秒 0 0.00 0.00 1.03 0.00 0.00 0.00 0.00 0.00 98.97
11时01分48秒 1 0.34 0.00 1.35 0.00 0.00 0.34 0.00 0.00 97.98
//第二部分 在结尾处显示所有 CPU 的平均值。
平均时间: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
平均时间: all 0.34 0.00 0.76 0.00 0.00 0.17 0.00 0.00 98.73
平均时间: 0 0.34 0.00 0.51 0.00 0.00 0.00 0.00 0.00 99.15
平均时间: 1 0.34 0.00 0.84 0.00 0.00 0.34 0.00 0.00 98.48
列名 | 含义 |
---|---|
%user | 表示用户态所使用 CPU 的百分比 |
%nice | 表示使用 nice 命令对进程进行降级时 CPU 的百分比 |
%sys | 表示内核进程使用的 CPU 百分比 |
%iowait | 表示等待进行 I/O 所使用的 CPU 时间百分比 |
%irq | 表示用于处理系统中断的 CPU 百分比 |
%soft | 表示用于软件中断的 CPU 百分比 |
%steal | 虚拟机强制CPU等待的时间百分比 |
%guest | 虚拟机占用CPU时间的百分比 |
%idle | CPU 的空闲时间的百分比 |
列出文件系统的整体磁盘空间使用情况,进行磁盘分区查询。
格式:df 【选项】【文件名】
[root@localhost~]$df
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 45G 19G 24G 44% /
/dev/hda1 494M 19M 450M 4% /boot
/dev/hda6 4.9G 2.2G 2.5G 47% /home
/dev/hda5 9.7G 2.9G 6.4G 31% /opt
none 1009M 0 1009M 0% /dev/shm
/dev/hda3 9.7G 7.2G 2.1G 78% /usr/local
/dev/hdb2 75G 75G 0 100% /
/dev/hdb2 75G 75G 0 100% /
参数 | 含义 |
---|---|
-h | 以人们易读的GB、MB、KB等格式显示大小 |
-T | 显示文件系统类型 |
-a | 显示所有文件系统的使用情况,包括虚拟文件系统 |
-i | 不使用硬盘容量,以inode数量来显示 |
-l | 只显示本地文件系统 |
-H | 和-h参数一样,但不是以1024,而是1000 |
是一个统计网络接口活动状态的工具。此命令需要安装相关工具才能使用。
[root@localhost~]$ifstat
#kernel
Interface RX Pkts/Rate TX Pkts/Rate RX Data/Rate TX Data/Rate
RX Errs/Drop TX Errs/Drop RX Over/Rate TX Coll/Rate
lo 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
eth0 35 0 32 0 2878 0 3546 0
//以太网 0 0 0 0 0 0 0 0
//wlan为无线网卡
//RX Pkts/Rate 数据包接收流量
//RX Errs/Drop 数据包接收丢包
//TX Pkts/Rate 数据包发送流量
//TX Errs/Drop 数据包发送丢包
//RX Data/Rate 数据接收流量
//TX Coll/Rate 数据发送流量
参数 | 含义 |
---|---|
-h |
帮助信息 |
-a |
忽略历史记录 |
-d |
对每个统计数据和SECS进行抽样 |
-e |
显示错误信息 |
-j |
以json形式输出 |
-n |
只做历史 |
-p |
美化打印 |
-r |
重置历史记录 |
-s |
不更新历史 |
-r |
平均报告超过了过去的SECS |
-V |
输出版本信息 |
-x | 显示TYPE的扩展统计信息 |