Linux中top和free命令(6/15)

Posted konglingbin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中top和free命令(6/15)相关的知识,希望对你有一定的参考价值。

top:命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.

该命令可以按CPU使用.内存使用和执行时间对任务进行排序;

而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定. 

top - 01:06:48 up  1:22,  1 user,  load average: 0.06, 0.60,  0.48

            Tasks:  29 total,   1 running,  28 sleeping,   0 stopped,   0  zombie

            Cpu(s):  0.3% us,  1.0% sy,  0.0% ni, 98.7% id,  0.0% wa,  0.0%  hi,  0.0% si

            Mem:    191272k total,   173656k used,    17616k free,    22052k  buffers

            Swap:   192772k total,        0k used,   192772k free,   123988k  cached

 

            PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM     TIME+  COMMAND

            1379 root      16   0  7976 2456 1980 S  0.7  1.3   0:11.03  sshd

 

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。退出 top 的命令为 q (在 top 运行中敲 q 键一次)

  1. 0> top -u pso  

统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime  命令的执行结果。其内容如下:

01:06:48 当前时间

up 1:22 系统开机到现在的运行时长,单位:分

1 user 当前登录用户数

load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。

            三个数值分别为  1分钟、5分钟、15分钟前到现在的平均值。

 

第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

  1. Tasks: 126 total,   1 running, 125 sleeping,   0 stopped,   0 zombie  

Tasks “127 total” 进程总数
    “1 running” 正在运行的进程数
    “125 sleeping” 睡眠的进程数
    “0 stoped” 停止的进程数
    “0 zombie” 僵尸进程数


    Cpu(s):  1.8%us,  0.5%sy,  0.0%ni, 97.1%id,  0.0%wa,  0.0%hi,  0.5%si,  0.0%st  

Cpus 分别表示了 CPU 当前的使用率;

1.8%us    用户空间占用CPU百分比  
0.5%sy 内核空间占用CPU百分比  
0.0%ni  用户进程空间内改变过优先级的进程占用CPU百分比  
97.1%id    空闲CPU百分比  
0.0%wa  等待输入输出的CPU时间百分比  
0.0%hi

0.5%si

0.0%st 

   Mem:   8057552k total,  7905920k used,   151632k free,   397224k buffers  

Mem 分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;

8057552k total  物理内存总量  
7911076k used  使用的物理内存总量  
146476k free  空闲内存总量  
395284k buffers  用作内核缓存 的内存量

  1. Swap:  8191996k total,    82588k used,  8109408k free,  2308104k cached  

Swap 表示类别同Mem,但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。

8191996k total交换区总量  
83008k used  使用的交换区总量  
8108988k free  空闲交换区总量  
2315284k cached缓冲的交换区总量。
            内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
            该数值即为这些内容已存在于内存中 的交换区的大小。 相应的内存再次被换出时可不必再对交换区写入。 

 

第二部分 -- 中间部分的内部命令提示栏:

  top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。

 

内部命令如下:

<空格>  立刻刷新
  s 改变画面更新频率
  l 关闭/开启第一部分 top 信息的表示
  t 关闭/开启第一部分Tasks 和 Cpus 信息的表示
  m 关闭/开启第一部分Mem 和 Swap 信息的表示
  h 显示帮助
  n 设置在进程列表所显示进程的数量
c 切换显示命令名称和完整命令行
  q 退出 top
N 以 PID 的大小的顺序排列表示进程列表
  P 以 CPU 占用率大小的顺序排列进程列表
  M 以内存占用率大小的顺序排列进程列表
T 根据时间、累计时间排序
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

 

第三部分 -- 最下部分的进程列表栏:

以 PID 区分的进程列表将根据所设定的画面更新时间定期的更新


%CPU:
%MEM:
TIME+:
COMMAND:进程启动命令名称

进程信息区统计信息区域的下方显示了各个进程的详细信息。各列的含义如下:
列名 含义  
PID 进程id  
PPID 父进程id  
RUSER  Real user name  
UID   进程所有者的用户id  
USER 进程所有者的用户名  
GROUP  进程所有者的组名  
TTY   启动进程的终端名。不是从终端启动的进程则显示为 ?  
PR 优先级  
NI   nice值。负值表示高优先级,正值表示低优先级  
P   最后使用的CPU,仅在多CPU环境 下有意义  
%CPU   上次更新到现在的CPU时间占用百分比 ,进程占用CPU的使用率 

%MEM   进程使用的物理内存 百分比  , 进程使用的物理内存和总内存的百分比

TIME   进程使用的CPU时间总计,单位秒  
TIME+ 进程使用的CPU时间总计,单位1/100秒   该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。

VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES  
SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。  
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA  
CODE 可执行代码占用的物理 内存大小,单位kb  
DATA 可执行代码以外的部分(数据 段+栈)占用的物理 内存大小,单位kb  
SHR 进程使用的共享内存大小,单位kb  
nFLT 页面错误次数  
nDRT 最后一次写入到现在,被修改过的页面数。  

S 进程状态。
D =不可中断的睡眠状态
R =运行
S =睡眠
T =跟踪/停止
Z =僵尸进程  
COMMAND  命令名/命令行  
WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名  
Flags 任务标志,参考 sched.h 

默认情况下仅显示比较重要的  PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND  列。

f 键可以选择显示的内容:按 f 键,可以进入编辑要显示字段的视图 ,显示列的列表,
按 a-z  即可显示或隐藏对应的列,有 * 号的字段会显示,无 * 号不显示,最后按回车键确定。
 

按 o 键可以改变列的显示顺序。

按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z  可以将相应的列向左移动。最后按回车键确定。


按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。
大写的  R 键可以将当前的排序倒转。 

     按键b打开或关闭 运行中进程的高亮效果

  • 按键x打开或关闭 排序列的高亮效果

  • shift + > 或 shift + < 可以向右或左改变排序列

top命令是一个功能十分强大的监控系统的工具,它的缺点是会消耗很多系统资源。

top命令可以监视指定用户,缺省情况是监视所有用户的进程。如果想查看指定用户的情况,在终端中按“U”键,然后输入用户名,系统就会切换为指定用户的进程运行界面。

pmap

可以根据进程号查看进程相关信息占用的内存情况

[[email protected] A22-15-10.120.64.173]: /app/tomcat-callcenter2.0  

    1. 0> pmap -d 17854 

 

 

free命令用来显示内存的使用情况

 b.格式

  free [-b -k -m] [-o] [-s delay] [-t] [-V]

   c.主要参数

  -b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。

   -s delay:显示每隔多少秒数来显示一次内存使用情况。

   -t:显示内存总和列。

 -o:不显示缓冲区调节列。 

 使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每5秒更新一次

#free -b -s5 

              total       used       free     shared    buffers     cached

Mem:       3266180    3250004      16176          0     110652    2668236

-/+ buffers/cache:     471116    2795064

Swap:      2048276      80160    1968116

 

total:总计物理内存的大小。

used:已使用多大。

free:可用有多少。

Shared:多个进程共享的内存总额。

Buffers/cached:磁盘缓存的大小。

 

第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别在于使用的角度来看,

mem是从OS的角度来看,对于OS,buffers/cached 都是属于被使用,可用内存是178072KB,已用内存是7879480KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用+buffers+cached.

第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。如上例:2859864=178072+395020+2286772

第三行(-/+ buffers/cached):

used:已使用多大。

free:可用有多少。

第四行就不多解释了。

区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,

第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.

第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。

如上例:2795064=16176+110652+2668236

接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。

 占用内存的测量

 测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。

 /proc/meminfo 机器的内存使用信息

 /proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。

 /proc/pid/statm 进程所占用的内存

 

buffer cache,又称bcache,其中文名称为缓冲器高速缓冲存储器,简称缓冲器高缓。另外,buffer cache按照其工作原理,又被称为块高缓。

在linux读写文件时,它用于缓存物理磁盘上的磁盘块,从而加快对磁盘上数据的访问。

buffer cache的内容对应磁盘上一个块(block),块通常为1K,都是连续的。

在linux下,为了更有效的使用物理内存,操作系统自动使用所有空闲内存作为Buffer Cache使用。当程序需要更多内存时,操作系统会自动减小Cache的大小

  buffer 与cache 的区别

  A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use.

  更详细的解释参考:Difference Between Buffer and Cache

  对于共享内存(Shared memory),主要用于在UNIX 环境下不同进程之间共享数据,是进程间通信的一种方法,一般的应用程序不会申请使用共享内存,笔者也没有去验证共享内存对上面等式的影响。如果你有兴趣,请参考:What is Shared Memory?

  cache 和 buffer的区别:

  Cache:高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache.

  Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据时,速度快的设备的操作进程不发生间断。

  Free中的buffer和cache:(它们都是占用内存):

  buffer :作为buffer cache的内存,是块设备的读写缓冲区

  cache:作为page cache的内存, 文件系统的cache

  如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO 必会非常小。







































































以上是关于Linux中top和free命令(6/15)的主要内容,如果未能解决你的问题,请参考以下文章

Linux中top和free命令详解(转)

Linux进程和进程优先级(top+ps+kill+renice+df+free命令)

Linux--命令大全/常用命令--管理类--内存/磁盘/进程--top/free/du/df/ps/pstree/kill/killall

Linux监控命令整理(top,free,vmstat,iostat,mpstat,sar,netstat)

Linux监控命令整理(top,free,vmstat,iostat,mpstat,sar,netstat)

Linux——详解系统监控和常用命令(top free dstat)