新聞中心
在Linux系統(tǒng)中,我們經(jīng)常會遇到進程加d(D狀態(tài)或者稱作不可中斷的睡眠狀態(tài))的現(xiàn)象,這種現(xiàn)象往往會給系統(tǒng)的性能帶來一定的影響。那么為什么會出現(xiàn)這種現(xiàn)象呢?本文將對這個問題進行深入的解析。

創(chuàng)新互聯(lián)是一家專業(yè)提供淶水企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、成都網(wǎng)站制作、HTML5建站、小程序制作等業(yè)務(wù)。10年已為淶水眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進行中。
一、什么是進程加d狀態(tài)?
進程加d狀態(tài)是指Linux系統(tǒng)中的進程被阻塞在了某個系統(tǒng)調(diào)用中,并且無法被取消或者喚醒。在這種狀態(tài)下,進程通常會處于睡眠狀態(tài),等待某個事件的發(fā)生。因為進程無法被取消或者喚醒,所以它也被稱作不可中斷的睡眠狀態(tài)。
二、為什么會出現(xiàn)進程加d狀態(tài)?
1.等待IO操作完成
在Linux系統(tǒng)中,進程通常需要進行文件操作、網(wǎng)絡(luò)操作等IO操作,而這些操作需要一定的時間來完成。當(dāng)進程正在進行IO操作且操作尚未完成時,系統(tǒng)會將進程置于睡眠狀態(tài),并等待IO操作完成才會喚醒該進程。
2.等待中斷信號
在Linux系統(tǒng)中,中斷信號的發(fā)生可能會使得某個進程處于睡眠狀態(tài),等待中斷信號的處理完成。
3.等待鎖
當(dāng)多個進程需要訪問同一資源時,可能會發(fā)生競爭。為了避免競爭條件的發(fā)生,進程通常會使用鎖來保證數(shù)據(jù)的一致性。當(dāng)某個進程需要加鎖而該鎖已被其他進程獲取時,該進程會被置于睡眠狀態(tài),并等待該鎖被釋放。
4.等待進程退出
當(dāng)某個進程需要與另一個進程進行通信時,通常會使用進程間通信機制。而在進程通信時,可能會出現(xiàn)某個進程等待另一個進程退出的情況,此時該進程會被置于睡眠狀態(tài)。
三、如何避免進程加d狀態(tài)?
1.異步IO
異步IO是一種能夠減少進程加d狀態(tài)的IO機制,它使得進程在進行IO操作時可以不必等待操作完成,而是可以直接返回結(jié)果并繼續(xù)執(zhí)行其他任務(wù)。
2.使用多線程
在多線程環(huán)境下,可以使用另一個線程來等待IO操作完成,從而避免進程加d狀態(tài)的出現(xiàn)。
3.改進鎖機制
為了避免因鎖機制導(dǎo)致的競爭和睡眠狀態(tài),可以使用更加高效的鎖機制,例如讀寫鎖、自旋鎖等。
4.避免死鎖
死鎖是指多個進程在互相等待對方釋放資源的情況下陷入無限等待的狀態(tài)。要避免死鎖,需要在程序設(shè)計階段合理規(guī)劃資源獲取的順序,并避免過分復(fù)雜的互操作關(guān)系。
四、
進程加d狀態(tài)是Linux系統(tǒng)中的一種常見現(xiàn)象,它往往會影響系統(tǒng)的性能。通過深入分析,我們可以了解到它的產(chǎn)生原因,以及如何避免它的出現(xiàn)。盡管進程加d狀態(tài)是無法避免的,但是通過合理的設(shè)計和調(diào)整,我們可以最小化其對系統(tǒng)性能的影響。
相關(guān)問題拓展閱讀:
- Linux進程詳解
- 如何在Linux中查看所有正在運行的進程
Linux進程詳解
ps是Linux 中最基礎(chǔ)的瀏覽系統(tǒng)中的進程的命令。能列出系統(tǒng)中運行的進程,包括進程號、命令、CPU使用量、內(nèi)存使用量等。接下來解讀一下Linux操作系統(tǒng)的進程和Windows「Ctrl+Alt+delete」直接的差異。
在進行了解進程命令之前需要知道進程的一些狀態(tài)
ps工具標(biāo)識進程的5種狀態(tài)碼:
Linux操作系統(tǒng)進程執(zhí)行的狀態(tài)轉(zhuǎn)換圖如圖所示:
下面來看一下 ps命令
ps –help命令可以查看ps命令的使用說明
或者使用 man ps命令 查詢ps的詳細說明
在 man手冊 關(guān)于ps的解讀中,總結(jié)了一下幾個參數(shù)的含義:
以上的參數(shù)是可以拼接使用的,那就了解一些常用的參數(shù)組合
ps aux命令
ps -ef命令
查看進程狀態(tài)這兩個是命令是最常用的,使用 ps aux 可以查看進程的詳細運行狀態(tài)等。使用 ps -ef 不僅可以顯示自身的PID,也可以顯示PPID(父進程)。但是顯示不了進程的運行狀態(tài)
top命令
top命令是Linux下常用的性能分析工具,能夠?qū)崟r顯示系統(tǒng)中各個進程的資源占用狀況,類鄭吵似于Windows的任務(wù)管理器
man手冊關(guān)于top的解釋
關(guān)閉進程,重啟進程
在上一片文章中 linux的目錄結(jié)構(gòu) 里面說過,在目錄/etc/init.d/目錄下包含許多系統(tǒng)各種服務(wù)的啟動和停止腳本。假設(shè)進程占用內(nèi)存較大或者進程液汪異常,我們是重啟這個進程restart。如下圖所示:
我們重啟了mysqld這個進程,可以看出進程號已經(jīng)改變(從15743到15964),說明進程已經(jīng)重啟。
Linux下有3個喊埋侍特殊的進程,idle進程(PID=0), init進程(PID=1)和kthreadd(PID=2)
我們來看一下進程狀態(tài)
可以看到很多進程的PPID號是1和2。也就是init進程和kthreadd進程。
在使用Windows系統(tǒng)的過程中,都碰到過應(yīng)用程序卡死的情況。應(yīng)對此問題,我們一般都是等待失去響應(yīng)的程序恢復(fù),或者是直接使用任務(wù)管理器將其強制關(guān)閉,然后再重新打開。
在Linux中,遇到特別耗費資源的進程,當(dāng)然需要使用 top命令 查看進程占用率高的進程。或者使用 free -m命令 查看內(nèi)存剩余。假設(shè)需要強殺進程來釋放空間。我們涉及到Linux中信號?的知識,在這里簡單的描述一下,信號的詳解會在接下來的文章里面敘述。
free -m命令查看內(nèi)存空間
在linux中存在著64種信號
使用 kill -l命令 查看信號列表
在前面說過進程會被這些個信號>
(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號強制停止運行)
那問題就在于如何發(fā)信號給這些個進程。
使用kill命令發(fā)信號
我們從上面可以看到 mysqld進程被重啟了 。
如何在Linux中查看所有正在運行的進程
ps命令用于查看系統(tǒng)中的進程狀態(tài),格式為:“ps ”,
常見的ps命令參數(shù)包括有:
-a 顯示所有的進程(包括其他用戶的)
-u 用戶以及其他詳細信息
-x 顯示沒有控制終端的進程
Linux系統(tǒng)中時刻運行著許許多多的進程,如果能夠合理的管理它們,絕對有益于對系統(tǒng)的性能優(yōu)化,Linux系統(tǒng)中進程最常見的5種不同的狀態(tài)是運行、中斷、不可中斷、僵死與停止,它們的含義分別是:《搏數(shù)Linux就該這么學(xué)》這本書上有詳細的介紹,網(wǎng)址為
R(運行):正在運行或在運行隊列中等待。
S(中斷):休眠中, 在等待某個條件的形成或接收到信號。
D(不可中斷):收到信號不喚醒和不可運行, 進程必須等待直到有中斷發(fā)生。
Z:(僵死):進程已終止, 但進程描述符存在, 直到父進肆銀森程調(diào)用wait4()系統(tǒng)調(diào)用裂畝后釋放。
T:(停止):進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號后停止運行。當(dāng)執(zhí)行”ps aux”命令后通常會看到下面格式的進程狀態(tài),表格中只是列舉了部分輸出值,而且正常的輸出值中不包括中文注釋部分:
ps命令
輸入下面的ps命令,顯示所有運行中的進汪世程:
# ps aux | less
其中,
-A:顯示所有進程
a:帶陵緩顯示終端中包括其它用戶的所有進程
x:顯示無控制終端的進程
任務(wù):查蠢模看系統(tǒng)中的每個進程。
# ps -A
# ps -e
任務(wù):查看非root運行的進程
# ps -U root -u root -N
任務(wù):查看用戶vivek運行的進程
# ps -u vivek
任務(wù):top命令
top命令提供了運行中系統(tǒng)的動態(tài)實時視圖。在命令提示行中輸入top:
ps命令
輸入下面的ps命令,顯示所有運行中的進程:
# ps aux | less
其中,
-A:顯示所蠢模有進程
a:顯示終端中包括其它用戶的所有帶陵緩進程
x:顯示無控制終端的進程
任務(wù):查看系統(tǒng)中的每個進程。汪世
# ps -A
# ps -e
任務(wù):查看非root運行的進程
# ps -U root -u root -N
任務(wù):查看用戶vivek運行的進程
# ps -u vivek
任務(wù):top命令
關(guān)于linux中很多進程加d的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
分享題目:Linux進程加d現(xiàn)象解析:為什么會出現(xiàn)這種情況?(linux中很多進程加d)
網(wǎng)頁URL:http://www.fisionsoft.com.cn/article/ccsjhse.html


咨詢
建站咨詢
