[Linux]常用命令之【top/uptime/w/vmstat/free】

1 top

语法:top [-s time] [-d count] [-q] [-u] [-h] [-n number] [-f filename]
  -s time 设置屏幕刷新的延时,单位为秒,默认值 5 秒

命令功能:
  top 监控工具可以显示 CPU占用率为前几位的进程,并提供 CPU 的实时活动情况

查看 Linux 负载

查看所有进程的USER/CPU/内存/Swap/PID/Command情况(top解释)

  • 按住 shift + M 可按内存大小排序
  • 按住 shift + P 可按CPU占用率大小排序
  • 按住数字1 可监控每个逻辑CPU的状况(若不按1,则:在top视图里面显示的是所有cpu的平均值)
[root@es1 ~]# top
top - 14:05:43 up 61 days, 38 min,  2 users,  load average: 0.11, 0.10, 0.13
Tasks: 220 total,   1 running, 219 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.1%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  32880208k total, 26979156k used,  5901052k free,   509528k buffers
Swap: 16777212k total,       68k used, 16777144k free,  6755296k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                      
 4358 elastics  20   0 35.8g  17g  86m S  2.0 54.5   3428:50 java                                                                                                          
 4606 sdc       20   0 13.9g 1.0g  15m S  0.3  3.3 179:04.36 java                                                                                                          
    1 root      20   0 19232 1328 1128 S  0.0  0.0   0:13.40 init                                                                                                          
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                                                      
    3 root      RT   0     0    0    0 S  0.0  0.0   0:16.02 migration/0                                                                                                   
    4 root      20   0     0    0    0 S  0.0  0.0   0:32.50 ksoftirqd/0                                                                                                   
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0                                                                                                     
    6 root      RT   0     0    0    0 S  0.0  0.0   0:07.29 watchdog/0                                                                                                    
    7 root      RT   0     0    0    0 S  0.0  0.0   0:01.35 migration/1                                                                                                   
    8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/1                                                                                                     
    9 root      20   0     0    0    0 S  0.0  0.0   0:06.38 ksoftirqd/1                                                                                                   
   10 root      RT   0     0    0    0 S  0.0  0.0   0:06.91 watchdog/1                                                                                                    
   11 root      RT   0     0    0    0 S  0.0  0.0   0:01.47 migration/2                                                                                                   
   12 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/2                                                                                                     
   13 root      20   0     0    0    0 S  0.0  0.0   0:05.49 ksoftirqd/2                                                                                                   
   14 root      RT   0     0    0    0 S  0.0  0.0   0:06.41 watchdog/2                                                                                                    
   15 root      RT   0     0    0    0 S  0.0  0.0   0:00.73 migration/3                                                                                                   
   16 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/3                                                                                                     
   17 root      20   0     0    0    0 S  0.0  0.0   0:04.71 ksoftirqd/3                                                                                                   
   18 root      RT   0     0    0    0 S  0.0  0.0   0:06.19 watchdog/3                                                                                                    
   19 root      RT   0     0    0    0 S  0.0  0.0   0:01.34 migration/4                                                                                                   
   20 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/4                                                                                                     
   21 root      20   0     0    0    0 S  0.0  0.0   0:03.63 ksoftirqd/4                                                                                                   
   22 root      RT   0     0    0    0 S  0.0  0.0   0:06.13 watchdog/4                                                                                                    
   23 root      RT   0     0    0    0 S  0.0  0.0   0:00.82 migration/5                                                                                                   
   24 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/5                                                                                                     
   25 root      20   0     0    0    0 S  0.0  0.0   0:04.76 ksoftirqd/5                                                                                                   
   26 root      RT   0     0    0    0 S  0.0  0.0   0:05.96 watchdog/5                                                                                                    
   27 root      RT   0     0    0    0 S  0.0  0.0   0:01.47 migration/6                                                                                                   
   28 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/6                                                                                                     
   29 root      20   0     0    0    0 S  0.0  0.0   0:03.99 ksoftirqd/6                                                                                                   
   30 root      RT   0     0    0    0 S  0.0  0.0   0:05.96 watchdog/6                                                                                                    
   31 root      RT   0     0    0    0 S  0.0  0.0   0:00.64 migration/7                                                                                                   
   32 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/7                                                                                                     
   33 root      20   0     0    0    0 S  0.0  0.0   0:03.76 ksoftirqd/7  

top 解释:

【第1行】 top - 14:05:43 up 61 days, 38 min,  2 users,  load average: 0.11, 0.10, 0.13
14:05:43 # 系统当前时间
up 61 days, 38min # 系统已启用时间: 系统开机到现在已达61天38分钟
2 users # 当前2个用户在线
load average: 0.11, 0.10, 0.13 # 系统1分钟、5分钟、15分钟的CPU负载值。
    单位时间段内CPU活动进程数。
    如果你的机器为单核,那么只要这几个值均<1,代表系统就没有负载压力;
    如果你的机器为N核,那么必须是这几个值均<N才可认为系统没有负载压力;
    "单CPU系统1-3和SMP系统6-10都是可能接受的。"

【第2行#任务/进程#】Tasks: 220 total,   1 running, 219 sleeping,   0 stopped,   0 zombie
220 total:当前有220个任务
1 running:1个任务正在运行
219 sleeping:219个进程处于睡眠状态
0 stopped:停止的进程数
0 zombie:僵死的进程数

【第3行#CPU#】Cpu(s):  0.2%us,  0.1%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
0.2%us:"user CPU time" / 用户态进程占用CPU时间百分比
0.1%sy:"system CPU time" / 内核占用CPU时间百分比
0.0%ni:" nice CPU time" / 用户进程空间内改变过优先级的进程占用CPU百分比。renice值为负的任务的用户态进程的CPU时间百分比。nice是优先级的意思. 
99.7%id:"idle" / 空闲CPU时间百分比
0.0%wa:"io wait" / 等待I/O的CPU时间百分比
0.0%hi:"hardware irq" / CPU硬中断时间百分比
0.0%si:"software irq" / CPU软中断时间百分比
0.0%st: "steal time" / 虚拟机偷取(steal)的时间。
    一台物理是可以虚拟化出多台虚拟机,在其中一台虚拟机上用top查看发现st不为0,就说明本来有这么多个cpu时间是安排给我这个虚拟机的;
    但是由于某种虚拟技术,把这个cpu时间分配给了其他的虚拟机了。这就叫做偷取。
    详见: http://melody-dc.com/2015/11/21/%E7%90%86%E8%A7%A3CPU-steal-time/

【第4行#内存#】 Mem:  32880208k total, 26979156k used,  5901052k free,   509528k buffers
32880208k total:物理内存总数
26979156k used: 已使用的物理内存
5901052k free:  空闲的物理内存
509528k buffers: 用作缓冲区的内存 [缓存]

【第5行#交换空间#】 Swap: 16777212k total,       68k used, 16777144k free,  6755296k cached
16777212k total:交换空间的总量
68kk used: 使用的交换空间
16777144k free:空闲的交换空间
6755296k cached:缓存的交换空间

【第6行#进程#】PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND   
PID:进程ID
USER:进程的所有者
PR:进程的优先级
NI:nice值
VIRT:占用的虚拟内存
RES:占用的物理内存
SHR:使用的共享内存
S:进行状态 S:休眠 R运行 Z僵尸进程 N nice值为负
%CPU:占用的CPU
%MEM:占用内存
TIME+: 占用CPU的时间的累加值
COMMAND:启动命令

top -Hp <pid> # 查看某个进程下所有线程的信息

[root@node-a opt]# top -Hp 7774
top - 15:10:26 up  3:37,  2 users,  load average: 0.04, 0.07, 0.08
Threads:  38 total,   0 running,  38 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.8 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1863032 total,    76188 free,  1382496 used,   404348 buff/cache
KiB Swap:  2097148 total,  2077428 free,    19720 used.   261972 avail Mem 
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                             
  7794 root      20   0 4048128 130740  13800 S  0.7  7.0   0:00.21 java                                                                                                                
  7774 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.00 java                                                                                                                
  7780 root      20   0 4048128 130740  13800 S  0.0  7.0   0:01.25 java                                                                                                                
  7782 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.02 java                                                                                                                
  7783 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7784 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.02 java                                                                                                                
  7785 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7786 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.06 java                                                                                                                
  7787 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.00 java                                                                                                                
  7788 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.00 java                                                                                                                
  7789 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.00 java                                                                                                                
  7790 root      20   0 4048128 130740  13800 S  0.0  7.0   0:01.47 java                                                                                                                
  7791 root      20   0 4048128 130740  13800 S  0.0  7.0   0:01.44 java                                                                                                                
  7792 root      20   0 4048128 130740  13800 S  0.0  7.0   0:01.02 java                                                                                                                
  7793 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.00 java                                                                                                                
  7795 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.02 java                                                                                                                
  7796 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.00 java                                                                                                                
  7797 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7798 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7801 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.02 java                                                                                                                
  7802 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7803 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7804 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.00 java                                                                                                                
  7805 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7806 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7807 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7808 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.00 java                                                                                                                
  7809 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7810 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.09 java                                                                                                                
  7812 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.05 java                                                                                                                
  7814 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.06 java                                                                                                                
  7823 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7824 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7825 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.00 java                                                                                                                
  7826 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.01 java                                                                                                                
  7827 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.00 java                                                                                                                
  7828 root      20   0 4048128 130740  13800 S  0.0  7.0   0:00.00 java  

[shell格式]

top -Hp <pid>
  # -H 是线程模式的意思
  # -p 指定pid

VIRT 表示 Virtual Memory 虚拟内存
RES 表示 Resident Memory 驻留内存;进程实际占用的物理内存数(而非申请的内存数)
SHR 表示 shared memory 共享内存

2 uptime

查看 Linux 负载

[root@xxx ~]# uptime
 09:21:06 up 47 days, 15:48,  2 users,  load average: 0.45, 0.33, 0.27

uptime解释: 参考top命令的第1行解释

3 w

查看 Linux 负载

[root@xxx ~]# w
 09:21:48 up 47 days, 15:49,  2 users,  load average: 0.52, 0.36, 0.28
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.11.244      14Sep20 16:51m  0.25s  0.25s -bash
root     pts/1    10.0.11.119      09:00    0.00s  0.00s  0.00s w

w解释

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
USER — 登录的用户名
TTY — 登录后系统分配的终端号
FROM — 远程主机名,即从哪儿登录来的
LOGIN@ — 何时登录
IDLE — 空闲了多长时间,表示用户闲置的时间。这是一个计时器,一旦用户执行任何操作,该计时器便会被重置
JCPU — 和该终端(tty)连接的所有进程占用的时间,这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间
PCPU — 指当前进程(即在WHAT项中显示的进程)所占用的时间
WHAT — 当前正在运行进程的命令行

4 vmstat

查看 Linux 负载

[root@xxx ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0 593508 961904 336788 2067244    0    0     0     4    0    0  0  0 99  0  0

[root@xxx ~]#vmstat 5  5 【在5秒时间内进行5次采样】
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0 593508 958208 336960 2067472    0    0     0     4    0    0  0  0 99  0  0	
 0  0 593508 958216 336964 2067476    0    0     0    48  857 1668  0  0 99  0  0		

vmstat解释:

[procs]
r - 运行队列中进程数。多少个进程真的分配到CPU;当这个值超过了CPU数目,就会出现CPU瓶颈。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
b - 阻塞队列中进程数。

[memory]
swpd - 虚拟内存已使用的大小(KB)[593508/1024=579.59MB]。如果大于0,表示当前机器的物理内存不足了;如果不是程序内存泄露的原因,那么该升级内存了或者把耗内存的任务迁移到其他机器。
free - 空闲的物理内存的大小(KB)[961904/1024=939.36MB]。
buff - 缓冲区大小(KB)[336788/1024=328.89MB]。
cache - 缓存大小(KB)[2067244/1024=2018.79]。

[swap]
si - 每秒从磁盘读入虚拟内存的大小。如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
so - 每秒虚拟内存写入磁盘的大小。如果这个值大于0,同上。

[io]
bi - 块设备每秒接收的块数量。这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024Byte。
bo - 块设备每秒发送的块数量。例如读取文件时,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

[system]
in - interrupt / 每秒CPU的中断次数,包括时间中断。
cs - count/second / 每秒上下文切换次数。例如: 我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

[cpu]
us - user time / 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
sy - system time / 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
id - 空闲 CPU时间,一般来说,id + us + sy = 100,一般认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
wa - 等待IO CPU时间。

vmstat命令使用,更多详见: Linux vmstat命令详解 - 博客园/小a玖拾柒

5 free

查看当前系统的【内存、缓存】及使用状况

[root@es1 elasticsearch]# free -h
             total       used       free     shared    buffers     cached
Mem:           31G       8.8G        22G       160K       497M       6.5G
-/+ buffers/cache:       1.8G        29G
Swap:          15G        68K        15G

buffers 即 缓存

手动清理缓存/手动释放buffers/cache内存

/proc是一个虚拟文件系统。我们可通过对它的读写操作作为与kernel实体间进行通信的一种手段。也就是说,可通过修改/proc中的文件,来对当前kernel的行为做出调整。也就是说我们可以通过调整/proc/sys/vm/drop_caches来释放内存

  • 0 – 不释放
  • 1 – 释放页缓存
  • 2 – 释放dentries和inodes
  • 3 – 释放所有缓存
# echo 1 > /proc/sys/vm/drop_caches
  数字1是用来清空最近放问过的文件【页面缓存】

# echo 2 > /proc/sys/vm/drop_caches
  数字2是用来清空文件【节点缓存】和【目录项缓存】

# echo 3 > /proc/sys/vm/drop_caches
  数字3是用来清空1和2【所有内容】的缓存。
  或者: sync; echo 3 > /proc/sys/vm/drop_caches
    由于这是一个非破坏性的操作,并且脏对象是不可释放的,用户应该首先运行“sync”以确保所有缓存的对象都被释放。
    Linux sync 指令会将存于 buffer 中的资料强制刷入/写入硬盘中。
    Linux sync命令用于数据同步,sync命令是在关闭Linux系统时使用的。 
    Linux 系统中欲写入硬盘的资料有的时候为了效率起见,会写到 filesystem buffer 中,这个 buffer 是一块记忆体空间,如果欲写入硬盘的资料存于此 buffer 中,而系统又突然断电的话,那么资料就会流失了,sync 指令会将存于 buffer 中的资料强制写入硬盘中。

关于drop_caches的官方说明如下:

Writing to this file causes the kernel to drop clean caches,dentries and inodes from memory, causing that memory to becomefree.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync first.

Linux内核会将它最近访问过的文件页面缓存在内存中一段时间,这个文件缓存被称为pagecache(页面缓存)

Inode是linux/unix操作系统中的一种数据结构,包含了各文件相关的一些重要信息。在创建文件系统时,就会同时创建大量的inode。一般inode表会占用文件系统磁盘空间的1%。

X 推荐文献

posted @ 2020-08-27 14:12  千千寰宇  阅读(859)  评论(0编辑  收藏  举报