運(yùn)維人員必須知道的十個(gè)系統(tǒng)進(jìn)程
作者:對(duì)抗一下
kswapd0系統(tǒng)定時(shí)喚醒kswapd,檢查內(nèi)存是否緊張,如果不緊張,則睡眠,在kswapd中,有2個(gè)閥值:pages_hige,pages_low,空閑內(nèi)存頁(yè)數(shù)量低于pages_low的時(shí),kswapd進(jìn)程會(huì)掃描內(nèi)存并且每次釋放出32個(gè)free pages,直到free page的數(shù)量到達(dá)pages_high標(biāo)準(zhǔn)。
前言
在日常運(yùn)維工作中,經(jīng)常會(huì)看到一些奇怪的系統(tǒng)進(jìn)程占用資源比較高,但是又不敢隨意的Kill這些進(jìn)程
而這些系統(tǒng)級(jí)的內(nèi)核進(jìn)程都是會(huì)用中括號(hào)括起來(lái)的,它們會(huì)執(zhí)行一些系統(tǒng)的輔助功能(如將緩存寫入磁盤);
無(wú)括號(hào)的進(jìn)程都是用戶們執(zhí)行的進(jìn)程(如java、nginx等)
如下圖所示:
圖片
- kswapd0系統(tǒng)定時(shí)喚醒kswapd,檢查內(nèi)存是否緊張,如果不緊張,則睡眠,在kswapd中,有2個(gè)閥值:pages_hige,pages_low,空閑內(nèi)存頁(yè)數(shù)量低于pages_low的時(shí),kswapd進(jìn)程會(huì)掃描內(nèi)存并且每次釋放出32個(gè)free pages,直到free page的數(shù)量到達(dá)pages_high標(biāo)準(zhǔn)
- kjournaldkjournald有三種模式,分別是journal,ordered,和writebackjournal:最慢的一種模式,主要記錄所有文件系統(tǒng)上的元數(shù)據(jù)改變ordered:默認(rèn)使用的模式,只記錄文件系統(tǒng)改變的元數(shù)據(jù),并且是在改變前記錄日志writeback :最快的一種模式,同樣只記錄修改過(guò)的元數(shù)據(jù),依賴標(biāo)準(zhǔn)文件系統(tǒng)寫進(jìn)程將數(shù)據(jù)寫到硬盤
- pdflush主要用于將內(nèi)存中的內(nèi)容和文件系統(tǒng)進(jìn)行同步。比如說(shuō):當(dāng)一個(gè)文件在內(nèi)存中進(jìn)行修改,pdflush負(fù)責(zé)將它寫回硬盤。每當(dāng)內(nèi)存中的垃圾頁(yè)(dirty page)超過(guò)10%的時(shí)候,pdflush就會(huì)將這些頁(yè)面?zhèn)浞莼赜脖P。此比率通過(guò)通過(guò)/etc/sysctl.conf中的 vm.dirty_background_ratio項(xiàng)默認(rèn)值為10
- kthreadd內(nèi)核初始化的時(shí)候被創(chuàng)建的一個(gè)內(nèi)核線程,其作用是管理調(diào)度其它內(nèi)核線程。它會(huì)循環(huán)運(yùn)行一個(gè)叫做kthreadd的函數(shù),該函數(shù)的作用是運(yùn)行kthread_create_list全局鏈表中維護(hù)的kthread,然后可以調(diào)用kthread_create創(chuàng)建一個(gè)kthread,它會(huì)被加入到kthread_create_list鏈表中,同時(shí)kthread_create會(huì)weak up kthreadd_task
注意:這個(gè)線程不能關(guān)閉?。?!
- migrationmigration/0-migration/31共有32個(gè)內(nèi)核現(xiàn)場(chǎng),每個(gè)處理器核對(duì)應(yīng)一個(gè)migration內(nèi)核線程,主要作為相應(yīng)CPU核的遷移進(jìn)程,用來(lái)執(zhí)行進(jìn)程遷移操作,內(nèi)核中的函數(shù)是migration_thread();該進(jìn)程在系統(tǒng)啟動(dòng)時(shí)自動(dòng)加載(每個(gè) cpu 一個(gè)),并將自己設(shè)為 SCHED_FIFO 的實(shí)時(shí)進(jìn)程,然后檢查 runqueue::migration_queue 中是否有請(qǐng)求等待處理,如果沒(méi)有,就在 TASK_INTERRUPTIBLE 中休眠,直到被喚醒后再次檢查。migration_thread() 僅僅是一個(gè) CPU 綁定以及 CPU 電源管理等功能的一個(gè)接口。這個(gè)線程是調(diào)度系統(tǒng)的重要組成部分。
- watchdogwatchdog/0-watchdog/31總共32個(gè)內(nèi)核線程, 每個(gè)處理器核心對(duì)應(yīng)一個(gè)watchdog 內(nèi)核線程,主要用于監(jiān)視系統(tǒng)的運(yùn)行,在系統(tǒng)出現(xiàn)故障時(shí)自動(dòng)重新啟動(dòng)系統(tǒng),包括一個(gè)內(nèi)核 watchdog module 和一個(gè)用戶空間的 watchdog 程序。其基本工作原理是:當(dāng)watchdog啟動(dòng)后(即/dev/watchdog設(shè)備被打開(kāi)后),如果在某個(gè)時(shí)間間隔(1分鐘)內(nèi)/dev/watchdog沒(méi)有被執(zhí)行寫操作, 硬件watchdog電路或軟件定時(shí)器就會(huì)重新啟動(dòng)系統(tǒng),每次寫操作會(huì)導(dǎo)致重新設(shè)定定時(shí)器。
- eventsevents/0-events/31, 總共32個(gè)內(nèi)核線程,每個(gè)處理器核對(duì)應(yīng)一個(gè) events內(nèi)核線程。主要用作處理內(nèi)核事件很多軟硬件事件(比如斷電,文件變更)被轉(zhuǎn)換為events,并分發(fā)給對(duì)相應(yīng)事件感興趣的線程進(jìn)行響應(yīng)。
- kblockdkblockd/0-kblockd/31, 總共32個(gè)內(nèi)核線程 ,每個(gè)處理器核對(duì)應(yīng)一個(gè) kblockd 內(nèi)核線程,用于管理系統(tǒng)的塊設(shè)備,它會(huì)周期性的激活系統(tǒng)內(nèi)的塊設(shè)備驅(qū)動(dòng)
- aioaio/0-aio/31, , 總共32個(gè)內(nèi)核線程,每個(gè)處理器核對(duì)應(yīng)一個(gè) aio 內(nèi)核線程, 代替用戶進(jìn)程管理I/O,用以支持用戶態(tài)的AIO(異步I/O)注意:此線程不應(yīng)該被關(guān)閉。
- rpciodrpciod/0-rpciod/31, 總共32個(gè)內(nèi)核線程, 每個(gè)處理器核對(duì)應(yīng)一個(gè)rpciod內(nèi)核線程,主要作為遠(yuǎn)程調(diào)用服務(wù)(如NFS)的守護(hù)進(jìn)程,用于從客戶端啟動(dòng)I/O服務(wù)
責(zé)任編輯:武曉燕
來(lái)源:
步步運(yùn)維步步坑






























