新聞中心
Linux Watchdog如何正確配置?

成都創(chuàng)新互聯(lián)公司一直通過網(wǎng)站建設(shè)和網(wǎng)站營銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實效"的一站式服務(wù),以成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、移動互聯(lián)產(chǎn)品、成都全網(wǎng)營銷服務(wù)為核心業(yè)務(wù)。十余年網(wǎng)站制作的經(jīng)驗,使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價格便宜而且實用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。
隨著現(xiàn)代計算機(jī)的不斷發(fā)展,計算機(jī)系統(tǒng)的可靠性和穩(wěn)定性也得到了不斷提高。然而,即使是最為高端的計算機(jī)系統(tǒng),也難免會出現(xiàn)一些突發(fā)的故障或崩潰情況。為了避免這種情況的發(fā)生,Linux內(nèi)嵌有一項非常有用的工具——Watchdog,它可以監(jiān)視系統(tǒng)狀態(tài)、檢測故障并自動重啟系統(tǒng)。
在本文中,我們將著重探討——Linux Watchdog如何正確配置。
一、Watchdog是什么?
Watchdog(或者叫看門狗,是一種硬件和軟件結(jié)合的機(jī)制。它可以在系統(tǒng)異常的時候自動重啟系統(tǒng),從而避免由異常引起的整個系統(tǒng)崩潰。Watchdog常常被應(yīng)用于數(shù)據(jù)中心、服務(wù)器等對系統(tǒng)穩(wěn)定性要求較高的場景中。
Watchdog的精髓在于它可以自動偵測系統(tǒng)是否有異常。它可以監(jiān)視軟件運(yùn)行狀態(tài)、系統(tǒng)硬件狀態(tài)、外部設(shè)備的連通性等,以此來確定系統(tǒng)是否正常運(yùn)行。如果在預(yù)定義的時間內(nèi)沒有收到系統(tǒng)的“正常應(yīng)答”,那么就會由Watchdog自動發(fā)起操作來重啟系統(tǒng)。
二、如何在Linux系統(tǒng)上配置Watchdog?
要在Linux系統(tǒng)上配置Watchdog,需要經(jīng)過以下步驟:
1. 檢查Linux內(nèi)核是否支持Watchdog
不是所有的內(nèi)核都支持Watchdog,因此要確保當(dāng)前的Linux內(nèi)核支持Watchdog。在Linux內(nèi)核的配置文件中可以找到這個選項。開啟這個選項的方法是:首先使用cd命令進(jìn)入linux內(nèi)核的源代碼目錄,然后使用make menuconfig命令打開腳本配置工具,找到“Kernel Hacking”菜單下的“Watchdog Timer Support”選項,打開它并配置好相關(guān)參數(shù)。最終通過”save”命令完成配置。如果Watchdog Timer Support選項沒有被促進(jìn),說明系統(tǒng)內(nèi)核不支持Watchdog。
2. 檢查是否已經(jīng)安裝Watchdog軟件
在Linux系統(tǒng)中,我們需要一個工具來與硬件Watchdog進(jìn)行通信,已知的工具有wdctl、wdkeepalive、watchdog等。其中,watchdog是一個比較流行的Watchdog工具,這里我們主要介紹watchdog的安裝和配置。
使用命令sudo apt-get install watchdog或sudo yum install watchdog進(jìn)行安裝。此外,如果要啟用watchdog服務(wù),可以先使用sudo systemctl start watchdog并檢查其狀態(tài)。
3. 配置Watchdog
Watchdog的配置文件一般位于/etc/watchdog.conf中,其中配置很多,比如Watchdog Timer Driver的選擇,向系統(tǒng)發(fā)送重啟信號的時間閾值、檢測系統(tǒng)狀態(tài)的時間間隔等等。最常見的配置選項是:
watchdog-device: 這個選項指定Watchdog設(shè)備。在大多數(shù)情況下,Watchdog設(shè)備都是/dev/watchdog。
watchdog-timeout: 這個選項設(shè)定了信號的閾值時間,也就是在多長時間內(nèi)沒有收到系統(tǒng)的響應(yīng)信號,Watchdog就會發(fā)生情況。單位是秒。
watchdog-core使用默認(rèn)定義的內(nèi)核。
4. 啟動Watchdog
要啟動Watchdog,一般有兩種方式。
一是使用命令sudo systemctl start watchdog啟動Watchdog服務(wù)。通過命令sudo systemctl status watchdog可以查看服務(wù)的狀態(tài)。
二是在主機(jī)引導(dǎo)階段,通過在/boot/grub/grub.conf文件中添加類似watchdog=60的選項來啟動Watchdog(注意這里的時間是watchdog-timeout的值)。
5. 檢查Watchdog功能是否正確
一旦完成了配置和啟動Watchdog,就要檢查其是否正常工作。有很多方式可以檢查這個功能,比如說重新編譯內(nèi)核并給Watchdog發(fā)送信號來進(jìn)行測試,或者等待系統(tǒng)自動重啟以驗證它是否起作用。
另一個常用的測試工具是watchdog-test,它會產(chǎn)生Watchdog信號,以測試系統(tǒng)是否自動重啟。
三、注意事項
– Watchdog不是理想守衛(wèi)。某些可能出現(xiàn)的臨界條件、緩慢地失敗條件或者非正常系統(tǒng)強(qiáng)制關(guān)閉等異常情況,都是Watchdog難以應(yīng)對的。
– Watchdog的時間周期要盡量不要太短,不然會產(chǎn)生大量的Watchdog重置,從而增加了CPU的負(fù)載。
– Watchdog服務(wù)不能開啟在不受控制的環(huán)境中。否則可能會被惡意利用,發(fā)起攻擊。
– Watchdog服務(wù)需要定期進(jìn)行檢查和維護(hù)。例如,如果Watchdog服務(wù)在不正常的情況下被關(guān)閉,那么整個系統(tǒng)可能會失去保護(hù)。
綜上所述,在Linux系統(tǒng)上使用Watchdog可以提高系統(tǒng)的可靠性和穩(wěn)定性,可以一定程度避免出現(xiàn)系統(tǒng)故障和崩潰等問題。正確配置Watchdog,既可以提高系統(tǒng)的安全性和穩(wěn)定性,又可以避免一些不必要的麻煩,有著重要的作用。
相關(guān)問題拓展閱讀:
- Linux下如何寫可重啟的多線程子系統(tǒng)
Linux下如何寫可重啟的多線程子系統(tǒng)
在開發(fā)內(nèi)核模塊或驅(qū)動時,如果處理失誤,導(dǎo)致內(nèi)核線程中出現(xiàn)死鎖或者死循環(huán),你會發(fā)現(xiàn),除了重啟之外,你沒有任何可以做的。這時你的輸入不起任何作用,終端(不是指遠(yuǎn)程的ssh工具)只會在那重復(fù)的輸出類似“BUG: soft lockup – CPU#0 stuck for 67s! ”,更無奈的是你重啟之后導(dǎo)致系統(tǒng)掛起的堆棧信息也看不到,你所能做的就是一遍遍的加調(diào)試信息,一遍遍的重啟機(jī)器(這是我的經(jīng)歷,現(xiàn)在想想很傻)。
這種情況你肯定不是之一個遇到的,所以內(nèi)核肯定會提供處理這種情況的一些機(jī)制。但是如何來找到這些機(jī)制在哪個地方,或者說根據(jù)什么信息去google呢?最有用的就是這句話“BUG: soft lockup – CPU#0 stuck for 67s! ”,因為這句話提供你的信息量很大。首先,這條信息可以輸出,說明即使發(fā)生死鎖或者死循環(huán),還是有代碼可以執(zhí)行。第二,可以通過這個日志信息,找到對應(yīng)的處理函數(shù),這個函數(shù)所在的模塊就是用來處理CPU被過度使用時用到的。所以通過這個事情,可以看到內(nèi)核打印出的只言片語都有可能成為你解決問題的關(guān)鍵,一定要從重視這些信息,從中找出有用的東西。
我經(jīng)??吹膬?nèi)核版本是官方的2.6.32內(nèi)核,這個察悔纖版本中我找到的函數(shù)是softlockup_tick(),這個函數(shù)在時鐘中斷的處理函數(shù)run_local_timers()中調(diào)用。這個函數(shù)會首先檢查watchdog線程是否被掛起,如果不是watchdog線程,會檢查當(dāng)前占有CPU的線程占有的時間是否超過系統(tǒng)配置的閾值,即softlockup_thresh。如果當(dāng)前占有CPU的時間過長,則會在系統(tǒng)日志中輸出我們上面看到的那條日志。接下來才是最關(guān)鍵的,就是輸出模塊信息、寄存器信息和堆前辯棧信息,檢查softlockup_panic的值是否為1。如果softlockup_panic為1,則調(diào)用panic()讓內(nèi)核掛起,輸出OOPS信息。代碼如下所示:/** This callback runs from the timer interrupt, and checks
* whether the watchdog thread has hung or not:*/void softlockup_tick(void){int this_cpu = p_processor_id();
unsigned long touch_timestamp = per_cpu(touch_timestamp, this_cpu);
unsigned long print_timestamp;
struct pt_regs *regs = get_irq_regs();
unsigned long now;
/* Warn about unreasonable delays: */
if (now
per_cpu(print_timestamp, this_cpu) = touch_timestamp;
spin_lock(&print_lock);
printk(KERN_ERR BUG: soft lockup – CPU#%d stuck for %lus! \n,
this_cpu, now – touch_timestamp,
current-comm, task_pid_nr(current));
print_modules();
print_irqtrace_events(current);if (regs)show_regs(regs);elsedump_stack();
spin_unlock(&print_lock);
if (softlockup_panic)
panic(softlockup: hung tasks);}
但是softlockup_panic的值默認(rèn)竟然是0,所以在出現(xiàn)死鎖或者死循環(huán)的時候,會一直只輸出日志信息,而不會宕機(jī),這個真是好坑?。∷阅愕檬謩有薷?proc/sys/kernel/softlockup_panic的值,讓內(nèi)核可以在死鎖或者敗仿死循環(huán)的時候可以宕機(jī)。如果你的機(jī)器中安裝了kdump,在重啟之后,你會得到一份內(nèi)核的core文件,這時從core文件中查找問題就方便很多了,而且再也不用手動重啟機(jī)器了。如果你的內(nèi)核是標(biāo)準(zhǔn)內(nèi)核的話,可以通過修改/proc/sys/kernel/softlockup_thresh來修改超時的閾值,如果是CentOS內(nèi)核的話,對應(yīng)的文件是/proc/sys/kernel/watchdog_thresh。CentOS內(nèi)核和標(biāo)準(zhǔn)內(nèi)核還有一個地方不一樣,就是處理CPU占用時間過長的函數(shù),CentOS下是watchdog_timer_fn()函數(shù)。
這里介紹下lockup的概念。lockup分為soft lockup和hard lockup。 soft lockup是指內(nèi)核中有BUG導(dǎo)致在內(nèi)核模式下一直循環(huán)的時間超過10s(根據(jù)實現(xiàn)和配置有所不同),而其他進(jìn)程得不到運(yùn)行的機(jī)會。hard softlockup是指內(nèi)核已經(jīng)掛起,可以通過watchdog這樣的機(jī)制來獲取詳細(xì)信息。這兩個概念比較類似。如果你想了解更多關(guān)于lockup的信息,可以參考這篇文檔:
注意上面說的這些,都是在內(nèi)核線程中有效,對用戶態(tài)的死循環(huán)沒用。如果要監(jiān)視用戶態(tài)的死循環(huán),或者內(nèi)存不足等資源的情況,強(qiáng)烈推薦軟件層面的watchdog。具體的操作可以參考下面的文章,都寫的非常好,非常實用:
成都創(chuàng)新互聯(lián)建站主營:成都網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站改版的網(wǎng)站建設(shè)公司,提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、成都網(wǎng)站推廣、成都網(wǎng)站優(yōu)化seo、響應(yīng)式移動網(wǎng)站開發(fā)制作等網(wǎng)站服務(wù)。
本文名稱:Linuxwatchdog如何正確配置?(linuxwatchdog配置)
網(wǎng)站URL:http://www.fisionsoft.com.cn/article/coohpjg.html


咨詢
建站咨詢
