操作步骤:

1、ps ux 哪些进程cpu占用率过高

2、ps -Lp 15047  cu 查看该进程下的哪些线程占用率过高

3、将线程id 转换为16进制

https://tool.lu/hexconvert/

4、jstack pid 查找到对应的threadid, 再反查代码

知识点:

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的飙升,一方面可能和full gc的次数增大有关,一方面可能和死循环有关系

数据库系统load高的一般原因
    1 业务并发调用全表扫描/带有order by 排序的SQL语句.
    2 SQL语句没有合适索引/执行计划出错/update/delete where扫描全表,阻塞其他访问相同表的sql执行.
    3 存在秒杀类似的业务比如聚划算10点开团或者双十一秒杀,瞬时海量访问给数据库带来冲击。
    4 数据库做逻辑备份(需要全表扫描)或者多实例的压缩备份(压缩时需要大量的cpu计算,会导致系统服务器load飙高)
    5 磁盘写入方式改变 比如有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之后,剩下的比较好解决了。结合第一部分中的几条原因
        a 选择合适的索引
        b 调整sql 语句 比如对应order by 分页采用延迟关联
        c 业务层面增加缓存,减少对数据库的直接访问等
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是平均请求队列的长度。毫无疑问,队列长度越短越好。

cpu负载过高问题处理相关推荐

  1. 利用 Arthas 精准定位 Java 应用 CPU 负载过高问题

    Arthas 官方社区正在举行征文活动,参加即有奖品拿哦~点击投稿 作者 | 张云翔 最近我们线上有个应用服务器有点上头,CPU总能跑到99%,我寻思着它流量也不大啊,为啥能把自己整这么累?于是我登上 ...

  2. 宝塔php的opcache模块未载入,宝塔面板CPU负载过高使用opcache扩展的解决方法

    宝塔Linux面板出现CPU负载过高怎么办?使用PHP opcache扩展加速PHP脚本,新手站长网来说说宝塔CPU负载高使用PHP扩展opcache的设置及解决方法: 宝塔面板CPU负载过高的解决方 ...

  3. JVM性能优化之CPU负载过高

    本文来说下JVM性能优化之CPU负载过高的问题 文章目录 概述 程序测试 问题定位 本文小结 概述 一般性结论:一般来说,CPU占用高不高的问题,不是给定一个数值,例如90%以上就算高,以下就算正常, ...

  4. linux 排查cpu负载过高原因

    CPU负载查看方法: 使用vmstat查看系统维度的CPU负载 使用top查看进程维度的CPU负载 一.测试工具 1.使用 vmstat 查看系统纬度的 CPU 负载: 可以通过 vmstat 从系统 ...

  5. cpu负载过高产生的原因及排查

    之前面试被问到,造成CPU load过高的原因有哪些?如何快速排查其原因? 开一贴,总结该相关知识 什么是cpu load 值 top命令中显示的load average即为最近1分钟.5分钟和15分 ...

  6. CPU负载过高的原因

    一 系统中创建了大量的线程,这些线程并发运行,而且工作负载都很重,过多的线程同时运行就会导致CPU负载过高 二 JVM频繁的Full GC,非常耗费CPU资源 2.1 频繁Full GC的原因 内存分 ...

  7. 线上服务器CPU负载过高的问题解决过程

    线上服务器CPU负载过高的问题解决过程 一.找到CPU占用过高进程 执行top命令,发现PID为12443的Java进程占用CPU高达350%,出现故障. 二.定位具体线程或代码 找到该进程后,接下来 ...

  8. 一次运维事故调查报告--cpu负载过高

    题记:只要时间足够,在开发期间偷得懒,运维期间总会在某个恰当的时机有大的坑等着,不是坑到自己就是坑到后来人 : 九月份的某个深夜,被电话吵醒,运维说线上某个版本的两个服务器由于系统资源耗尽(主要是系统 ...

  9. cpu负载很高而使用率很低的缘故

    cpu负载很高而使用率很低的缘故 可以用#hdparm  -tT   /dev/sda1       来测试 Timing cached reads:   4624 MB in  2.00 secon ...

  10. 【JVM】十、CPU负载过高分析

    原生分析方式 1.使用 top 命令查看线程占用 cup 比率 [tomcat@localhost ~]$ top Tasks: 189 total, 1 running, 188 sleeping, ...

最新文章

  1. 【图论专题】Floyd算法及其扩展应用
  2. 2019与下一个十年:我们将要放弃的和将要拥抱的
  3. 皮一皮:这真是兄弟能做的事???
  4. 给刚入职开发人员的几句心里话
  5. Jupyter Notebook 常用的快捷键
  6. 操作系统:Windows 11 来了 !无需安装即可体验 !
  7. 计算机网络整体框架理解与把握(持续更新)
  8. css怎么控制两个字母,css英文字母数字自动换行且不断词方法
  9. php的功能和特点,php的特点有哪些
  10. 开源正在吞噬软件业?看开源的7大理念
  11. linux 写地址 hex,你怎么理解Hex文件? (扩展地址记录)
  12. 学python有前途吗-入门学习Python编程有前途吗?
  13. 一直都说字节跳动有点难,这次体会了,而且被怼了~
  14. Atmel和SIGFOX在远程物联网连接领域开展合作
  15. 民宿类APP开发功能
  16. [技术分享]-Servlet/tomcat/spring mvc之间关系
  17. 【Pytorch基础教程34】EGES召回模型
  18. 留言板(php+数据库)
  19. 发布3天获推荐10w+,视频号内容出现新玩法?
  20. error2448C语言,VS 报错 error C2448: “main”: 函数样式初始值设定项类似函数定义 问题的解决方法...

热门文章

  1. python亿级mysql数据库导出_Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法...
  2. tnsnames.ora配置未生效_nginx高可用配置未生效问题跟踪
  3. Docker平台的基本使用方法
  4. 使Jackson和Mybatis支持JSR310标准
  5. 关于Mysql的错误:No query specified
  6. JavaWeb 后端 三 之 Response Request 学习笔记
  7. 学习jQuery formValidator
  8. Apache工作模式详解
  9. (转载)SQL Server2008附加数据库之后显示为只读时解决方法
  10. 字符编解码的故事–ASCII,ANSI,Unicode,Utf-8区别