第一行 任务队列信息
13:54:09 当前时间
up 1:16 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.24, 0.05, 0.02 系统负载,即任务队列的平均长度。三个数值分别为 1分钟c、5分钟、15分钟前到现在的平均值。
第二、三行 任务和CPU的信息
任务:
total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 停止的进程数
zombie 僵尸进程数
%Cpu(s):
0.5 us 用户空间占用CPU百分比
1.4 sy 内核空间占用CPU百分比
0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.1 id 空闲CPU百分比
0.0 wa 等待输入输出的CPU时间百分比
0.0 hi 硬件CPU中断占用百分比
0.0 si 软中断占用百分比
0.0 st 虚拟机占用百分比
第四、五行 内存信息
KiB Mem: 4002264 total 物理内存总量 1213228 free 空闲内存总量 1703096 used 使用的物理内存总量 1085940 buff/cache 用作内核缓存的内存量 KiB Swap: 1942896 total 交换区总量 1942896 free 空闲交换区总量 0 used 使用的交换区总量 1992616 avail Mem 可用交换区总量
进程信息区统计信息
依次对应:
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 — 进程名称(命令名/命令行)
实存(RES) 与 虚存(VIRT)分析
VIRT:
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等;
2、假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB使用量。
RES:这个才是进程实实在在占用的内存
1、进程当前使用的内存大小,包括使用中的malloc、new分配的堆空间和分配的栈空间,但不包括swap out量;
2、包含其他进程的共享;
3、如果申请10MB的内存,实际使用1MB,它只增长1MB;
SHR:
1、除了自身进程的共享内存,也包括其他进程的共享内存; 2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小; 3、计算某个进程所占的物理内存大小公式:RES – SHR; 4、swap out后,它将会降下来。
VIRT高是因为分配了太多地址空间导致。
一般来说不用太在意VIRT太高,因为你有16EB的空间可以使用
top命令一直跳,可以使用 grep 打印只需要看的进程,比如只看java进程的top
top | grep java