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

可以选择按进程查看或者按用户查看,如想查看pso用户的进程内存使用情况:

[pso@10.120.64.173 A22-15-10.120.64.173]: /app/tomcat-callcenter2.0
0> top -u pso
top - 10:11:52 up 218 days, 12:52,  1 user,  load average: 0.09, 0.18, 0.13
Tasks: 126 total,   1 running, 125 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.2%sy,  0.0%ni, 99.2%id,  0.2%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   8057552k total,  7905920k used,   151632k free,   397224k buffers
Swap:  8191996k total,    82588k used,  8109408k free,  2308104k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                     
13818 pso       20   0 15032 1240  928 R  0.3  0.0   0:00.21 top                                                                                                         
 5276 pso       20   0 98.1m 1964  972 S  0.0  0.0   0:00.02 sshd                                                                                                        
 5277 pso       20   0  105m 1856 1432 S  0.0  0.0   0:00.03 bash

[pso@10.120.64.173 A22-15-10.120.64.173]: /app/tomcat-callcenter2.0
0> top 

top - 10:37:37 up 218 days, 13:18,  1 user,  load average: 0.04, 0.11, 0.09
Tasks: 127 total,   1 running, 126 sleeping,   0 stopped,   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
Mem:   8057552k total,  7911076k used,   146476k free,   395284k buffers
Swap:  8191996k total,    83008k used,  8108988k free,  2315284k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                     
20203 root      20   0 1253m 191m  10m S  3.3  2.4 189:18.27 java                                                                                                        
17854 app       20   0 5612m 4.3g  11m S  2.3 56.4 197:10.53 java                                                                                                        
 1369 root      20   0     0    0    0 S  0.3  0.0   2:46.16 jbd2/dm-2-8                                                                                                 
24581 root      20   0  402m 5576 2380 S  0.3  0.1 593:37.09 falcon-agent                                                                                                
    1 root      20   0 19364 1216  992 S  0.0  0.0   2:04.66 init                                                                                                        
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.16 kthreadd                                                                                                    
    3 root      RT   0     0    0    0 S  0.0  0.0   1:29.36 migration/0                                                                                                                                                                           

参数解释:

在命令行中输入 “top”,即可启动 top
top 的全屏对话模式可分为3部分:系统信息栏命令输入栏进程列表栏

第一部分 -- 最上部的 系统信息栏 :

top - 10:11:52 up 218 days, 12:52,  1 user,  load average: 0.09, 0.18, 0.13

top “10:37:37”为系统当前时刻;"up 218 days   系统运行 时间,格式为时:分"

    “1 user”为当前登录到系统的用户(登录到用户的终端数)-- 同一个用户同一时间对系统多个终端的连接被视为多个用户连接到系统,用户数也将表现为终端的数目;

    “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;

平均负载的值越小代表系统压力越小,越大则代表系统压力越大。通常,我们会以最后一个数值,也就是15分钟内的平均负载作为参考来评估系统的负载情况。

对于只有单核cpu的系统,1.0是该系统所能承受负荷的边界值,大于1.0则有处理需要等待。

一个单核cpu的系统,平均负载的合适值是0.7以下。如果负载长期徘徊在1.0,则需要考虑马上处理了。超过1.0的负载,可能会带来非常严重的后果。

当然,多核cpu的系统是在前述值的基础上乘以cpu内核的个数。如对于多核cpu的系统,有N个核则所能承受的边界值为N.0。

可以使用如下命令来查看每个处理器的信息:

cat /proc/cpuinfo

如果只想计算有多少个cpu内核,可以使用如下命令:

[root@localhost ~]# cat /proc/cpuinfo | grep 'model name' | wc -l
24

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  用作内核缓存 的内存量

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

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

[pso@10.120.64.173 A22-15-10.120.64.173]: /app/tomcat-callcenter2.0
0> pmap -d 17854
17854:   /opt/jdk1.6.0_37/bin/java -Djava.util.logging.config.file=/app/tomcat-callcenter2.0/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms4g -Xmx4g -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC -Xss512k -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -XX:+PrintGCTimeStamps -Xloggc:/app/tomcat-callcenter2.0/logs/gc.log -XX:+Hea
Address           Kbytes Mode  Offset           Device    Mapping
mapped: 0K    writeable/private: 0K    shared: 0K

free

free命令用来显示内存的使用情况,使用权限是所有用户。

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

-b -k -m 分别以字节(KB、MB)为单位显示内存使用情况。
-s delay 显示每隔多少秒数来显示一次内存使用情况。
-t 显示内存总和列。
-o 不显示缓冲区调节列

free命令是用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。

[pso@10.120.64.173 A22-15-10.120.64.173]: /app/tomcat-callcenter2.0
130> free -b -s5 -t     
             total       used       free     shared    buffers     cached
Mem:    8250933248 8088088576  162844672     409600  404414464 2350227456
-/+ buffers/cache: 5333446656 2917486592 
Swap:   8388603904   84996096 8303607808 
Total:  1663953715 8173084672 8466452480 
使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每5秒更新一次。


0> free
             total       used       free     shared    buffers     cached
Mem:       8057552    7879480     178072        400     395020    2286772
-/+ buffers/cache:    5197688    2859864 
Swap:      8191996      83192    8108804 
total 总计物理内存的大小
used 已使用多大
free 可用有多少
Shared 多个进程共享的内存总额
Buffers/cached 磁盘缓存的大小

(-/+ buffers/cached)
used 已使用多大
free 可用有多少



第二行(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


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

查看额定值

[pso@10.120.64.173 A22-15-10.120.64.173]: /app/tomcat-callcenter2.0
0> cat /proc/meminfo 
MemTotal:        8057552 kB
MemFree:          174500 kB
Buffers:          395020 kB
Cached:          2293156 kB
SwapCached:         3412 kB
Active:          5091844 kB
Inactive:        2338840 kB
Active(anon):    3775600 kB
Inactive(anon):   967308 kB
Active(file):    1316244 kB
Inactive(file):  1371532 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       8191996 kB
SwapFree:        8108804 kB
Dirty:                32 kB
Writeback:             0 kB
AnonPages:       4740980 kB
Mapped:            20380 kB
Shmem:               400 kB
Slab:             358116 kB
SReclaimable:     321628 kB
SUnreclaim:        36488 kB
KernelStack:        4832 kB
PageTables:        13156 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    12220772 kB
Committed_AS:    5073712 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      161860 kB
VmallocChunk:   34359573104 kB
HardwareCorrupted:     0 kB
AnonHugePages:   4691968 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       10240 kB
DirectMap2M:     8378368 kB
[pso@10.120.64.173 A22-15-10.120.64.173]: /app/tomcat-callcenter2.0
0> free -m
             total       used       free     shared    buffers     cached
Mem:          7868       7699        169          0        385       2239
-/+ buffers/cache:       5073       2795 
Swap:         7999         81       7918 


查看/proc/kcore文件的大小(内存镜像):

0> ll -h /proc/kcore 
-r-------- 1 root root 4.0K 3月   2 11:20 /proc/kcore

占用内存的测量

测量一个进程占用了多少内存,linux提供了一个很方便的方法,/proc目录提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存

0> cat /proc/self/statm
25233 135 117 11 0 67 0

我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。所以 空闲内存=free+buffers+cached=total-used


Logo

更多推荐