JVM-05-02--系统性能排查

一、什么是load average

top命令中显示的load average,表示最近1分钟、5分钟和15分钟的系统平均负载

在这里插入图片描述

1.1 load average如何计算而来

1、在Linux中,进程分为三种状态,一种是阻塞的进程blocked process,一种是可运行的进程runnable process,另外就是正在运行的进程running process。

2、进程可运行状态时,它处在一个运行队列run queue中,与其他可运行进程争夺CPU时间。 系统的load是指正在运行和准备好运行的进程的总数。比如现在系统有2个正在运行的进程,3个可运行进程,那么系统的load就是5。

3、load average就是一定时间内的load数量。如15分钟内load average=5/15。

1.2 影响系统负载高的因素有哪些

Load高代表需要运行的进程累计过多,影响因素有2个:

1、队列中的任务耗cpu(如加密/解密、序列化/反序列化、当锁争用激烈时导致线程上下文频繁切换、死循环)

2、队列中的任务耗IO(如网络IO、磁盘IO较多或较慢)

换句话说:系统负载,最终由CPU负载、IO负载决定

一个面试题:单核cpu时,IO处理时cpu空闲还是不空闲?
答案:
场景一:IO处理如果不需要cpu参与(如DMA方式处理数据),此时cpu是空闲的,即此时cpu可以处理其他任务;
场景二:IO处理时如果需要cpu参与时,CPU不空闲;
场景三:IO导致线程阻塞时,由于线程不在运行状态,所以cpu是空闲的

1.3 什么样的系统负载是正常的?

1、把系统负载除以总的核心数,只要每个核心的负载不超过1.0,就表明系统负载正常。(即 n核cpu时,只要load<n,就认为系统负载是正常的)

2、理想状态下,都希望负载load值小于 1.00 ,当然不排除部分峰值会超过 1.00,但长此以往保持这 个状态,就说明会有问题。(即高峰时偶尔超过1没事,经常超过1就需要注意了)

3、负载为1.00 说明系统已经没有剩余的资源了,生产环境中,系统负载应保持在0.7以下。

1.3.1 系统负载是否正常分析举例

一个4核的cpu的系统,通过apm工具监控到它的系统负载图如下:

在这里插入图片描述

1、首先观察load_15m和load_5m,load基本保持在3-5之间,说明系统中长期负载保持在一个较高的量级(load average/4约等于1)。

2、再观察load_1m可以看出,波动很大,并且很多时间段内远大于cpu核心数,很可能是一个拥塞的开始,需要分析处理。

二、load高并且cpu低是什么原因

CPU负载不高,但I/O负载较高:可进一步定位是磁盘I/O还是网络I/O导致。

如何定位是哪种,详细参考:https://segmentfault.com/a/1190000025167113

三、java应用程序–load高并且cpu高是什么原因

java应用程序中,常见的导致cpu高的原因有:

1、while的无限循环
无限循环将调用CPU寄存器进行计数,此操作将占用CPU资源。
那么,如果线程始终处于无限循环状态,CPU是否会切换线程?–》除非操作系统时间片到期,否则无限循环不会放弃占用的CPU资源,并且无限循环将继续向系统请求时间片,直到系统没有空闲时间来执行任何其他操作。

2、频繁的GC
GC用于JVM垃圾收集,它需要计算内存和调用寄存器,因此,频繁的GC必须占用CPU资源。

3、线程上下文切换
有许多已启动的线程,这些线程的状态在Blocked(锁定等待,IO等待等)和Running之间频繁发生变化。【当锁争用激烈时,这种情况很容易发生】
4、序列化和反序列化
5、加密和解密

抓住2个点:频繁切换或大量计算,或导致cpu使用率高

注意点:

1、具有大量线程的应用程序,CPU使用率一定高吗?
答案:不一定

因为如果线程很多,但处于Runnable和Running状态的线程数不多,则CPU使用率不一定很高。

2、对于CPU占用率高的应用程序,线程数是否一定较大?
答案:不一定。

高CPU使用率的关键因素是计算密集型操作。如果一个线程中有大量计算,则CPU使用率也可能很高。

3、处于BLOCKED状态的线程是否会导致CPU占用率飙升?
答案:不一定。

CPU使用率的飙升更多是由于上下文切换或过多的可运行状态线程,处于阻塞状态的线程不一定会导致CPU使用率上升。

四、全面的系统性能排查

在这里插入图片描述

详细参考:https://segmentfault.com/a/1190000025167113

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值