Linux书签(02)用linux top命令自行监测和分析服务器CPU、内存、进程等性能

楔子: 学会灵活使用各种或工具或手段来监测自己的项目运行情况无疑是一种自我能力的提高。Linux top 命令也许会有所帮助。

Linux top 命令

Linux top 命令是服务器工程师和运维最常用的工具之一,它所带出来的信息可以有效的观察和监测当前服务器的各项性能,如系统CPU、内存、运行时间、执行的进程等信息,这可以实时有效的发现服务器运载能力或缺陷出在哪里。如内存不够、CPU处理能力不够、IO读写过高等等。就像 Windows 的任务管理器。

[devuser@ping-test8264 logs]$ top
top - 14:36:45 up 12 days,  3:16,  1 user,  load average: 0.66, 0.67, 0.63
Tasks:  91 total,   1 running,  89 sleeping,   1 stopped,   0 zombie
Cpu(s): 40.3%us,  0.3%sy,  0.0%ni, 59.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2045940k total,  2027396k used,    18544k free,    87148k buffers
Swap:  1048572k total,     7472k used,  1041100k free,   110292k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                             
28132 ping      20   0 2927m 1.7g 6728 S 81.1 85.5 780:26.52 java                                                                
30846 root      20   0  323m  10m 3216 S  0.3  0.5  27:33.91 ops-agent                                                           
    1 root      20   0 19236 1252 1112 S  0.0  0.1   0:00.37 init                                                                
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                            
    3 root      RT   0     0    0    0 S  0.0  0.0   0:04.29 migration/0                                                         
    4 root      20   0     0    0    0 S  0.0  0.0   0:10.99 ksoftirqd/0                                                         
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/0                                                           
    6 root      RT   0     0    0    0 S  0.0  0.0   0:02.32 watchdog/0                                                          
    7 root      RT   0     0    0    0 S  0.0  0.0   0:04.43 migration/1                                                         
    8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 stopper/1                                                           
    9 root      20   0     0    0    0 S  0.0  0.0   0:09.90 ksoftirqd/1                                                         
   10 root      RT   0     0    0    0 S  0.0  0.0   0:02.24 watchdog/1                                                          
   11 root      20   0     0    0    0 S  0.0  0.0   1:12.45 events/0                                                            
   12 root      20   0     0    0    0 S  0.0  0.0   1:20.05 events/1                                                            
   13 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events/0                                                            
   14 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events/1                                                            
   15 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_long/0                                                       
   16 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_long/1                                                       
   17 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_power_ef                                                     
   18 root      20   0     0    0    0 S  0.0  0.0   0:00.00 events_power_ef                                                     
   19 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cgroup                                                              
   20 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper                                                             
   21 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns                                                               
   22 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr                                                           
   23 root      20   0     0    0    0 S  0.0  0.0   0:00.00 pm                                                                  
   24 root      20   0     0    0    0 S  0.0  0.0   0:00.00 xenwatch                                                            
   25 root      20   0     0    0    0 S  0.0  0.0   0:01.69 xenbus                                                              
   26 root      20   0     0    0    0 S  0.0  0.0   0:05.78 sync_supers                                                         
   27 root      20   0     0    0    0 S  0.0  0.0   0:00.11 bdi-default                                                         
   28 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/0                                                       
   29 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kintegrityd/1                                                       
   30 root      20   0     0    0    0 S  0.0  0.0   0:06.56 kblockd/0                                                           
   31 root      20   0     0    0    0 S  0.0  0.0   0:00.90 kblockd/1                                                           
   32 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ata_aux                                                             
   33 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ata_sff/0                                                           
   34 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ata_sff/1                                                           
   35 root      20   0     0    0    0 S  0.0  0.0   0:00.00 ksuspend_usbd                                                       
   36 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khubd                                                              

信息拆解

命令行:top 命令

[devuser@ping-test8264 logs]$ top

第一行:系统概览

top - 14:36:45 up 12 days,  3:16,  1 user,  load average: 0.66, 0.67, 0.63

分别对应显示:系统当前时间 up 系统到目前为止运行的时间,当前登录用户数,以及负载均衡情况:

14:36:45

当前时间

up 12 days,  3:16

系统运行时间,格式为时:分(系统当前已经运行了12天3小时16分钟)

1 user

当前登录用户数

load average: 0.66, 0.67, 0.63

系统负载情况,即任务队列的平均长度。 三个数值分别为  1分钟、5分钟、15分钟 前到现在的平均值

注意:load average 数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

第二行:任务统计

Tasks:  91 total,   1 running,  89 sleeping,   1 stopped,   0 zombie

分别对应显示:当前任务总数,前正在运行的任务数,当前正在休眠的任务数,当前已经停止的任务数,僵尸进程数

91 total

当前任务(进程)总数

1 running

当前正在运行的任务(进程)数

89 sleeping

当前正在休眠的任务(进程)数

1 stopped

当前已经停止的任务(进程)数

0 zombie

当前僵尸任务(进程)数

第三行:CPU状态

Cpu(s): 40.3%us,  0.3%sy,  0.0%ni, 59.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

分别对应显示:

40.3%us

用户空间占用CPU百分比

0.3%sy

内核空间占用CPU百分比

0.0%ni

用户进程空间内改变过优先级的进程占用CPU百分比

59.4%id

空闲CPU百分比

0.0%wa

等待输入输出的CPU时间百分比

0.0%hi Hardware IRQ 硬中断 占用CPU的百分比
0.0%si Software 软中断 占用CPU的百分比
0.0%st 被 hypervisor 偷去的时间(虚拟机占用时间比例)

第四行:内存状态

Mem:   2045940k total,  2027396k used,    18544k free,    87148k buffers

分别对应显示:物理内存总量 2G,使用中的内存总量 2G,空闲内存总量 18M,缓冲内存量 85M

2045940k total

物理内存总量

2027396k used

使用的物理内存总量

18544k free

空闲内存总量

87148k buffers

用作内核缓存的内存量

注:使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到 free 中去,因此在 linux 上 free 内存会越来越少,但不用为此担心。

第五行:交换分区状态

Swap:  1048572k total,     7472k used,  1041100k free,   110292k cached

分别对应显示:交换区总量 1G,使用的交换区总量 7M,空闲交换区总量 1G,缓冲的交换区总量 0.1G

1048572k total

交换区总量

7472k used

使用的交换区总量

1041100k free

空闲交换区总量

110292k cached

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

注:对于内存监控,在 top 里我们要时刻监控第五行 swap 交换分区的 used,如果这个数值在不断的变化,说明内核在不断进行内存和 swap 的数据交换,这是真正的内存不够用了。

第六行:空行

第七行:各进程的监控表头

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

对应表头信息如下:

PID 进程唯一ID标识
USER 启动此进程的用户
PR 进程优先级
NI 进程nice值(与PR相加为0,NI值越小进程优先级越高)
VIRT 进程使用的虚拟内存总量,单位kb
RES 进程使用的,未被换出的内存大小,单位kb
SHR 共享内存大小,单位kb
S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
%CPU 进程占用CPU资源比例
%MEM 进程占用内存大小比例
TIME+ 进程占用系统内核时间,单位1/100秒
COMMAND 进程名称(命令名/命令行)

脱坑技巧

1)在使用 top 命令过程中,有时希望界面停止滚动来捕捉一些特定的进程信息,这时可以使用 ctrl+s 冻结屏幕,在得到我们需要的信息后按 ctrl+q 解除屏幕冻结。

2)监控 Java 线程数(如果不加后面的 wc -l 来只显示当前 Java 线程个数,会很容易被刷屏):

ps -eLf | grep java | wc -l

3)命令 pmap,输出某个进程内存的状况,可以用来分析线程堆栈:

pmap PID
发布了63 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/itanping/article/details/90033950