我们在查看系统性能的时候,最常用的一个命令是top命令,top命令内容还是很丰富的,根据所学所知梳理下。
一 Top常用内容说明
直接输入top命令,查看下列内容:
第一行说明
top - 23:00:32 up 14 days, 5:43, 1 user, load average: 8.11, 3.92, 2.92
这一行,主要信息是包括系统时间,系统已经运行的时间,
HH:mm:ss: 当前的系统时间。
up xxx days, HH:mm: 从本次开机到现在经过的时间。
x user: 当前有几个用户登录到该机器。
load average: 系统1分钟、5分钟、15分钟内的平均负载值。
需要注意下平均负载,这个概念还是比较复杂,简单的看就是系统中处于运行状态和不可中断状态的平均进程数,这个数字是高还是低不能看数值,要看和cpu数的关系,如果平均负载为2,在1个cpu的系统中,则50%的进程不能运行;在2个cpu系统中,刚好占满cpu;在4个cpu的系统中,还空闲50%的cpu。
第二行说明
Tasks: 145 total, 1 running, 144 sleeping, 0 stopped, 0 zombie
显示总共144个进程,一个正在运行,143个处于休眠状态,0个处于stoped停止状态,还有0个zombie僵尸进程。
这行我一般关注下僵尸进程梳理会不会太多和总的进程数是不是太多。
第三行说明
%Cpu(s): 27.3 us, 24.2 sy, 0.0 ni, 43.9 id, 1.4 wa, 0.0 hi, 3.2 si, 0.0 st
us: 用户态cpu运行时间占比。
sy: 内核态cpu运行时间占比,程序进行系统调用的时候,程序需要进入内核态运行。
ni: 即nice,是改变过nice的进程的cpu占用。
id: 即idle ,即空闲cpu占用。
wa: 等待IO的cpu占用。
hi: 处理硬中断(hardware interrupt)的CPU时间占比。
si: 处理软中断(software interrupt)的CPU时间占比。
st: 代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。
除了idle,其他占用超过50%,都可能存在CPU问题。
第四行和第五行
KiB Mem : 32739656 total, 16277748 free, 9690976 used, 6770932 buff/cache
KiB Swap: 16515068 total, 10828100 free, 5686968 used. 22504860 avail Mem
以物理内存为例。free命令也会打印出类似的信息。
total: 内存总量。
free: 空闲内存量。
used: 使用中的内存量。
buff/cache:缓存和page cache占用的内存量。
其实这里面的swap还挺重要的,有时候内存还是够用,仍然占用了swap,这可能或拖慢程序运行,
特别像一些java程序,比如es,solr等,最好把使用swap的偏好降低,尽量用内存,以提升性能。
剩下行
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6364 root 20 0 5743628 502224 4852 S 127.9 1.5 24422:42 java
3490 mysql 20 0 2827252 89604 3152 S 70.1 0.3 14378:17 mysqld
进程详细信息
这里显示的数据列是可以改的,默认会显示如图中的12列。其含义分别如下:
PID:进程ID。
USER:进程所有者的用户名。
PR:从系统内核角度看的进程调度优先级。
NI:进程的nice值,即从用户空间角度看的进程优先级。值越低,优先级越高。
VIRT:进程申请使用的虚拟内存量。
RES:进程使用的驻留内存(即未被swap out的内存)量。
SHR:进程使用的共享内存量。
S: 进程状态。R=running,S=interruptible sleeping,D=uninterruptible sleeping,T=stopped,Z=zombie。
%CPU:进程在一个更新周期内占用的CPU时间比例。
%MEM:进程占用的物理内存比例。
TIME+:进程创建后至今占用的CPU时间长度。
COMMAND:运行进程使用的命令。
说明:除了需要关注cpu和内存这个关键因素外,还应该看下进程的状态,如果看到大量的D状态进程,需要关注下IO情况。
二 TOP命令常用技巧
2.1 显示单个cpu的占用信息
在top运行界面输入1,可以显示单个cpu的占用信息:
%Cpu0 : 28.9 us, 22.6 sy, 0.0 ni, 44.3 id, 0.3 wa, 0.0 hi, 3.8 si, 0.0 st
%Cpu1 : 27.6 us, 23.3 sy, 0.0 ni, 44.7 id, 1.5 wa, 0.0 hi, 2.9 si, 0.0 st
%Cpu2 : 28.5 us, 23.6 sy, 0.0 ni, 42.6 id, 1.8 wa, 0.0 hi, 3.5 si, 0.0 st
%Cpu3 : 26.7 us, 24.2 sy, 0.0 ni, 44.0 id, 2.2 wa, 0.0 hi, 2.9 si, 0.0 st
输入2可以按照NUMA架构,显示Node上的cpu占用信息。
2.2 按照CPU或内存占用排序
- 输入M,按照内存使用排序:
5267 root 20 0 34.5g 3.3g 51308 S 0.0 10.7 46:44.77 java
5857 root 20 0 6097540 1.2g 7752 S 42.5 3.8 8450:16 java
6250 root 20 0 8052856 1.1g 7136 S 0.0 3.7 24:55.49 java
5602 root 20 0 5940940 782112 7072 S 0.0 2.4 37:52.07 java
5934 root 20 0 5734216 593924 8428 S 10.0 1.8 275:13.15 java
6364 root 20 0 5743628 502224 4852 S 127.5 1.5 24448:39 java
- 输入P对cpu使用率排序
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6364 root 20 0 5743628 502224 4852 S 129.0 1.5 24447:26 java
3490 mysql 20 0 2827252 89604 3152 S 70.0 0.3 14391:55 mysqld
5857 root 20 0 6097540 1.2g 7752 S 41.3 3.8 8449:52 java
5934 root 20 0 5734216 593924 8428 S 1.0 1.8 275:12.30 java
5044 root 20 0 10.7g 116684 5432 S 0.3 0.4 19:38.01 java
2.3 显示完整的命令
输入c显示完整的命令:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6364 root 20 0 5743628 502224 4852 S 127.7 1.5 24450:02 /usr/java/jdk1.8.0_191-amd64/bin/java -server -Xms512m -Xmx2048m -XX:NewSiz+
3490 mysql 20 0 2827252 89604 3152 S 71.0 0.3 14393:22 /usr/sbin/mysqld
5857 root 20 0 6097540 1.2g 7752 S 41.3 3.8 8450:43 java -Djava.awt.headless=true -Djava.library.path=/home/Spiderflow_beta/AUS+
如果命令太长看不到,可以通过方向键,向右来显示更少的列,更多的命令内容。
2.4 显示线程信息
输入H显示线程信息:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6522 root 20 0 5743628 502224 4852 S 62.1 1.5 11662:49 java
6523 root 20 0 5743628 502224 4852 R 62.1 1.5 11652:13 java
7101 root 20 0 6097540 1.2g 7752 S 40.5 3.8 8366:31 java
28930 mysql 20 0 2827252 89604 3152 S 14.3 0.3 104:55.77 mysq
2.5 显示特定进程信息
top -p pid1,pid2
显示:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6522 root 20 0 5743628 502224 4852 R 146.7 1.5 24455:13 java
7101 root 20 0 6097540 1.2g 7752 R 40.0 3.8 8452:23 java
2.6 查看帮助信息
其他命令,大家可以:输入h 查看top命令帮助信息:
Help for Interactive Commands - procps-ng version 3.3.10
Window 1:Def: Cumulative mode Off. System: Delay 3.0 secs; Secure mode Off.
Z,B,E,e Global: 'Z' colors; 'B' bold; 'E'/'e' summary/task memory scale
l,t,m Toggle Summary: 'l' load avg; 't' task/cpu stats; 'm' memory info
0,1,2,3,I Toggle: '0' zeros; '1/2/3' cpus or numa node views; 'I' Irix mode
f,F,X Fields: 'f'/'F' add/remove/order/sort; 'X' increase fixed-width
L,&,<,> . Locate: 'L'/'&' find/again; Move sort column: '<'/'>' left/right
R,H,V,J . Toggle: 'R' Sort; 'H' Threads; 'V' Forest view; 'J' Num justify
c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' Str justify
x,y . Toggle highlights: 'x' sort field; 'y' running tasks
z,b . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')
u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria
n,#,^O . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s)
C,... . Toggle scroll coordinates msg for: up,down,left,right,home,end
k,r Manipulate tasks: 'k' kill; 'r' renice
d or s Set update interval
W,Y Write configuration file 'W'; Inspect other output 'Y'
q Quit
( commands shown with '.' require a visible task display window )
Press 'h' or '?' for help with Windows,
三 诗词欣赏
新凉
[宋] [徐玑]
水满田畴稻叶齐,日光穿树晓烟低。
黄莺也爱新凉好,飞过青山影里啼。