linux top 命令详解

简介:

top命令是Linux下使用相当频繁的一个命令,可是有一天突然发现,原来自己对他还是知之甚少(尤其是内存状态这块儿),所以照着man文档和参阅了一些资料,整理如下


执行方式

top -hv | -bcHisSM -d delay -n iterations -p pid [,pid...]

其中:h 输出帮助信息;v输出版本信息,这些命令行选项多数可以通过交互式命令改变top输出,进入top以后按‘h’可现实交互式的命令清单,如下图

wKiom1SzZ57DAZ8zAAIMI5bMfpk497.jpg

-b: ‘批量模式’,用来将输出重定向到指定文件,一般配合-n 指定输出几次统计信息,使用模式

     top -n 3 -b > /tmp/top.tmp

-c: 显示产生进程的完成命令

-H: 线程切换模式,所有独立的线程都会被显示在结果中(以线程为粒度),不加此参数的话,top会以进程为粒度来显示信息

-i: 不显示idled或zombied进程

-s: 安全模式

-S: 累计模式,显示该进程以及他的所有子进程(包括已死的)总共占用的cpu时间

-M: 内存统计相关--显示内存单位(k/M/G)并且显示浮点值(带小数点)的值,如下图

    wKioL1SzO5Gwsvs3AABzOOgXOWI933.jpg

-d: 指定刷新时间,默认刷新时间是3s

-n: 执行状态刷新的次数

-p: 指定pid 多个pid以‘逗号’分开,只显示指定pid进程的状态


字段解释:

PID、PPID(父pid)、USER、GROUP、TTY这些字段都是字面意思,就不多说了。着重说一下cpu和内存相关字段的意思

top默认输出如下

wKioL1SzOByiLxo3AACYGexJq40473.jpg

按 f 可以进入交互模式,选择更多的输出项,途中红框内为默认显示的项目wKiom1SzOPiAks_vAAIquVR23Oc489.jpg

我们选择显示更多的cpu和内存相关的项目,

wKiom1SzOWPhFxpGAAHM_CfpwKU646.jpg

增加显示项目之后,top输出如下

wKioL1SzOzvy_XQMAADpPyFGq5U994.jpg

我们以上图输出介绍个字段cpu和内存相关字段含义:


VIRT -- (kb)任务使用的虚拟内存总量,包含所有交换到内存的code、data和shared libraries plus pages.  VIRT = SWAP + RES.只要进程申请了内存,都会计入此值。;例如进程想内核申请了100M内存,此值增加100M,而不管内核实际分配给了多少


RES -- (kb)常驻内存数量,即此任务使用的非交换分区的内存(即物理内存)


SHR -- (kb)任务所使用的共享内存的数量,他只简单的反映了可能与其他进程共享的内存

        SHR是RES中”映射至文件”的物理内存总和。包括:
            程序的代码段。
            动态库的代码段。
            通过mmap做的文件映射。
            通过mmap做的匿名映射,但指明了MAP_SHARED属性。

注:RES要和SHR结合者看,内核把物理内存分为了两部分,一部分是映射至文件的,一部分是没有映射至文件的即匿名内存,完全和共不共享没有关系!
但file_rss为什么叫做shared呢?应该是一种指示性表述,表示这部分内存可能是共享的。但并不代表真正共享了。那么到底哪些计入file_rss?通过查阅相关代码,发现(可能有遗漏):
1、程序的代码段。
2、动态库的代码段。
3、通过mmap做的文件映射。
4、通过mmap做的匿名映射,但指明了MAP_SHARED属性。
5、通过shmget申请的共享内存


注:如何精确的计算进程占用的内存

我们注意到在描述进程信息的proc/<pid>内,有一个smaps文件,里面展示了所有内存段的信息,其中有Shared_Clean Shared_Dirty Private_Clean Private_Dirty:几个字段。

统计smaps文件内所有段的Shared_*值的总和就是进程准确的共享内存数量!
统计smaps文件内所有段的Private_*值的总和就是进程准确的独占内存数量!


S -- 进程状态


%CPU -- 自上次刷新以来该进程占用的总cpu时间的百分比.在一个true SMP environment(真正的对称多处理器环境)下,如果’Irix mode’关闭(默认为打开状态),top将运行在’Solaris mode’,此模式下一个任务的cpu使用率将会被除以CPU数量之后显示。通过 I 命令可以交互式关闭/打开此模式  


%MEM -- 任务使用物理内存的百分比


TIME+  -- (ms)和time类似,以毫秒为单位显示


P -- 上一次用到的cpu,在‘多cpu环境下’显示该进程上一次使用的cpu节点


SWAP -- (kb)任务的总虚拟内存镜像被换到交换分区的部分。看到一篇博客说:这里应该是改进程使用过的swap的量

另:top汇总部分swap信息里面cached的部分表示的是曾经换入swap后又被换出,但是swap里的内容还未被覆盖的部分

Swap: 32767992k total,   986504k used, 31781488k free,  2740516k cached


TIME -- (s)任务自启动以来占用的CPU总时间。如果’Cumulative mode’(累计模式,默认关闭)打开,将显示此简称以及此进程的子进程(包括已死的)总共占有的cpu时间。累计模式可以通过命令行和交互式两种模式打开

例如下图:TIME+表示9517s33ms;TIME 表示158m37swKioL1SzZIGzUsg4AACCvT4oTxM405.jpg


CODE --  (kb)用来‘执行程序代码’的物理内存/存放进程代码的物理内存


DATA -- (kb)Data+Stack size。进程占用实体内存中的非程序码部份的大小


COMMAND -- 启动进程的命令




     本文转自kai404 51CTO博客,原文链接:http://blog.51cto.com/kaifly/1602457,如需转载请自行联系原作者

相关文章
|
5天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
15天前
|
NoSQL Linux Shell
常用的 Linux 命令
常用的 Linux 命令
36 9
|
2天前
|
监控 Linux Windows
50个必知的Linux命令技巧,你都掌握了吗?(下)
50个必知的Linux命令技巧,你都掌握了吗?(下)
|
2天前
|
Linux Shell Windows
Linux 常用基本命令
Linux 常用基本命令
|
3天前
|
Ubuntu Linux Shell
linux免交互登陆远程主机并执行命令(密钥对和Expect)
linux免交互登陆远程主机并执行命令(密钥对和Expect)
|
3天前
|
Linux
【Linux】常用命令
【Linux】常用命令
23 0
|
3天前
|
安全 Ubuntu Linux
Linux 网络操作命令Telnet
Linux 网络操作命令Telnet
16 0
Linux 网络操作命令Telnet
|
4天前
|
Linux 数据安全/隐私保护
Linux常用命令实例带注释
Linux常用命令实例带注释
30 0
|
4天前
|
Linux 开发工具 数据安全/隐私保护
Linux(19)常用解压命令记录
Linux(19)常用解压命令记录
9 0
|
5天前
|
Linux Perl
Linux系统替换字符串常用命令
请注意,`sed`命令可以非常强大,可以根据不同的需求使用不同的选项和正则表达式来进行更复杂的字符串替换操作。
18 0