一、问题描述
??top命令 是最方便可用的服务器监控命令,可以看出服务器的当前负载量,CPU占用率,内存占用率等重要信息。 展示两种情景: 情景一:top 命令即可;要是想要退出 就按q 即可 情景二:在情景一的基础上按一下1 ,数字1即可;在按1 即可回到情景二; ??看的头大,这都是啥啊!赶紧查一波!整理一下吧。
二、top 命令详解
下面详细解说一下top命令里面的各个指标:
1. 系统概况
top - 17:53:48 up 341 days, 19:35, 4 users, load average: 0.00, 0.01, 0.05
up :时间格式为分,如上图表示已经运行341天19小时35分钟。能够较好的反映当前系统的高可用性。users :表示当前的用户数,如图表示4个用户登录该系统。load average :表示服务器的负载情况,分别指1分钟,5分钟,15分钟内的负载量。 load指标说明 : load<0.7 * processor(CPU线程数) 表示当前系统运行良好; 1 * processor<load<3 * processor,需要参考内存、CPU、网络和IO等指标; load>5 * processor 表示负载过大; 实时负载通过r+d来计算
2. 进程概况
Tasks: 326 total, 1 running, 325 sleeping, 0 stopped, 0 zombie
- total:当前系统的总线程数
- running:当前系统正在运行的线程数
- sleeping:当前系统阻塞的线程数
- stopped:当前系统停止态的进程数
- zombie:当前系统的僵尸态进程数
3. CPU概况
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- us:用户进程CPU使用占比
- sy:系统进程CPU使用占比,内核态CPU使用率
- ni:用户进程空间改变过优先级的进程CPU占用率
- id:空闲的CPU占比
- wa:等待输入输出IO使用CPU占比(wa:使用过高时,要考虑IO的性能是否有瓶颈,可以使用iostat,sar命令进一步分析)
可以使用命令查看硬件中断:
cat /proc/interrupts > hil.txt
sleep 2
cat /proc/interrupts > hi2.txt
vimdiff hil.txt hi2.txt
也能使用
/proc/interrupts > hil.txt
sleep 2
cat /proc/interrupts > hi2.txt
然后使用vim查看hi1.txt 然后切换到vim的命令行下vsplit hi2.txt
- hi:硬中断占用CPU百分比,使用率过高时,表示当前硬件中断占用很大的百分比。
一般硬件中断可以分析文件/proc/interrupts,/proc/irq/pid/smp_affinity、服务irqbalance是否配置,以及CPU的频率设置,通过这些可以帮助系统打散优化系统的硬件中断 - si:软中断占用CPU百分比
从网卡过来的数据包多(收发包多),如果si高,则看网络收发包高的进程。
Linux kernel通过一种软件的方法来模拟硬件中断模式,是为软中断。常见的一般软中断一般都是和网络相关,从网卡到IP层的数据报文收发都是由软件中断来处理的,长时间的写日志也可能产生软中断 当软件中断出现瓶颈时,系统有个进程ksofttirqd,每个CPU都有自己对应的ksofttirqd/n(n为CPU的逻辑ID),每个ksofttirqd的内核线程都会去运行对应的ksofttirqd()函数来处理自己的中断队列上的软件中断,所以当网络出现阻塞的时候,软件中断程序ksofttirqd肯定出现瓶颈。可以通过ps命令查看进程ksofttirqd的使用信息 ps aux|grep ksofttirqd
- st:虚拟机使用CPU占用率。一个宿主机下存在多个虚拟机时,比较忙的虚拟机会抢占比较空闲的虚拟机资源
- CPU(S):CPU占用率的平均值。
注-默认情况下显示的是所有CPU的平均值,如果想看每个CPU具体值,则按下数字1 即可:
4.内存概况
在Linux中,内存一共分为两块:物理内存 和 交换区。 物理内存是真正的内存,而内存资源毕竟有限,因此当物理内存不够的时候,根据LRU置换算法,那些很长时间没被使用的数据将会被存入交换区。交换区其实是硬盘,并非内存。当交换区存在数据时说明物理内存不够了。
KiB Mem : 1883724 total, 300584 free, 646088 used, 937052 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1062956 avail Mem
- Mem 1883724 total:物理内存的总量
- Mem 300584 free:物理内存的空闲量
- Mem 646088 used:物理内存使用量
- Mem 937052 buff/cache:物理内存内核缓存使用量
- Swap total:交换区总量
- Swap free:交换区空闲量
- Swap used:交换区使用量
- Swap 1062956
avail Mem:虚拟内存总量
注:buff/cache虽然占用物理内存,但当内存不够时也可以直接使用,因此物理内存的可使用空间为:free + buff/cache。
5. 进程详情
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1784 root 20 0 2072440 73204 8768 S 0.7 3.9 108:58.75 java
1182 root 20 0 46540 2624 1988 S 0.3 0.1 11:06.20 AliYunDunUpdate
- PID:进程ID
- USER:进程所有者
- PR:进程优先级
- NI:nice值
- VIRT:进程所占虚拟内存大小???
- RES:进程所占物理内存大小(kb)
- SHR:进程所占共享内存大小(kb)
- %CPU:CPU占用百分比
- %MEM:物理内存占用百分比
- TIME+:上次更新到现在进程使用的CPU时间总计
- COMMAND:启动该进程的命令
小技巧
-
间隔刷新 进入top后按下d,即可设置间隔刷新时间,默认是3秒。 -
添加进程监控字段 进入top后按下f,即可添加/减少需要监控的进程信息。
* PID = Process Id vMn = Minor Faults delta
* USER = Effective User Name USED = Res+Swap Size (KiB)
* PR = Priority nsIPC = IPC namespace Inode
* NI = Nice Value nsMNT = MNT namespace Inode
* VIRT = Virtual Image (KiB) nsNET = NET namespace Inode
* RES = Resident Size (KiB) nsPID = PID namespace Inode
* SHR = Shared Memory (KiB) nsUSER = USER namespace Inode
* S = Process Status nsUTS = UTS namespace Inode
* %CPU = CPU Usage
* %MEM = Memory Usage (RES)
* TIME+ = CPU Time, hundredths
* COMMAND = Command Name/Line
PPID = Parent Process pid
UID = Effective User Id
RUID = Real User Id
RUSER = Real User Name
SUID = Saved User Id
SUSER = Saved User Name
GID = Group Id
GROUP = Group Name
PGRP = Process Group Id
前面有*的说明已经显示了。
-
保存设置 对top进行设置后,默认是不保存配置的,只有按了大写的W后才会保存。 -
监控结果输出到文件
top -d 1 -n 3 > top.log
三、参考文献
- 参考一:https://www.cnblogs.com/ngd-mzl/p/15688327.html
- 参考二:https://blog.csdn.net/u010425776/article/details/78219339
|