资讯专栏INFORMATION COLUMN

服务器Cpu高分析小记

IT那活儿 / 755人阅读
服务器Cpu高分析小记

点击上方“IT那活儿”,关注后了解更多精彩内容!!

背景说明


服务频繁告警CPU 100%,CPU高后瞬时恢复,导致数据库与系统时间段内hang住,以下对此问题进行分析。


故障具体分析

1. 进行检查分析

1.1 正常情况下cpu使用

相关数据库进程单进程占用cpu不高,总统cpu不高:

top - 11:22:57 up 402 days, 9:55, 8 users, load average: 0.12, 0.13, 0.17

Tasks: 1205 total, 2 running, 1203 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.3 us, 0.2 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem : 98834632 total, 32530472 free, 16034276 used, 50269884 buff/cache

KiB Swap: 4194300 total, 4095716 free, 98584 used. 39917184 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND

3963 root      20   0 4875340 251816   4096 S   7.6  0.3   4730:44 ds_am

20543 oracle    20   0 35.674g 214680 207560 R   3.3  0.2   0:10.04 oracle_20543_ar

3334 oracle    -2   0 35.667g  17916  14752 S   1.6  0.0  81:11.44 ora_vktm_archdb

13357 grid      -2   0 1525768  16788  13784 S   1.6  0.0   8456:17 asm_vktm_+asm

10944 root      20   0   16012   1344    964 S   1.0  0.0   1:05.65 zabbix_agentd

12206 root      20   0  482680  70072  13484 S   1.0  0.1 399:42.68 titanagent

16362 grid      20   0 1438088  41508  15136 S   1.0  0.0   2893:10 oraagent.bin

25130 oracle    20   0  158812   3440   1560 R   1.0  0.0   0:00.20 top

3128 root      20   0  377392   9476   5736 S   0.7  0.0   1064:39 vmtoolsd

10885 grid      20   0 1990168  42280  11380 S   0.7  0.0   1352:54 ocssd.bin

3364 oracle    20   0 35.677g  66040  53104 S   0.3  0.1  29:04.60 ora_dia0_archdb

3509 oracle    20   0 35.667g  70196  66952 S   0.3  0.1   9:43.32 ora_mmnl_archdb

4902 oracle    20   0 35.667g  17920  14812 S   0.3  0.0   0:06.05 ora_tt01_archdb

5181 oracle    20   0 35.667g  18000  14888 S   0.3  0.0   0:20.32 ora_tt02_archdb

5558 grid      20   0 1839656  51356  15452 S   0.3  0.1   1689:32 ohasd.bin

10810 grid      20   0  913920  21860  11032 S   0.3  0.0   1456:31 cssdagent

1 root      20   0  192516   5152   2308 S   0.0  0.0 222:20.47 systemd

2 root      20   0       0      0      0 S   0.0  0.0   1:24.29 kthreadd

1.2 数据库alert时间段正常都为正常日志现象(为一些job执行失败错误):

2021-11-25T00:54:45.936741+08:00

Errors in file /opt/app/oracle/diag/rdbms/archdb/archdb/trace/archdb_j000_16398.trc:

ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_101941"

ORA-20001: Statistics Advisor: Invalid task name for the current user

ORA-06512: at "SYS.DBMS_STATS", line 47207

ORA-06512: at "SYS.DBMS_STATS_ADVISOR", line 882

ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 20059

ORA-06512: at "SYS.DBMS_STATS_INTERNAL", line 22201

ORA-06512: at "SYS.DBMS_STATS", line 47197

2021-11-25T01:00:13.261966+08:00

TABLE SYS.WRP$_REPORTS: ADDED INTERVAL PARTITION SYS_P33783 (4347) VALUES LESS THAN (TO_DATE( 2021-11-26 01:00:00, SYYYY-MM-DD HH24:MI:SS, NLS_CALENDAR=GREGORIAN))

TABLE SYS.WRP$_REPORTS_DETAILS: ADDED INTERVAL PARTITION SYS_P33784 (4347) VALUES LESS THAN (TO_DATE( 2021-11-26 01:00:00, SYYYY-MM-DD HH24:MI:SS, NLS_CALENDAR=GREGORIAN))

1.3 在cpu高达100%使用率时候操作系统会报出以下错误信息:

Message from syslogd@nsf-archdb-2-234 at Nov 26 17:53:22 ...

kernel:NMI watchdog: BUG: soft lockup - CPU#7 stuck for 33s! [master:2495]

Message from syslogd@nsf-archdb-2-234 at Nov 26 17:53:22 ...

kernel:NMI watchdog: BUG: soft lockup - CPU#10 stuck for 24s! [ora_lg01_archdb:7165]

Message from syslogd@nsf-archdb-2-234 at Nov 26 17:53:22 ...

kernel:NMI watchdog: BUG: soft lockup - CPU#6 stuck for 22s! [oracle_1689_arc:1689]

1.4 内核软死锁错误信息分析:

此错误为操作系统出现cpu死锁bug现象,Cpu调度器调度一个驱动程序来运行,如果这个驱动程序有问题并且没有被检测到,那么这个驱动程序将会暂用cpu的很长时间。此时,看门狗进程会抓住(catch)这一点并且抛出一个软死锁(soft lockup)错误。

软死锁会挂起cpu使你的系统不可用。lockup分为soft lockup和hard lockup。soft lockup是指内核中有BUG导致在内核模式下一直循环的时间超过10s(根据实现和配置有所不同),而其他进程得不到运行的机会。hard softlockup是指内核已经挂起。

注意soft lockup(内核软死锁) 此bug不会让系统彻底死机,若干个进程(或者kernel thread)被锁死在了某个状态(一般在内核区域),多数情况下这个是由于内核锁的使用的问题。

2. 处理方法原因

内核参数kernel.watchdog_thresh(/proc/sys/kernel/watchdog_thresh)系统默认值为10。如果超过2*10秒会打印信息,注意:调整值时参数不能大于60。

调整该值可以延长watchdog等待时间,不能彻底解决问题,只能导致信息延迟打印。要解决此问题,还是要找到根本原因。

2.1 追加到配置文件中:

echo 30 > /proc/sys/kernel/watchdog_thresh

2.2 查看:

tail -1 /proc/sys/kernel/watchdog_thresh30

2.3 临时生效:

sysctl -w kernel.watchdog_thresh=30

2.4 修改内核限制文件:

vi /etc/sysctl.conf

kernel.watchdog_thresh=30

3. 造成cpu死锁的可能原因

3.1 服务器电源供电不足,导致CPU电压不稳导致CPU死锁。

3.2 虚机所在的宿主机的CPU太忙或磁盘IO太高。

3.3 虚机的的CPU太忙或磁盘IO太高。

3.4 BIOS KVM开启以后的相关bug,关闭KVM可解决,但关闭以后物理机不支持虚拟化。

3.5 VM网卡驱动存在bug,处理高水位流量时存在bug导致CPU死锁。

3.6 BIOS开启了超频,导致超频时电压不稳,容易出现CPU死锁 。

3.7 Linux kernel存在bug。

3.8 KVM存在bug 。

3.9 clocksource tsc unstable on CentOS and cloud Linux with Hyper-V Virtualisation通过设置clocksource=jiffies可解决。

3.10 BIOS Intel C-State开启导致,关闭可解决。

3.11 BIOS spread spectrum开启导致

  • 当主板上的时钟震荡发生器工作时,脉冲的尖峰会产生emi(电磁干扰)。spread spectrum(频展)设定功能可以降低脉冲发生器所产生的电磁干扰,脉冲波的尖峰会衰减为较为平滑的曲线。

  • 如果我们没有遇到电磁干扰问题,建议将此项设定为disabled,这栏可以优化系统的性能表现和稳定性;

  • 否则应该将此项设定为enabled。如果对cpu进行超频,必须将此项禁用。因为即使是微小的脉冲值漂移也会导致超频运行的cpu锁死。

本 文 原 创 来 源:IT那活儿微信公众号(上海新炬王翦团队)


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129709.html

相关文章

  • Java线程堆栈分

    摘要:线程堆栈最擅长与分析如下类型问题系统无缘无故过高。性能瓶颈如无法充分利用等线程死锁死循环,饿死等。由于线程数量太多导致系统失败如无法创建线程等。注意死锁的两个或多个线程是不消耗的,有的人认为的使用率是线程死锁导致的,这个说法是完全错误的。 不知觉间工作已有一年了,闲下来的时候总会思考下,作为一名Java程序员,不能一直停留在开发业务使用框架上面。老话说得好,机会是留给有准备的人的,因此...

    jerry 评论0 收藏0
  • 多线程小记

    摘要:死亡状态有两个原因会导致线程死亡方法正常退出而自然死亡。一个未捕获的异常终止了方法而使线程猝死。注意,放入的线程不必担心其结束,超过不活动,其会自动被终止。线程间相互干扰描述了当多个线程访问共享数据时可能出现的错误。 线程 进程与线程的区别 线程是指进程内的一个执行单元,也是进程内的可调度实体。一个程序至少有一个进程,一个进程至少有一个线程。 线程的五大状态 新建状态(New):例如...

    suxier 评论0 收藏0
  • nodejs之process进程小记

    摘要:因为进程退出之后将不再执行事件循环,所有只有那些没有回调函数的代码才会被执行。此外,创建的回调函数具有隔离性,他们之间不会相互影响。我们来看的一个简单例子,他创建了一个子进程,第一个参数是一个命令,第二个参数是回调函数,处理返回结果。 虽然node对操作系统做了很多抽象的工作,但是你还是可以直接和他交互,比如和系统中已经存在的进程进行交互,创建工作子进程。node是一个用于事件循环的线...

    Binguner 评论0 收藏0
  • 图片上传缩略图预览

    摘要:目标画布的左上角在目标上轴的位置。允许对绘制的图像进行缩放。如果不说明,在绘制时图片高度不会缩放。如果不说明,整个矩形从坐标的和开始,到图像的右下角结束。需要绘制到目标上下文中的,源图像的矩形选择框的高度。 在上传图片进行预览时,直接抓取原图时由于原图过大会影响性能,即对所上传图片进行压缩小图展示; 思路: 利用 canvas 对原图进行压缩重绘,抓取区域以中心为基点最大范围绘制缩略图...

    Pocher 评论0 收藏0
  • h5唤醒APP小记

    摘要:比如联系方式银行卡信用卡信息支付宝各大商城的账户密码照片甚至行程与位置信息等。针对这个问题,苹果使用了名为沙盒的机制应用只能访问它声明可能访问的资源。 h5唤醒APP功能 最近遇到一个需求,需要在从APP分享出去的H5页面中,带有一个立即打开的按钮,如果本地安装了app,那么就直接唤起本地的app,如果没有安装,则跳转到下载。这是一个很正常的推广和导流量的策略。前端小白从来没有做过这个...

    KnewOne 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<