点击上方“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]
此错误为操作系统出现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_thresh
30
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锁死。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129709.html
摘要:线程堆栈最擅长与分析如下类型问题系统无缘无故过高。性能瓶颈如无法充分利用等线程死锁死循环,饿死等。由于线程数量太多导致系统失败如无法创建线程等。注意死锁的两个或多个线程是不消耗的,有的人认为的使用率是线程死锁导致的,这个说法是完全错误的。 不知觉间工作已有一年了,闲下来的时候总会思考下,作为一名Java程序员,不能一直停留在开发业务使用框架上面。老话说得好,机会是留给有准备的人的,因此...
摘要:因为进程退出之后将不再执行事件循环,所有只有那些没有回调函数的代码才会被执行。此外,创建的回调函数具有隔离性,他们之间不会相互影响。我们来看的一个简单例子,他创建了一个子进程,第一个参数是一个命令,第二个参数是回调函数,处理返回结果。 虽然node对操作系统做了很多抽象的工作,但是你还是可以直接和他交互,比如和系统中已经存在的进程进行交互,创建工作子进程。node是一个用于事件循环的线...
阅读 1249·2023-01-11 13:20
阅读 1557·2023-01-11 13:20
阅读 1011·2023-01-11 13:20
阅读 1680·2023-01-11 13:20
阅读 3971·2023-01-11 13:20
阅读 2519·2023-01-11 13:20
阅读 1310·2023-01-11 13:20
阅读 3486·2023-01-11 13:20