10分钟教会你看懂top

系统 Linux
后端们最怕的事情之一就是服务器的负载突然飙升,这可能又意味着一个个夺目Call马上要打过来了。碰到这种情况怎么办,大家第一反应一定是登陆到服务器上,先敲一个top命令看看Load Average吧。

[[395231]]

 后端们最怕的事情之一就是服务器的负载突然飙升,这可能又意味着一个个夺目Call马上要打过来了。碰到这种情况怎么办,大家第一反应一定是登陆到服务器上,先敲一个top命令看看Load Average吧。今天这篇文章和大家说说怎么看这个“Load Average”。

>>>>

Load Average

很多人说Load Average这一个指标就能说明系统负载高了,这句话是对的。那么具体是哪里压力大了呢?这三个数值是怎么计算出来的呢?可能很多人一下子都说不上来。

先来说说定义吧:在一段时间内,CPU正在处理以及等待CPU处理的进程数之和。三个数字分别代表了1分钟,5分钟,15分钟的统计值。

所以,这个数值的确能反应服务器的负载情况。但是,这个数值高了也并不能直接代表这台机器的性能有问题。可能是因为正在进行CPU密集型的计算,也有可能是因为I/O问题导致运行队列堵了。所以,当我们看到这个数值飙升的时候,还得具体问题具体分析。直接升级机器是简单粗暴,但是治标不治本。

top命令一行一行看

top命令输出了很多参数,真正的服务器负载情况我们要综合其他参数一起看。

第一行: 

  1. top - 20:41:08 up 18 days,  5:24,  2 users,  load average: 0.04, 0.03, 0.05  
  2. top:当前时间  
  3. up:机器运行了多少时间  
  4. users:当前有多少用户  
  5. load average:分别是过去1分钟,5分钟,15分钟的负载 

具体需要关注的果然还是load average这三个数值。大家都知道,一个CPU在一个时间片里面只能运行一个进程,CPU核数的多少直接影响到这台机器在同时间能运行的进程数。所以一般来说Load Average的数值别超过这台机器的总核数,就基本没啥问题。

第二行: 

  1. Tasks: 216 total,   1 running, 215 sleeping,   0 stopped,   0 zombie  
  2. Tasks:当前有多少进程  
  3. running:正在运行的进程  
  4. sleeping:正在休眠的进程  
  5. stopped:停止的进程  
  6. zombie:僵尸进程 

running越多,服务器自然压力越大。

第三行: 

  1. %Cpu(s):  0.2 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st  
  2. us: 用户进程占CPU的使用率  
  3. sy: 系统进程占CPU的使用率  
  4. ni: 用户进程空间改变过优先级  
  5. id: 空闲CPU占用率  
  6. wa: 等待输入输出的CPU时间百分比  
  7. hi: 硬件的中断请求  
  8. si: 软件的中断请求  
  9. st: steal time 

这一行代表了CPU的使用情况,us长期过高,表明用户进程占用了大量的CPU时间。us+sy如果长期超过80或者90,可能就代表了CPU性能不足,需要加CPU了。

第四行&第五行 

  1. KiB Mem : 65810456 total, 30324416 free,  9862224 used, 25623816 buff/cache  
  2. KiB Swap:  7999484 total,  7999484 free,        0 used. 54807988 avail Mem  
  3. total:内存总量  
  4. free:空闲内存  
  5. used:使用的  
  6. buffer/cache:写缓存/读缓存 

第四第五行分别是内存信息和swap信息。所有程序的运行都是在内存中进行的,所以内存的性能对与服务器来说非常重要。不过当内存的free变少的时候,其实我们并不需要太紧张。真正需要看的是Swap中的used信息。Swap分区是由硬盘提供的交换区,当物理内存不够用的时候,操作系统才会把暂时不用的数据放到Swap中。所以当这个数值变高的时候,说明内存是真的不够用了。

第五行往下 

  1. PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                                  
  2.  19868 root      20   0 19.733g 369980  15180 S   0.7  0.6 129:53.91 java                                                                                                                                                                     
  3.  19682 root      20   0 19.859g 5.766g  22252 S   0.3  9.2 139:42.81 java                                                                                                                                                                    
  4.  54625 100       20   0   50868  33512   4104 S   0.3  0.1   0:04.68 fluentd                                                                           
  5.  PID:进程id  
  6. USER:进程所有者  
  7. PR:优先级。数值越大优先级越高  
  8. NI:nice值,负值表示高优先级,正值表示低优先级  
  9. VIRT:进程使用的虚拟内存总量  
  10. SWAP:进程使用的虚拟内存中被换出的大小  
  11. RES:进程使用的、未被换出的物理内存大小  
  12. SHR:共享内存大小  
  13. SHR:共享内存大小  
  14. S:进程状态。D表示不可中断的睡眠状态;R表示运行;S表示睡眠;T表示跟踪/停止;Z表示僵尸进程。  
  15. %CPU:上次更新到现在的CPU占用百分比 ;  
  16. %MEM:进程使用的物理内存百分比 ;  
  17. TIME+:进程使用的CPU时间总计,单位1/100秒;  
  18. COMMAND:命令名/命令行 

这些就是进程信息了,从这里可以看到哪些进程占用系统资源的概况。

其他命令

top当然是我们最常见的查看系统状况的命令。其他命令还有很多。vmstat,w,uptime ,iostat这些都是常用的命令。

综上

看懂这些具体参数以后,就知道自己的代码到底哪方面需要改进了,是优化内存消耗,还是优化你的代码逻辑,当然无脑堆机器也可以,只要你说服的了老板! 

 

责任编辑:庞桂玉 来源: Linux学习
相关推荐

2009-11-25 09:02:12

2020-10-29 08:28:42

Java NIO异步非阻塞

2022-03-18 15:41:29

原子化服务HarmonyOS鸿蒙

2011-06-12 18:30:07

投影机技巧

2017-04-25 12:07:51

AndroidWebViewjs

2020-09-14 11:30:26

HTTP3运维互联网

2020-05-21 19:46:19

区块链数字货币比特币

2020-11-10 09:01:52

DPDK网络监控

2021-11-08 18:37:45

MySQL解码测试

2020-11-06 08:54:43

Vue 3.0函数代码

2021-07-15 06:43:11

Bash调试脚本

2018-08-30 14:31:28

Linux磁盘LVM

2021-04-20 13:59:37

云计算

2024-08-30 08:50:00

2020-06-30 10:45:28

Web开发工具

2013-09-13 14:08:01

2020-06-29 07:42:20

边缘计算云计算技术

2017-05-18 11:11:20

Google谷歌开发者大会

2021-11-01 09:54:45

互联网安全协议IPSec网络协议

2020-06-11 08:04:12

WDMDWDMMWDM
点赞
收藏

51CTO技术栈公众号