top命令是Linux监控很基础的指令,可以实时显示系统各个进程的资源占用情况,是常用的性能分析工具。
top - 14:47:10 up 346 days, 21:29, 1 user, load average: 0.25, 0.19, 0.21
Tasks: 104 total, 2 running, 102 sleeping, 0 stopped, 0 zombie
%Cpu0 : 4.0 us, 3.4 sy, 0.0 ni, 92.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 2.7 us, 4.0 sy, 0.0 ni, 93.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8009032 total, 135840 free, 7530440 used, 342752 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 236324 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
501 webuser 20 0 3423800 525624 11284 S 7.6 6.6 137:15.49 java
31423 webuser 20 0 3499524 678608 8684 S 2.0 8.5 26:49.12 java
8281 webuser 20 0 3379944 477432 6752 S 1.7 6.0 3:25.00 java
19121 webuser 20 0 3464032 669836 4464 S 1.3 8.4 519:50.16 java
5487 webuser 20 0 3478520 594028 3700 S 1.0 7.4 21:40.55 java
26141 webuser 20 0 3430176 613976 1872 S 1.0 7.7 174:37.64 java
904 root 20 0 1345048 29400 5060 S 0.7 0.4 1067:08 exe
7089 webuser 20 0 3345568 452076 5556 S 0.7 5.6 2:56.70 java
11887 webuser 20 0 3298088 481744 2500 S 0.7 6.0 478:39.92 java
32426 root 10 -10 157852 28212 4228 S 0.7 0.4 430:54.59 AliYunDun
20092 webuser 20 0 3306948 483816 3388 S 0.3 6.0 172:38.02 java
1 root 20 0 191076 2740 1268 S 0.0 0.0 62:16.46 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.26 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 8:27.25 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:02.14 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 R 0.0 0.0 83:12.15 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 1:33.60 watchdog/0
12 root rt 0 0 0 0 S 0.0 0.0 1:14.33 watchdog/1
13 root rt 0 0 0 0 S 0.0 0.0 0:01.98 migration/1
14 root 20 0 0 0 0 S 0.0 0.0 4:08.54 ksoftirqd/1
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
20 root 20 0 0 0 0 S 0.0 0.0 2:53.20 khungtaskd
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.01 writeback
22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
命令区分为上下2块,服务器资源信息和进程详细信息,我们把顶部几行定义为资源区,下面进程信息为进程区。
- 一.资源区详解
- 第1行为任务队列信息
top - 14:47:10 up 346 days, 21:29, 1 user, load average: 0.25, 0.19, 0.21
参数描述如下:
参数 | 描述 |
---|---|
14:47:10 | 系统当前时间 |
up 346 days, 21:29 | 系统累计运行时间,天、时、分 |
1 user | 当前登录用户数 |
load average: 0.25, 0.19, 0.21 | 系统负载,三个数值分别为 1分钟、5分钟、15分钟前到当前时间的平均值 |
load average表示系统平均负载,uptime命令也可以查看它,数值越小越好。数值越高,说明服务器的负载越大,是服务器性能遇到压力的一个信号。举例,当前有一座桥,在某个时间段内,来往车辆开始拥堵,平均负载越来越高,导致大桥对车辆的疏通能力越来越弱,排队时间开始变长。
以下转载:CPU和平均负载的关系
那么CPU利用率与Load Average对于性能测试的意义有什么区别呢?
实际上,CPU利用率反映的是CPU被使用的情况,当CPU长期处于被使用而没有得到足够的时间休息间歇,那
么对于CPU硬件来说是一种超负荷的运作,需要调整使用频度。而Load Average却从另一个角度来展现对于
CPU使用状态的描述,Load Average越高说明对于CPU资源的竞争越激烈,CPU资源比较短缺。对于资源的申
请和维护其实也是需要很大的成本,所以在这种高Average Load的情况下CPU资源的长期“热竞争”也是对于硬件
的一种损害。
一般来说,Load Average是与机器内核数有关的。以一个单核的机器为例,load=0.5表示CPU还有一半的资源
可以处理其他的线程请求,load=1表示CPU所有的资源都在处理请求,没有剩余的资源可以利用了,而load=2
则表示CPU已经超负荷运作,另外还有一倍的线程正在等待处理。所以,对于单核机器来说,理想状态下,
Load Average要小于1。同理,对于双核处理器来说,Load Average要小于2。结论是:多核处理器中,你的
Load Average不应该高于处理器核心的总数量。
Load Average的值应该小于CPU个数X核数X0.7,Load Average会有3个状态平均值,分别是1分钟、5分钟和15
分钟平均Load。如果1分钟平均出现大于CPU个数X核数的情况,还不需要担心;如果5分钟的平均也是这样,
那就要警惕了;15分钟的平均也是这样,就要分析哪里出现问题,防范未然。
在平时的运维工作中,当一台服务器的性能出现问题时,通常会去看当前的CPU使用情况,尤其是看下CPU的
负载情况(load average)。对一般的系统来说,根据cpu数量去判断。比如有2颗cup的机器。如果平均负载始终
在1.2以下,那么基本不会出现cpu不够用的情况。也就是Load平均要小于Cpu的数量。
对于cpu负载的理解,首先需要搞清楚下面几个问题:
1)系统load高不一定是性能有问题。
因为Load高也许是因为在进行cpu密集型的计算
2)系统Load高不一定是CPU能力问题或数量不够。
因为Load高只是代表需要运行的队列累计过多了。但队列中的任务实际可能是耗Cpu的,也可能是耗i/0奶子其
他因素的。
3)系统长期Load高,解决办法不是一味地首先增加CPU
因为Load只是表象,不是实质。增加CPU个别情况下会临时看到Load下降,但治标不治本。
4)在Load average 高的情况下需要鉴别系统瓶颈到底是CPU不足,还是io不够快造成或是内存不足造成的。
- 第2行为进程信息
Tasks: 104 total, 2 running, 102 sleeping, 0 stopped, 0 zombie
分别表示:进程总数、正在运行的进程数、睡眠的进程数、停止的进程数、僵尸进程数
- 第3、4行为CPU使用信息
%Cpu0 : 4.0 us, 3.4 sy, 0.0 ni, 92.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 2.7 us, 4.0 sy, 0.0 ni, 93.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
分别表示:用户空间占用CPU百分比、内核空间占用CPU百分比、用户进程空间内改变过优先级的进程占用CPU百分比、空闲CPU百分比、等待输入输出的CPU时间百分比、硬中断(Hardware IRQ)占用CPU的百分比、软中断(Software Interrupts)占用CPU的百分比、0.0st。
- 第5、6行为内存信息
KiB Mem : 8009032 total, 135840 free, 7530440 used, 342752 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 236324 avail Mem
物理内存总量、空闲内存总量、使用的物理内存总量、用作内核缓存的内存量。
交换区总量、空闲交换区总量、使用的交换区总量、缓冲的交换区总量。
- 二.进程区详解
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
501 webuser 20 0 3423800 525624 11284 S 7.6 6.6 137:15.49 java
PID,进程id;
USER,进程所有者的用户名;
PR,优先级;
NI,nice值。负值表示高优先级,正值表示低优先级;
VIRT,进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES,
RES,进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA;
SHR,共享内存大小,单位kb;
S,进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程;
%CPU,上次更新到现在的CPU时间占用百分比;
%MEM,进程使用的物理内存百分比;
TIME+,进程使用的CPU时间总计,单位1/100秒;
COMMAND,命令名/命令行。
top命令延伸:
在top基本视图中:
按键盘数字1,可监控每个逻辑CPU的状况;
按键盘f,可以设置基本视图中的字段是否显示;
top -d 300 #设置屏幕刷新间隔为300;
top -o +%CPU;
top -n 1 -b > /data/top-output.txt 保存top命令行的输出到一个文件中;
关于tomcat进程的查看:
ps aux | grep tomcat
ps -ef | grep tomcat/java
jinfo PID 该命令可以打印出java进程的配置信息:包括jvm参数,系统属性等