简介
top命令显示系统上正在运行的进程,用来监视服务的负载。
输出
系统运行时间和平均负载
top |uptime
显示:
11:03:34 up 12 days, 20:16, 2 users, load average: 0.02, 0.11, 0.16
字段分别表示:
- 当前时间
- 系统已经运行的时间
- 当前登录用户的数量
- 最近5分钟、10分钟、15分钟的平均负载
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
任务
该行显示的是任务或者进程的总结。会显示全部进程的数量。
Tasks: 76 total, 1 running, 75 sleeping, 0 stopped, 0 zombie
字段表示:
- total 全部数量
- running 正在运行
- sleeping 休眠
- stopped 停止
- zombie 僵尸进程
CPU状态
Cpu(s): 2.7%us, 0.9%sy, 0.0%ni, 96.2%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
该行显示的是CPU的状态
- us(user) 用户空间占用的CPU百分比
- sy(system) 内核空间占用的CPU百分比
- ni(niced) 改变过优先级的进程占用的CPU百分比
- id 空闲占用的CPU百分比
- wa(IO wait) IO等待占用的CPU百分比
- hi 硬中断占用的CPU百分比
- si 软中断占用的百分比
- st 这个虚拟机被hypervisor偷去的CPU时间
在top视图下按1会显示每个逻辑CPU的状况:
Cpu0 : 16.3%us, 4.8%sy, 0.0%ni, 77.5%id, 0.0%wa, 0.0%hi, 1.4%si, 0.0%st
Cpu1 : 3.3%us, 1.3%sy, 0.0%ni, 95.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 1.0%us, 0.7%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 1.0%us, 0.7%sy, 0.0%ni, 98.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
如果不按1 则在top视图里面显示的是所有cpu的平均值。
查看CPU的相关信息
cat /proc/cpuinfo
输出:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 62
model name : Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz
stepping : 4
microcode : 1
cpu MHz : 2593.746
cache size : 20480 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good unfair_spinlock pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm xsaveopt
bogomips : 5187.49
clflush size : 64
cache_alignment : 64
address sizes : 46 bits physical, 48 bits virtual
-
总核数 = 物理CPU个数 X 每颗物理CPU的核数
-
总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
物理CPU个数:
cat /proc/cpuinfo |grep "physical id" |sort |uniq |wc -l
每个物理CPU的核心数
cat /proc/cpuinfo |grep "cpu cores" |uniq
查看逻辑CPU的个数
cat /proc/cpuinfo |grep "processor" |wc -l
查看CPU信息
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
查看CPU波动情况 尤其是多核机器
mpstat -P ALL 10 // 该命令会10s采样CPU的使用情况
内存使用
接下来两行显示内存的使用情况 输出类似free命令
Mem: 8061236k total, 7587396k used, 473840k free, 155740k buffers
Swap: 0k total, 0k used, 0k free, 6170164k cached
物理内存
字段表示:
- total 物理内存总量(K)
- used 使用中的内存总量(K)
- free 空闲内存总量(K)
- buffers 缓存的内存总量(K)
used使用中的内存重量指现在系统内核控制的内存数,free空间内存指内核还未纳入其管理范围的数量。used中纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在还可以被重复使用的内存,这些可以重新使用的内存还未交还到free中。
粗略计算可用内存数 计算公式: 第四行free + 第四行buffers + 第五行cached
交换分区
交换分区字段和物理内存字段含义相同。
内存不够的现象
在top命令下如果swap分区的used的值在不断发生变化,说明内核不断进行内存和swap的数据交换,表示内存真正的不够用。
进程
字段显示
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- PID 进程号 进程的唯一标识符
- USER 进程的所有者
- PR 进程的调度优先级 RT表示进程运行在实时态
- NI nice值 负值表示高优先级 正值表示低优先级 越小的值意味着越高的优先级。
- VTRT 进程使用的虚拟内存总量(Kb) VTRT = SWAP + RES
- RES 进程使用的、未被换出的物理内存大小
- SHR 共享内存的大小
- S 进程的状态 D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
- %CPU 占用CPU时间百分比
- %MEM 进程使用的物理内存百分比
- TIME+ 进程使用的CPU时间总计
- COMMAND 进程名称
命令使用
监控指定的进程
top -p PID
设置top的显示间隔
top -d 1 //1s显示一次 默认3s
显示完成的进程命令/名称
top -c // 适用于查看进程比如java的启动命令
显示指定进程下的线程
top -Hp <PID>
网友评论