后端们最怕的事件之一就是服务器的负载忽然飙升,这可能又意味着一个个炫目Call马上要打过去了。碰到这种状况怎么办,大家第一反馈肯定是登陆到服务器上,先敲一个top命令看看Load Average吧。明天这篇文章和大家说说怎么看这个“Load Average”。
Load Average
很多人说Load Average这一个指标就能阐明零碎负载高了,这句话是对的。那么具体是哪里压力大了呢?这三个数值是怎么计算出来的呢?可能很多人一下子都说不上来。
先来说说定义吧:在一段时间内,CPU正在解决以及期待CPU解决的过程数之和。三个数字别离代表了1分钟,5分钟,15分钟的统计值。
所以,这个数值确实能反馈服务器的负载状况。然而,这个数值高了也并不能间接代表这台机器的性能有问题。可能是因为正在进行CPU密集型的计算,也有可能是因为I/O问题导致运行队列堵了。所以,当咱们看到这个数值飙升的时候,还得具体问题具体分析。间接降级机器是简略粗犷,然而治标不治本。
top命令一行一行看
top命令输入了很多参数,真正的服务器负载状况咱们要综合其余参数一起看。
top - 20:41:08 up 18 days, 5:24, 2 users, load average: 0.04, 0.03, 0.05top:以后工夫up:机器运行了多少工夫users:以后有多少用户load average:别离是过来1分钟,5分钟,15分钟的负载
具体须要关注的果然还是load average这三个数值。大家都晓得,一个CPU在一个工夫片外面只能运行一个过程,CPU核数的多少间接影响到这台机器在同工夫能运行的过程数。所以一般来说Load Average的数值别超过这台机器的总核数,就根本没啥问题。
Tasks: 216 total, 1 running, 215 sleeping, 0 stopped, 0 zombieTasks:以后有多少过程running:正在运行的过程sleeping:正在休眠的过程stopped:进行的过程zombie:僵尸过程
running越多,服务器天然压力越大。
%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 stus: 用户过程占CPU的使用率sy: 零碎过程占CPU的使用率ni: 用户过程空间扭转过优先级id: 闲暇CPU占用率wa: 期待输入输出的CPU工夫百分比hi: 硬件的中断请求si: 软件的中断请求st: steal time
这一行代表了CPU的应用状况,us长期过高,表明用户过程占用了大量的CPU工夫。us+sy如果长期超过80或者90,可能就代表了CPU性能有余,须要加CPU了。
KiB Mem : 65810456 total, 30324416 free, 9862224 used, 25623816 buff/cacheKiB Swap: 7999484 total, 7999484 free, 0 used. 54807988 avail Memtotal:内存总量free:闲暇内存used:应用的buffer/cache:写缓存/读缓存
第四第五行别离是内存信息和swap信息。所有程序的运行都是在内存中进行的,所以内存的性能对与服务器来说十分重要。不过当内存的free变少的时候,其实咱们并不需要太紧张。真正须要看的是Swap中的used信息。Swap分区是由硬盘提供的替换区,当物理内存不够用的时候,操作系统才会把临时不必的数据放到Swap中。所以当这个数值变高的时候,阐明内存是真的不够用了。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 19868 root 20 0 19.733g 369980 15180 S 0.7 0.6 129:53.91 java 19682 root 20 0 19.859g 5.766g 22252 S 0.3 9.2 139:42.81 java 54625 100 20 0 50868 33512 4104 S 0.3 0.1 0:04.68 fluentd PID:过程idUSER:过程所有者PR:优先级。数值越大优先级越高NI:nice值,负值示意高优先级,正值示意低优先级VIRT:过程应用的虚拟内存总量SWAP:过程应用的虚拟内存中被换出的大小RES:过程应用的、未被换出的物理内存大小SHR:共享内存大小SHR:共享内存大小S:过程状态。D示意不可中断的睡眠状态;R示意运行;S示意睡眠;T示意跟踪/进行;Z示意僵尸过程。%CPU:上次更新到当初的CPU占用百分比 ;%MEM:过程应用的物理内存百分比 ;TIME+:过程应用的CPU工夫总计,单位1/100秒;COMMAND:命令名/命令行
这些就是过程信息了,从这里能够看到哪些过程占用系统资源的详情。
其余命令
top当然是咱们最常见的查看零碎情况的命令。其余命令还有很多。vmstat,w,uptime ,iostat这些都是罕用的命令。
综上
看懂这些具体参数当前,就晓得本人的代码到底哪方面须要改良了,是优化内存耗费,还是优化你的代码逻辑,当然无脑堆机器也能够,只有你压服的了老板!