CPU load过高问题排查

3 篇文章 0 订阅
2 篇文章 0 订阅

load average的概念

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

系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:

  • 它没有在等待I/O操作的结果
  • 它没有主动进入等待状态(也就是没有调用’wait’)
  • 没有被停止(例如:等待终止)

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

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

一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。

CPU使用率高并不总是意味着CPU工作繁忙,它有可能是正在等待其他子系统。在进行性能分析时,将所有子系统当做一个整体来看是非常重要的,因为在子系统中可能会出现瀑布效应。衡量CPU 系统负载的指标是load,load 就是对计算机系统能够承担的多少负载的度量,简单的说是进程队列的长度。简单的例子比如食堂有五个窗口,当有小于五个学生来打饭,五个窗口都能及时处理,但是当学生个数超过5个,必然会出现等待的学生。请求大于当前的处理能力,会出现等待,引起load升高。
Load Average 就是一段时间(1min,5min,15min)内平均Load。平均负载的最佳值是1,这意味着每个进程都可以在一个完整的CPU 周期内完成。

cpu load高的排查思路

1. 首先排查哪些进程cpu占用率高。 通过命令 ps ux

在这里插入图片描述

2. 查看对应java进程的每个线程的CPU占用率。通过命令:ps -Lp 15047 cu

在这里插入图片描述

3. 追踪线程内部,查看load过高原因。通过命令:jstack 15047。

或者打印线程 jstack pidof java > stack.out

查找到对应的threadid, 再反查代码。

一般经验

cpu load的飙升,一方面可能和full gc的次数增大有关,一方面可能和死循环有关系

数据库系统load高的一般原因

  1. 业务并发调用全表扫描/带有order by 排序的SQL语句。

  2. SQL语句没有合适索引/执行计划出错/update/delete where扫描全表,阻塞其他访问相同表的sql执行.SQL语句没有合适索引/执行计划出错/update/delete
    where扫描全表,阻塞其他访问相同表的sql执行。

  3. 存在秒杀类似的业务比如聚划算10点开团或者双十一秒杀,瞬时海量访问给数据库带来冲击。存在秒杀类似的业务比如聚划算10点开团或者双十一秒杀,瞬时海量访问给数据库带来冲击。

  4. 数据库做逻辑备份(需要全表扫描)或者多实例的压缩备份(压缩时需要大量的cpu计算,会导致系统服务器load飙高)数据库做逻辑备份(需要全表扫描)或者多实例的压缩备份(压缩时需要大量的cpu计算,会导致系统服务器load飙高)。

  5. 磁盘写入方式改变 比如有writeback 变为 write through磁盘写入方式改变 比如有writeback 变为 write through。

    RAID卡都有写cache(Battery Backed Write Cache),写cache对IO性能的提升非常明显,因为掉电会丢失数据,所以必须由电池提供支持。
    电池会定期充放电,一般为90天左右,当发现电量低于某个阀值时,会将写cache策略从writeback置为writethrough,相当于写cache会失效,这时如果系统有大量的IO操作,可能会明显感觉到IO响应速度变慢,cpu
    队列堆积系统load 飙高。

判别和处理load高问题

一般根据cpu数量去判断,也就是Load平均要小于CPU的数量,负载的正常值在不同的系统中有着很大的差别。在单核处理器的工作站中,1或2都是可以接受的。多核处理器的服务器(比如24核)上,load 会到达20 ,甚至更高。

a) 数据库层面

  1. top -u mysql -c 检查当前占用cpu资源最多的进程命令。-c 是为了显示出进程对应的执行命令语句,方便查看是什么操作导致系统load飙高。
  2. 根据不同的情况获取pid 或者MySQL的端口号
  3. 如果是MySQL 数据库服务导致laod 飙高,则可以使用如下命令
    show processlist;
    SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND <> ‘sleep’ AND TIME>100;

    orzdba 工具检查逻辑读/thread active的值。用法orzdba --help
    orztop 工具检查当前正在执行的慢sql,用法orztop -P $port
  4. 获取异常的sql之后,剩下的比较好解决了。结合第一部分中的几条原因
    1. 选择合适的索引
    2. 调整sql 语句 比如对应order by 分页采用延迟关联
    3. 业务层面增加缓存,减少对数据库的直接访问等业务层面增加缓存,减少对数据库的直接访问等

b) OS 系统层面 检查系统IO

使用iostat 命令查看r/s(读请求),w/s(写请求),avgrq-sz(平均请求大小),await(IO等待), svctm(IO响应时间)

r/s ,w/s是每秒读/写请求的次数。

util是设备的利用率。如果它接近100%,通常说明设备能力趋于饱和(并不绝对,比如设备有写缓存)。有时候可能会出现大于100%的情况,这多半是计算时四舍五入引起的。
svctm是平均每次请求的服务时间。这里有一个公式:(r/s+w/s)*(svctm/1000)=util。举例子:如果util达到100%,那么此时 svctm=1000/(r/s+w/s),假设IOPS是1000,则svctm大概在1毫秒左右,如果长时间大于这个数值,说明系统出了问题。
await是平均每次请求的等待时间。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
avgqu-sz是平均请求队列的长度。毫无疑问,队列长度越短越好。

参考资料

http://blog.csdn.net/u011183653/article/details/19489603
http://blog.itpub.net/22664653/viewspace-1262635/
流年素心 http://www.cnblogs.com/lddbupt/

站在巨人的肩膀上

本文转载的网络地址
https://www.cnblogs.com/lddbupt/p/5779655.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: autosar架构软件CPU load过高是常见的问题之一,它可能导致设备性能受损,系统崩溃,甚至是安全性问题。快速排查原因可以通过以下步骤: 1. 确认CPU load过高的现象发生的间和条件,包括何,何地,何种环境。 2. 关注程序中的所有资源占用,包括主存,中间层,接口等,以及系统外部影响,如网络通信,间表,CRC校验等等。 3. 检查CPU和核心电路等硬件是否存在故障或者无法正常工作的情况。 4. 采用基于间的排查,通过记录事件的间和相关的状态信息来追溯可能引起CPU load高的事件。 5. 使用调试软件进行排查,跟踪并分析对象和系统的运行,以定位可能问题源并解决它们。同,通过日志记录,分析产生CPU load高的原因和发生事件的位置。 总之,排查CPU load过高问题需要有系统的思路和方法,通过分析硬件和软件的影响,以及使用高效的调试软件,来定位问题并解决它们,以确保设备的性能和安全性。 ### 回答2: 当autosar架构软件的CPU负载过高,需要进行以下步骤来快速排查原因。 首先,要使用性能分析工具来监控CPU使用率和系统负载。此类工具可突出显示CPU间、热点和锁定问题,并提供CPU飙升或缺陷的警报。 其次,检查系统中的可用内存和使用的内存量。如有必要,可以通过增加内存或调整内存分配来减少CPU开销。 第三,检查系统中运行的进程和线程。通过检查这些进程和线程,可以确定是否存在紧急的CPU使用情况或死锁情况。 最后,如果以上方法都没有解决问题,可以使用追踪和调试工具进行进一步的调试。追踪工具可以捕捉CPU的使用情况,并记录系统中发生的事件和活动。调试工具可以确定哪些函数或线程在导致CPU使用率。 总之,要快速排查autosar架构软件的CPU负载过高原因,需要使用性能分析、内存、进程/线程和调试工具来确定问题的根本原因。 ### 回答3: Autosar架构软件是一种高度复杂的软件,在使用中可能出现CPU负载过高问题。对于这种情况,我们可以从以下几个方面来进行快速排查。 1、通过软件调试工具查看代码是否存在死循环或者一些不必要的空循环等操作,这些都可能导致CPU过高。 2、可以通过系统监视器对CPU的利用率进行监控,这样可以了解CPU是否存在一个或多个线程的处理量过高导致问题。 3、检查是否存在大量的IO操作,如读写文件或网络通信等,这些操作占用CPU间,导致CPU过高。 4、检查是否存在内存泄漏或者内存过大的情况,如果存在这样的情况,导致CPU负载过高。 5、查看是否有高频中断的情况,这种情况一般是因为外设设备在短间内向CPU发送了大量的中断请求,需要检查外设设备是否正常。 总之,对于Autosar架构软件的CPU负载过高问题,我们可以从多个角度去查找原因,只要找到了问题,就可以很快地进行解决。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值