點(diǎn)擊上方“IT那活兒”,關(guān)注后了解更多精彩內(nèi)容??!
背景說明
服務(wù)頻繁告警CPU 100%,CPU高后瞬時(shí)恢復(fù),導(dǎo)致數(shù)據(jù)庫與系統(tǒng)時(shí)間段內(nèi)hang住,以下對(duì)此問題進(jìn)行分析。
故障具體分析
1. 進(jìn)行檢查分析
1.1 正常情況下cpu使用
相關(guān)數(shù)據(jù)庫進(jìn)程單進(jìn)程占用cpu不高,總統(tǒng)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 數(shù)據(jù)庫alert時(shí)間段正常都為正常日志現(xiàn)象(為一些job執(zhí)行失敗錯(cuò)誤):
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高達(dá)100%使用率時(shí)候操作系統(tǒng)會(huì)報(bào)出以下錯(cuò)誤信息:
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]
此錯(cuò)誤為操作系統(tǒng)出現(xiàn)cpu死鎖bug現(xiàn)象,Cpu調(diào)度器調(diào)度一個(gè)驅(qū)動(dòng)程序來運(yùn)行,如果這個(gè)驅(qū)動(dòng)程序有問題并且沒有被檢測到,那么這個(gè)驅(qū)動(dòng)程序?qū)?huì)暫用cpu的很長時(shí)間。此時(shí),看門狗進(jìn)程會(huì)抓住(catch)這一點(diǎn)并且拋出一個(gè)軟死鎖(soft lockup)錯(cuò)誤。
軟死鎖會(huì)掛起cpu使你的系統(tǒng)不可用。lockup分為soft lockup和hard lockup。soft lockup是指內(nèi)核中有BUG導(dǎo)致在內(nèi)核模式下一直循環(huán)的時(shí)間超過10s(根據(jù)實(shí)現(xiàn)和配置有所不同),而其他進(jìn)程得不到運(yùn)行的機(jī)會(huì)。hard softlockup是指內(nèi)核已經(jīng)掛起。
注意soft lockup(內(nèi)核軟死鎖) 此bug不會(huì)讓系統(tǒng)徹底死機(jī),若干個(gè)進(jìn)程(或者kernel thread)被鎖死在了某個(gè)狀態(tài)(一般在內(nèi)核區(qū)域),多數(shù)情況下這個(gè)是由于內(nèi)核鎖的使用的問題。
2. 處理方法原因
內(nèi)核參數(shù)kernel.watchdog_thresh(/proc/sys/kernel/watchdog_thresh)系統(tǒng)默認(rèn)值為10。如果超過2*10秒會(huì)打印信息,注意:調(diào)整值時(shí)參數(shù)不能大于60。
調(diào)整該值可以延長watchdog等待時(shí)間,不能徹底解決問題,只能導(dǎo)致信息延遲打印。要解決此問題,還是要找到根本原因。
2.1 追加到配置文件中:
echo 30 > /proc/sys/kernel/watchdog_thresh
2.2 查看:
tail -1 /proc/sys/kernel/watchdog_thresh
30
2.3 臨時(shí)生效:
sysctl -w kernel.watchdog_thresh=30
2.4 修改內(nèi)核限制文件:
vi /etc/sysctl.conf
kernel.watchdog_thresh=30
3. 造成cpu死鎖的可能原因
3.1 服務(wù)器電源供電不足,導(dǎo)致CPU電壓不穩(wěn)導(dǎo)致CPU死鎖。
3.2 虛機(jī)所在的宿主機(jī)的CPU太忙或磁盤IO太高。
3.3 虛機(jī)的的CPU太忙或磁盤IO太高。
3.4 BIOS KVM開啟以后的相關(guān)bug,關(guān)閉KVM可解決,但關(guān)閉以后物理機(jī)不支持虛擬化。
3.5 VM網(wǎng)卡驅(qū)動(dòng)存在bug,處理高水位流量時(shí)存在bug導(dǎo)致CPU死鎖。
3.6 BIOS開啟了超頻,導(dǎo)致超頻時(shí)電壓不穩(wěn),容易出現(xiàn)CPU死鎖 。
3.7 Linux kernel存在bug。
3.8 KVM存在bug 。
3.9 clocksource tsc unstable on CentOS and cloud Linux with Hyper-V Virtualisation通過設(shè)置clocksource=jiffies可解決。
3.10 BIOS Intel C-State開啟導(dǎo)致,關(guān)閉可解決。
3.11 BIOS spread spectrum開啟導(dǎo)致
當(dāng)主板上的時(shí)鐘震蕩發(fā)生器工作時(shí),脈沖的尖峰會(huì)產(chǎn)生emi(電磁干擾)。spread spectrum(頻展)設(shè)定功能可以降低脈沖發(fā)生器所產(chǎn)生的電磁干擾,脈沖波的尖峰會(huì)衰減為較為平滑的曲線。
如果我們沒有遇到電磁干擾問題,建議將此項(xiàng)設(shè)定為disabled,這欄可以優(yōu)化系統(tǒng)的性能表現(xiàn)和穩(wěn)定性;
否則應(yīng)該將此項(xiàng)設(shè)定為enabled。如果對(duì)cpu進(jìn)行超頻,必須將此項(xiàng)禁用。因?yàn)榧词故俏⑿〉拿}沖值漂移也會(huì)導(dǎo)致超頻運(yùn)行的cpu鎖死。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129709.html
摘要:線程堆棧最擅長與分析如下類型問題系統(tǒng)無緣無故過高。性能瓶頸如無法充分利用等線程死鎖死循環(huán),餓死等。由于線程數(shù)量太多導(dǎo)致系統(tǒng)失敗如無法創(chuàng)建線程等。注意死鎖的兩個(gè)或多個(gè)線程是不消耗的,有的人認(rèn)為的使用率是線程死鎖導(dǎo)致的,這個(gè)說法是完全錯(cuò)誤的。 不知覺間工作已有一年了,閑下來的時(shí)候總會(huì)思考下,作為一名Java程序員,不能一直停留在開發(fā)業(yè)務(wù)使用框架上面。老話說得好,機(jī)會(huì)是留給有準(zhǔn)備的人的,因此...
摘要:死亡狀態(tài)有兩個(gè)原因會(huì)導(dǎo)致線程死亡方法正常退出而自然死亡。一個(gè)未捕獲的異常終止了方法而使線程猝死。注意,放入的線程不必?fù)?dān)心其結(jié)束,超過不活動(dòng),其會(huì)自動(dòng)被終止。線程間相互干擾描述了當(dāng)多個(gè)線程訪問共享數(shù)據(jù)時(shí)可能出現(xiàn)的錯(cuò)誤。 線程 進(jìn)程與線程的區(qū)別 線程是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體。一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。 線程的五大狀態(tài) 新建狀態(tài)(New):例如...
摘要:因?yàn)檫M(jìn)程退出之后將不再執(zhí)行事件循環(huán),所有只有那些沒有回調(diào)函數(shù)的代碼才會(huì)被執(zhí)行。此外,創(chuàng)建的回調(diào)函數(shù)具有隔離性,他們之間不會(huì)相互影響。我們來看的一個(gè)簡單例子,他創(chuàng)建了一個(gè)子進(jìn)程,第一個(gè)參數(shù)是一個(gè)命令,第二個(gè)參數(shù)是回調(diào)函數(shù),處理返回結(jié)果。 雖然node對(duì)操作系統(tǒng)做了很多抽象的工作,但是你還是可以直接和他交互,比如和系統(tǒng)中已經(jīng)存在的進(jìn)程進(jìn)行交互,創(chuàng)建工作子進(jìn)程。node是一個(gè)用于事件循環(huán)的線...
摘要:目標(biāo)畫布的左上角在目標(biāo)上軸的位置。允許對(duì)繪制的圖像進(jìn)行縮放。如果不說明,在繪制時(shí)圖片高度不會(huì)縮放。如果不說明,整個(gè)矩形從坐標(biāo)的和開始,到圖像的右下角結(jié)束。需要繪制到目標(biāo)上下文中的,源圖像的矩形選擇框的高度。 在上傳圖片進(jìn)行預(yù)覽時(shí),直接抓取原圖時(shí)由于原圖過大會(huì)影響性能,即對(duì)所上傳圖片進(jìn)行壓縮小圖展示; 思路: 利用 canvas 對(duì)原圖進(jìn)行壓縮重繪,抓取區(qū)域以中心為基點(diǎn)最大范圍繪制縮略圖...
閱讀 1356·2023-01-11 13:20
閱讀 1707·2023-01-11 13:20
閱讀 1215·2023-01-11 13:20
閱讀 1906·2023-01-11 13:20
閱讀 4165·2023-01-11 13:20
閱讀 2757·2023-01-11 13:20
閱讀 1402·2023-01-11 13:20
閱讀 3671·2023-01-11 13:20