點擊上方“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鎖死。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129709.html
摘要:線程堆棧最擅長與分析如下類型問題系統無緣無故過高。性能瓶頸如無法充分利用等線程死鎖死循環,餓死等。由于線程數量太多導致系統失敗如無法創建線程等。注意死鎖的兩個或多個線程是不消耗的,有的人認為的使用率是線程死鎖導致的,這個說法是完全錯誤的。 不知覺間工作已有一年了,閑下來的時候總會思考下,作為一名Java程序員,不能一直停留在開發業務使用框架上面。老話說得好,機會是留給有準備的人的,因此...
摘要:因為進程退出之后將不再執行事件循環,所有只有那些沒有回調函數的代碼才會被執行。此外,創建的回調函數具有隔離性,他們之間不會相互影響。我們來看的一個簡單例子,他創建了一個子進程,第一個參數是一個命令,第二個參數是回調函數,處理返回結果。 雖然node對操作系統做了很多抽象的工作,但是你還是可以直接和他交互,比如和系統中已經存在的進程進行交互,創建工作子進程。node是一個用于事件循環的線...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20