top的使用方法
top命令主要用于分析Linux服务器当前的实时CPU和内存消耗情况,以及进程的运行情况统计。
命令使用:top ,具体top命令的使用方法和以下截图的各个信息的含义,可通过man top命令来查看。
其中比较常用的是:按1显示各个核的统计,使用-p参数指定所要监控的进程号。
top - 11:32:29 up 109 days, 20:46, 1 user, load average: 0.24, 0.36, 0.44
Tasks: 113 total, 2 running, 111 sleeping, 0 stopped, 0 zombie
Cpu0 : 27.2%us, 16.4%sy, 0.0%ni, 46.0%id, 0.0%wa, 0.0%hi, 3.7%si, 6.7%st
Cpu1 : 20.2%us, 12.8%sy, 0.0%ni, 55.9%id, 0.0%wa, 0.0%hi, 3.7%si, 7.4%st
Mem: 5991036k total, 5878620k used, 112416k free, 39464k buffers
Swap: 4194300k total, 51312k used, 4142988k free, 1663552k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8960 root 20 0 4437m 1.2g 5888 S 56.6 20.8 46006:20 java
26114 root 20 0 4709m 2.3g 8400 S 26.4 40.0 2379:41 java
15076 root 20 0 2790m 110m 2332 S 4.5 1.9 4633:09 java
11 root 20 0 0 0 0 R 2.6 0.0 1041:19 events/0
14970 root 20 0 154m 16m 684 S 1.9 0.3 8628:44 redis-server
1454 root 20 0 32080 6292 568 S 1.0 0.1 472:03.29 zabbix_agentd
1456 root 20 0 32080 6316 628 S 1.0 0.1 474:00.31 zabbix_agentd
9 root 20 0 0 0 0 S 0.3 0.0 22:46.49 ksoftirqd/1
1393 root 20 0 195m 1180 652 S 0.3 0.0 45:16.13 snmpd
24592 root 20 0 15032 1176 888 R 0.3 0.0 0:00.04 top
1 root 20 0 19356 572 352 S 0.0 0.0 0:36.70 init
从上到下分析:
系统整体负载统计
第一行:top - 11:32:29 up 109 days, 20:46, 1 user, load average: 0.24, 0.36, 0.44
11:32:29 | 当前服务器时间 |
up 109 days | 服务器运行了多久 |
1 user | 当前的登录用户数量 |
load average: 0.24, 0.36, 0.44 | 系统1分钟,5分钟,15分钟的负载统计, 这个数字在单核和多核之间是存在差别的, 如果是单核,则值在0.0~1.0之间表示正常,一般不要超过0.7,多核类似。 如果是多核,则值在0.0~CPU核心数表示正常,如2核是0到2,4核是0到4。 多核参照单核的标准的话,是:数值 / CPU核数,在0.00-1.00之间正常。 当使用这个数值除以CPU核数,即:数值 / CPU核数,之后,如果大于5则表示系统负载太高。 |
CPU的核心数查看:
查看物理CPU的个数
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc –l
查看逻辑CPU的个数
#cat /proc/cpuinfo |grep "processor"|wc –l
查看CPU是几核
#cat /proc/cpuinfo |grep "cores"|uniq
查看CPU的主频
#cat /proc/cpuinfo |grep MHz|uniq
直接获得CPU核心数 (该命令即可全部算出多少核)
#grep 'model name' /proc/cpuinfo | wc -l
第二行:Tasks: 113 total, 2 running, 111 sleeping, 0 stopped, 0 zombie
113 total | 当前系统一共有113个进程 |
2 running | 2个进程正在运行 |
111 sleeping | 111个进程在休眠 |
0 stopped | 停止进程的个数 |
0 zombie | 僵尸进程的个数 |
CPU的各个核统计
第三、四行:两个CPU核的统计信息
Cpu0 : 27.2%us, 16.4%sy, 0.0%ni, 46.0%id, 0.0%wa, 0.0%hi, 3.7%si, 6.7%st
Cpu1 : 20.2%us, 12.8%sy, 0.0%ni, 55.9%id, 0.0%wa, 0.0%hi, 3.7%si, 7.4%st
us | 用户空间进程所用CPU占比 |
sy | 系统空间进程所用CPU占比 |
ni | 调整了进程优先级的进程所用CPU占比 |
id | 空闲CPU占比 |
wa | 等待输入输出的进程所用CPU占比 |
hi | 硬中断所用CPU占比 |
si | 软中断所用CPU占比 |
内存和交换分区统计
第五行:Mem: 5991036k total, 5878620k used, 112416k free, 39464k buffers
total | 物理内存总量 |
used | 已使用的物理内存量 |
free | 空闲的物理内存量 |
buffers | 用作内核缓存的内存量,即内核页缓存,操作系统尽可能地将 从磁盘读出的内容或者要写到磁盘的内容通过页缓存来进行缓冲, 在规定的时间或者当缓存到达一定量时,再刷到磁盘,减少磁盘的读写操作,提高系统性能。 |
第六行:Swap: 4194300k total, 51312k used, 4142988k free, 1663552k cached
total | 交换分区总大小,即分了多少磁盘用作交换分区 |
used | 已使用的交换分区总量 |
free | 空闲的交换分区量 |
cached | 缓冲的交换分区使用量,即内存的内容可以交换到交换分区, 然后再从交换分区加载会内存,加载回之后,交换分区对应的 内容不删掉,而是缓冲起来,故之后内存内容再交换出来时, 如果该内容没有修改过,则不需要再对交换分区进行写出, 减少数据读写量。当交换分区不够时,则可以删除该缓冲的内容 来腾出空间。 |
对于当前的可用内存量 为:free + buffers + cached
进程统计
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8960 root 20 0 4437m 1.2g 5888 S 56.6 20.8 46006:20 java
26114 root 20 0 4709m 2.3g 8400 S 26.4 40.0 2379:41 java
15076 root 20 0 2790m 110m 2332 S 4.5 1.9 4633:09 java
PID | 进程ID |
USER | 进程的owner,即是在以该用户登录的身份时启动的。 |
PR NI | 进程优先级,其中PR为整数,NI为负数,绝对值越大,进程优先级越高。 |
VIRT | 进程的虚拟内存大小,VIRT = RES + SHR,即进程申请了多少内存,但是不一定使用了这么多,具体使用了多少物理内存 是RES显示的。 |
RES | 进程所用的实际物理内存大小,即进程实际使用了多少物理内存,包含进程自身的内存和与其他进程共享的内存,但不包括swap out的。在分析进程是否占用太多内存时,关注这个值。 |
SHR | 进程所用的共享内存大小,如共享库,如果需要知道该进程自身独立使用的内存大小,则使用RES-SHR。当共享内存swap out到交换分区之后,则SHR的值会减小。 |
S | 进程状态,对应的值:D = 不可中断的睡眠状态, R = 运行, S = 睡眠, T = 跟踪/停止, Z=僵尸进程 |
%CPU | 上次更新到现在所使用的CPU的占比,即该进程在各个CPU核运行的占比相加,如果是多核,可能超过100% |
%MEM | 进程所用的物理内存占比,即对于系统正在被使用的物理内存中,该进程使用了多少,如系统物理内存重量为8G,当前共使用了2G,当前进程为30%,则该进程使用了0.6G。 |
TIME+ | 进程运行了多久,这个是百秒为单位,即需要乘以100来转为秒,另外一个TIME则是秒为单位。 |
COMMAND | 进程的启动命令,如Java进程是通过java命令启动的。 |