點擊上方“IT那活兒”,關注后了解更多精彩內(nèi)容??!
背景說明
服務頻繁告警CPU 100%,CPU高后瞬時恢復,導致數(shù)據(jù)庫與系統(tǒng)時間段內(nèi)hang住,以下對此問題進行分析。
故障具體分析
1. 進行檢查分析
1.1 正常情況下cpu使用
相關數(shù)據(jù)庫進程單進程占用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時間段正常都為正常日志現(xiàn)象(為一些job執(zhí)行失敗錯誤):
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%使用率時候操作系統(tǒng)會報出以下錯誤信息:
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]
此錯誤為操作系統(tǒng)出現(xiàn)cpu死鎖bug現(xiàn)象,Cpu調(diào)度器調(diào)度一個驅動程序來運行,如果這個驅動程序有問題并且沒有被檢測到,那么這個驅動程序將會暫用cpu的很長時間。此時,看門狗進程會抓?。╟atch)這一點并且拋出一個軟死鎖(soft lockup)錯誤。
軟死鎖會掛起cpu使你的系統(tǒng)不可用。lockup分為soft lockup和hard lockup。soft lockup是指內(nèi)核中有BUG導致在內(nèi)核模式下一直循環(huán)的時間超過10s(根據(jù)實現(xiàn)和配置有所不同),而其他進程得不到運行的機會。hard softlockup是指內(nèi)核已經(jīng)掛起。
注意soft lockup(內(nèi)核軟死鎖) 此bug不會讓系統(tǒng)徹底死機,若干個進程(或者kernel thread)被鎖死在了某個狀態(tài)(一般在內(nèi)核區(qū)域),多數(shù)情況下這個是由于內(nèi)核鎖的使用的問題。
2. 處理方法原因
內(nèi)核參數(shù)kernel.watchdog_thresh(/proc/sys/kernel/watchdog_thresh)系統(tǒng)默認值為10。如果超過2*10秒會打印信息,注意:調(diào)整值時參數(shù)不能大于60。
調(diào)整該值可以延長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 修改內(nèi)核限制文件:
vi /etc/sysctl.conf
kernel.watchdog_thresh=30
3. 造成cpu死鎖的可能原因
3.1 服務器電源供電不足,導致CPU電壓不穩(wěn)導致CPU死鎖。
3.2 虛機所在的宿主機的CPU太忙或磁盤IO太高。
3.3 虛機的的CPU太忙或磁盤IO太高。
3.4 BIOS KVM開啟以后的相關bug,關閉KVM可解決,但關閉以后物理機不支持虛擬化。
3.5 VM網(wǎng)卡驅動存在bug,處理高水位流量時存在bug導致CPU死鎖。
3.6 BIOS開啟了超頻,導致超頻時電壓不穩(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通過設置clocksource=jiffies可解決。
3.10 BIOS Intel C-State開啟導致,關閉可解決。
3.11 BIOS spread spectrum開啟導致
當主板上的時鐘震蕩發(fā)生器工作時,脈沖的尖峰會產(chǎn)生emi(電磁干擾)。spread spectrum(頻展)設定功能可以降低脈沖發(fā)生器所產(chǎn)生的電磁干擾,脈沖波的尖峰會衰減為較為平滑的曲線。
如果我們沒有遇到電磁干擾問題,建議將此項設定為disabled,這欄可以優(yōu)化系統(tǒng)的性能表現(xiàn)和穩(wěn)定性;
否則應該將此項設定為enabled。如果對cpu進行超頻,必須將此項禁用。因為即使是微小的脈沖值漂移也會導致超頻運行的cpu鎖死。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/129709.html
摘要:線程堆棧最擅長與分析如下類型問題系統(tǒng)無緣無故過高。性能瓶頸如無法充分利用等線程死鎖死循環(huán),餓死等。由于線程數(shù)量太多導致系統(tǒng)失敗如無法創(chuàng)建線程等。注意死鎖的兩個或多個線程是不消耗的,有的人認為的使用率是線程死鎖導致的,這個說法是完全錯誤的。 不知覺間工作已有一年了,閑下來的時候總會思考下,作為一名Java程序員,不能一直停留在開發(fā)業(yè)務使用框架上面。老話說得好,機會是留給有準備的人的,因此...
摘要:因為進程退出之后將不再執(zhí)行事件循環(huán),所有只有那些沒有回調(diào)函數(shù)的代碼才會被執(zhí)行。此外,創(chuàng)建的回調(diào)函數(shù)具有隔離性,他們之間不會相互影響。我們來看的一個簡單例子,他創(chuàng)建了一個子進程,第一個參數(shù)是一個命令,第二個參數(shù)是回調(diào)函數(shù),處理返回結果。 雖然node對操作系統(tǒng)做了很多抽象的工作,但是你還是可以直接和他交互,比如和系統(tǒng)中已經(jīng)存在的進程進行交互,創(chuàng)建工作子進程。node是一個用于事件循環(huán)的線...
閱讀 1353·2023-01-11 13:20
閱讀 1699·2023-01-11 13:20
閱讀 1211·2023-01-11 13:20
閱讀 1904·2023-01-11 13:20
閱讀 4161·2023-01-11 13:20
閱讀 2751·2023-01-11 13:20
閱讀 1397·2023-01-11 13:20
閱讀 3664·2023-01-11 13:20