linux的top命令详解
引言
top命令是UNIX/Linux系统中,用于查看系统详情的第一入口,一般我们查看机器运行状态的时候,总是第一个使用top命令,而实际上top命令展示的数据很多,对于新手来说这些其实并不友好。本文主要的目的就是做一个详细的梳理。
介绍(description)
top 程序提供了一个正在运行的系统的实时数据的展示。它可以展示的内容包含系统的基本信息,以及当前正在被linux内核管理的任务。这些系统的摘要信息的类型以及任务展示的类型,排序和大小都是用户可配置的,并且这些配置可以是持久化的,不受重启影响。
首行/基本信息
首行可以使用命令 upTIme替代。首行显示的内容从左到右分别为
* 当前的时间
* 系统累积以及运行的时间
* 当前登入用户的数量
* 当前的系统负载。
系统负载三个数字的含义
一般来说,系统每隔5秒钟,会检查一下当前系统活跃的进程数。这个活跃进程要满足3个前提
* 它没有在等待I/O操作的结果
* 它没有主动进入等待状态(也就是没有调用’wait’)
* 没有被停止(例如:等待终止)
而系统负载的三个数值分别表示的是1分钟,5分钟和15分钟系统负载的平均值。
对于一个具有n核处理器的系统来说,当系统负载的load average为n的时候,表示系统差不多刚刚好满负荷,但是已经没有额外的经历去处理其它任务了。当load average 大于n的时候,表示系统超负荷运转。一般来说为了使系统能正常运转,我们经验上,任务load average / n 《 0.7 是一般能接受的情况。
第二行/cpu信息
第二行主要显示进程和cpu的信息,注意在top命令中task指进程。第二行的信息依次为
* 进程总数
* 正常运行的进程数量
* 休眠的进程总数
* 停止的进程总数
* 僵死进程总数
* us用户进程占用cpu资源的百分比
* sy内核态进程占cpu资源的百分比
* ni用户进程空间内改变过优先级的进程占cpu资源的百分比
* id空闲cpu的百分比
* wa 等待输入输出的进程占cpu资源的百分比
* hi 硬中断占用的百分比
* si软中断占用的百分比
* st 虚拟机占用百分比
第三行/内存相关信息
mem
物理内存总量
使用的物理内存总量
空闲的物理内存总量
用在内核缓存的内存总量
swap
交换区内存总量
使用的交换区的总量
空闲的交换区总量
缓存的交换区总量。
Swap:表示硬盘上交换分区的使用情况。只有mem被当前进程实际占用完,即没有了buffers和cache时,才会使用到swap。
上面这句话只是一般情况下的理想状态,实际上内核可能会主动地将一些暂时不用的内存块写入到磁盘的交换区(swap),这样节约出来的内存就可以用作他用了。这些被写入swap的内存,只有当实际需要的时候,才会被重新写入内存。
注意:当物理内存空闲的时候,也有可能会有大量的swap。原因在于,有可能存在这么一种情况,某一个进程,需要大量的物理内存,而当这个进程结束的时候,这个进程在生命周期中,被交换进入swap的内存,并不会主动释放。操作系统总是在实际需要的时候才去做处理,这样就会出现在某一些特定的时段,物理内存很空闲,而swap使用量却很高的情况。
进程信息
参看Linux中top的说明
* pid : Process Id进程id,这个是进程的唯一标识符。这个id,会被周期性地复写,但是不会从0开始。
* ppid : Parent Process PID父进程的pid
* ruser : Real User Name, 当前进程真实的用户名称
* uid : User Id. 进程拥有者的有效用户id
* USER : User Name,生效用户名称
* group : group name 用户组民粹
* TTY : Controlling Tty 控制终端的名称。启动进程的终端名称。然而当一个进程不是从终端中被访问的时候,你将会看到问号(????)
* pr : Priority 进程的优先级
* ni : Nice Value.优先级的值,负数表示优先级很高,正数表示优先级比较低。
* p : Last userd CPU (SMP)。在多处理环境中,表示最近一次使用的cpu序号。
* %cpu : cpu的使用量占总cpu时间的百分比
* TIME : CPU TIME 任务从开始到现在使用的cpu的总时间。
* TIME + : CPU Time ,hundredths 更为细粒度更为精确的cpu耗时
* %MES : 进程使用的内存量
* VIRT : 进程使用的虚拟内存的大小
* SWAP : 进程使用的交换区的大小
* RES : Resident Size 驻留内存大小,指进程除去使用交换区swap的内存,使用的物理内存的大小
* CODE : code size 指代码占用物理内存的大小
* DATA : Data + Stack size 数据和堆栈占用的大小
* SHR : Shared Mem size 进程共享内存的大小
* nFLT : Page Fault Count 缺页总数
* nDRT : Dirty Pages count 脏页数量
* S : process status 进程状态 。 分别有D R S T Z ,分别表示【不可中断的休眠】【正在运行】【休眠中】【暂停或者跟踪状态】【僵死状态】,参考
* Command : Command line or Program name 命令或者进程名称
* WCHAN : Sleep in Function 显示当前休眠的函数
* Flages :Task Flags 进程在进程计划中的标准。
linux基础
http://www.makeru.com.cn/course/details/2058?s=143793
linux高级
http://www.makeru.com.cn/course/details/2478?s=143793
linux多线程编程
http://www.makeru.com.cn/course/details/1937?s=143793