10個(gè)運(yùn)維人員需要知道的”系統(tǒng)進(jìn)程”

在日常的運(yùn)維工作中,當(dāng)我們習(xí)慣性的執(zhí)行ps命令后會(huì)看到很多“奇奇怪怪”的進(jìn)程,而這些進(jìn)程大部門都是系統(tǒng)的內(nèi)核進(jìn)程。很多同學(xué)對(duì)之了解的甚少,因此今天就為大家整理一篇入門級(jí)的系統(tǒng)進(jìn)程介紹帖,希望能夠幫助大家對(duì)操作系統(tǒng)進(jìn)程的理解。

在日常的運(yùn)維工作中,當(dāng)我們習(xí)慣性的執(zhí)行ps命令后會(huì)看到很多“奇奇怪怪”的進(jìn)程,而這些進(jìn)程大部門都是系統(tǒng)的內(nèi)核進(jìn)程。很多同學(xué)對(duì)之了解的甚少,因此今天就為大家整理一篇入門級(jí)的系統(tǒng)進(jìn)程介紹帖,希望能夠幫助大家對(duì)操作系統(tǒng)進(jìn)程的理解。


前言

在日常運(yùn)維工作中,經(jīng)常會(huì)看到一些奇怪的系統(tǒng)進(jìn)程占用資源比較高。而且總是會(huì)聽到業(yè)務(wù)線同學(xué)詢問“xxx這個(gè)是啥進(jìn)程?。空﹂_啟了這么多?”

而這些系統(tǒng)級(jí)的內(nèi)核進(jìn)程都是會(huì)用中括號(hào)括起來的,它們會(huì)執(zhí)行一些系統(tǒng)的輔助功能(如將緩存寫入磁盤);無括號(hào)的進(jìn)程都是用戶們執(zhí)行的進(jìn)程(如php、nginx等)。

如下圖所示:


下面就為大家普及10個(gè)比較常見的系統(tǒng)進(jìn)程:

kswapd0

kjournald

pdflush

kthreadd

migration

watchdog

events

kblockd

aio

rpciod

kswapd0

系統(tǒng)每過一定時(shí)間就會(huì)喚醒kswapd,看看內(nèi)存是否緊張,如果不緊張,則睡眠,在kswapd中,有2個(gè)閥值,pages_hige和pages_low,當(dāng)空閑內(nèi)存頁的數(shù)量低于pages_low的時(shí)候,kswapd進(jìn)程就會(huì)掃描內(nèi)存并且每次釋放出32個(gè)free pages,直到free page的數(shù)量到達(dá)pages_high.

Linux?uses kswapd for virtual memory management such that pages that have been recently accessed are kept in memory and less active pages are paged out to disk.(what is a page?)…Linux uses manages memory in units called pages.So,the kswapd process regularly decreases the ages of unreferenced pages…and at the end they are paged out(moved out) to disk

kjournald

journal:記錄所有文件系統(tǒng)上的元數(shù)據(jù)改變,最慢的一種模式。

logs all filesystem data and metadata changes. The slowest of the three ext3 journaling modes, this journaling mode minimizes the chance of losing the changes you have made to any file in an ext3 filesystem.

ordered:默認(rèn)使用的模式,只記錄文件系統(tǒng)改變的元數(shù)據(jù),并在改變之前記錄日志。

only logs changes to filesystem metadata, but flushes file data updates to disk before making changes to associated filesystem metadata. This is the default ext3 journaling mode.

writeback :最快的一種模式,同樣只記錄修改過的元數(shù)據(jù),依賴標(biāo)準(zhǔn)文件系統(tǒng)寫進(jìn)程將數(shù)據(jù)寫到硬盤

only logs changes to filesystem metadata but relies on the standard filesystem write process to write file data changes to disk. This is the fastest ext3 journaling mode.

pdflush

pdflush用于將內(nèi)存中的內(nèi)容和文件系統(tǒng)進(jìn)行同步。

比如說:當(dāng)一個(gè)文件在內(nèi)存中進(jìn)行修改,pdflush負(fù)責(zé)將它寫回硬盤。每當(dāng)內(nèi)存中的垃圾頁(dirty page)超過10%的時(shí)候,pdflush就會(huì)將這些頁面?zhèn)浞莼赜脖P。這個(gè)比率是可調(diào)節(jié)的,通過/etc/sysctl.conf中的 vm.dirty_background_ratio項(xiàng)默認(rèn)值為10也可以。

kthreadd

這種內(nèi)核線程只有一個(gè),它的作用是管理調(diào)度其它的內(nèi)核線程。

它在內(nèi)核初始化的時(shí)候被創(chuàng)建,會(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。kthreadd在執(zhí)行kthread會(huì)調(diào)用老的接口——kernel_thread運(yùn)行一個(gè)名叫“kthread”的內(nèi)核線程去運(yùn)行創(chuàng)建的kthread,被執(zhí)行過的kthread會(huì)從kthread_create_list鏈表中刪除,并且kthreadd會(huì)不斷調(diào)用scheduler 讓出CPU。這個(gè)線程不能關(guān)閉。

migration

這種內(nèi)核線程共有32個(gè),從migration/0到migration/31,每個(gè)處理器核對(duì)應(yīng)一個(gè)migration內(nèi)核線程,主要作用是作為相應(yīng)CPU核的遷移進(jìn)程,用來執(zhí)行進(jìn)程遷移操作,內(nèi)核中的函數(shù)是migration_thread()

屬于2.6內(nèi)核的負(fù)載平衡系統(tǒng),該進(jìn)程在系統(tǒng)啟動(dòng)時(shí)自動(dòng)加載(每個(gè) cpu 一個(gè)),并將自己設(shè)為 SCHED_FIFO 的實(shí)時(shí)進(jìn)程,然后檢查 runqueue::migration_queue 中是否有請求等待處理,如果沒有,就在 TASK_INTERRUPTIBLE 中休眠,直至被喚醒后再次檢查。migration_thread() 僅僅是一個(gè) CPU 綁定以及 CPU 電源管理等功能的一個(gè)接口。這個(gè)線程是調(diào)度系統(tǒng)的重要組成部分。

watchdog

這種內(nèi)核線程共有32個(gè),從watchdog/0到watchdog/31, 每個(gè)處理器核對(duì)應(yīng)一個(gè)watchdog 內(nèi)核線程,watchdog用于監(jiān)視系統(tǒng)的運(yùn)行,在系統(tǒng)出現(xiàn)故障時(shí)自動(dòng)重新啟動(dòng)系統(tǒng),包括一個(gè)內(nèi)核 watchdog module 和一個(gè)用戶空間的 watchdog 程序。

在Linux 內(nèi)核下, watchdog的基本工作原理是:當(dāng)watchdog啟動(dòng)后(即/dev/watchdog設(shè)備被打開后),如果在某一設(shè)定的時(shí)間間隔(1分鐘)內(nèi)/dev/watchdog沒有被執(zhí)行寫操作, 硬件watchdog電路或軟件定時(shí)器就會(huì)重新啟動(dòng)系統(tǒng),每次寫操作會(huì)導(dǎo)致重新設(shè)定定時(shí)器。

events

這種內(nèi)核線程共有32個(gè),從events/0到events/31, 每個(gè)處理器核對(duì)應(yīng)一個(gè) events內(nèi)核線程。用來處理內(nèi)核事件很多軟硬件事件(比如斷電,文件變更)被轉(zhuǎn)換為events,并分發(fā)給對(duì)相應(yīng)事件感興趣的線程進(jìn)行響應(yīng)。

kblockd

這種內(nèi)核線程共有32個(gè),從kblockd/0到kblockd/31, 每個(gè)處理器核對(duì)應(yīng)一個(gè) kblockd 內(nèi)核線程。用于管理系統(tǒng)的塊設(shè)備,它會(huì)周期地激活系統(tǒng)內(nèi)的塊設(shè)備驅(qū)動(dòng)。如果擁有塊設(shè)備,那么這些線程就不能被去掉。

aio

這種內(nèi)核線程共有32個(gè),從aio/0到aio/31, 每個(gè)處理器核對(duì)應(yīng)一個(gè) aio 內(nèi)核線程, 代替用戶進(jìn)程管理I/O,用以支持用戶態(tài)的AIO(異步I/O),不應(yīng)該被關(guān)閉。

rpciod

這種內(nèi)核線程共有32個(gè),從rpciod/0到rpciod/31, 每個(gè)處理器核對(duì)應(yīng)一個(gè)rpciod內(nèi)核線程,主要作用是作為遠(yuǎn)過程調(diào)用服務(wù)的守護(hù)進(jìn)程,用于從客戶端啟動(dòng)I/O服務(wù),通常啟動(dòng)NFS服務(wù)時(shí)要用到它。

總結(jié)

進(jìn)程是操作系統(tǒng)上非常重要的概念,所有系統(tǒng)上面跑的數(shù)據(jù)都會(huì)以進(jìn)程的類型存在。在 Linux 系統(tǒng)當(dāng)中:觸發(fā)任何一個(gè)事件時(shí),系統(tǒng)都會(huì)將它定義成為一個(gè)進(jìn)程,所以,進(jìn)程是Linux程序的唯一的實(shí)現(xiàn)方式。

文章來源:https://www.linuxprobe.com/10-system-process.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容