什么是進程纪吮?
開發(fā)寫的代碼萎胰,我們稱為程序技竟。
而當我們運行一個程序時,那么我們將運行的程序叫進程
區(qū)別嚼沿?
程序:靜態(tài)的概念,可以永久存儲在系統(tǒng)中
進程:動態(tài)的概念遣妥,程序運行的過程箫踩。當我們結束該進程,進程就隨之的銷毀了境钟,但是程序還存儲在系統(tǒng)中慨削。
人的生命周期:一個從開始到結束的過程缚态。但是也有走不了全部的堤瘤。
進程的生命周期:
總結:父進程接到一個任務本辐,會派給子進程,而自己只需要等子進程完成任務老虫。自己回收任務就是了茫多。它不會等待地梨,會去做其他的事宝剖。
子進程在任務過程中死了万细,就會變成僵尸進程。
父進程在子進程的任務過程中死了腰素。子進程會變成孤兒進程弓千,然后會被最高的進程system收管献起。然后繼續(xù)執(zhí)行。
父進程叫ppid 子進程叫pid
僵尸進程與孤兒進程的區(qū)別:
孤兒進程是子進程還在運行姻政,而父進程掛了汁展,子進程被init進程收養(yǎng)。僵尸進程是父進程還在運行但是子進程掛了食绿,但是父進程卻沒有使用wait來清理子進程的進程信息年枕,導致子進程雖然運行實體已經消失熏兄,但是仍然在內核的進程表中占據(jù)一條記錄,這樣長期下去對于系統(tǒng)資源是一個浪費桥状。僵尸進程將會導致資源浪費辅斟,而孤兒則不會芦拿。
監(jiān)控進程的狀態(tài)
靜態(tài):就是某一時刻的狀態(tài)酵幕。不在變化缓苛。ps -aux
動態(tài):就是一直在時刻變化。
ps aux的每一列的意思(靜態(tài)的)
USER 進程運行的身份用戶(每一個進程芥备,都需要一個特定的用戶身份來運行)
PID 進程的身份標識 (就是一個標識萌壳,用來區(qū)分不同的進程)
%CPU 該進程占用CPU的百分比是多少
%MEM 該進程占用內存的百分比是多少
VSZ 虛擬內存
RSS 實際占用內存
TTY 該進程是哪個終端運行的 酷师? 表示是系統(tǒng)運行的。pts/0 pts/1 來源的終端是哪一個
STAT 進程所表示的狀態(tài)(運行 暫停 停止)
START 進程啟動的時間
TIME 進程占用CPU的時間 (就是處理你這個進程懂讯,cpu使用的時間褐望,cpu是納秒計算的)
COMMAND 運行該進程所執(zhí)行的命令 【】 表示內核啟動程序
STAT基本狀態(tài) 描述
R 進程運行
S 可中斷進程
T 進程被暫停
D 不可中斷進程
Z 僵尸進程
s 進程是控制進程, Ss進程的領導者荡碾,父進程
< 進程運行在高優(yōu)先級上,S<優(yōu)先級較高的進程劳殖,是可中斷其他進程拨脉。
N 進程運行在低優(yōu)先級上玫膀,SN優(yōu)先級較低的進程帖旨,也可被高優(yōu)先級的中斷
當前進程運行在前臺,R+該表示進程在前臺運行
l 進程是多線程的落竹,Sl表示進程是以線程方式運行
(就是你的qq瓮钥,本身是程序碉熄,運行起來是進程锈津,在進程上會有很多的線程琼梆,可以同時間做多事)
STAT:
R R+ S T D Ss S< Ss l (常用的)
動態(tài)的 top (3秒變化一次)
w:
11:20:10 up 6 days, 7:46, 2 users, load average: 0.01, 0.02, 0.05
uptime:
11:20:14 up 6 days, 7:46, 2 users, load average: 0.01, 0.02, 0.05
top:
11:18:15 up 6 days, 7:44, 2 users, load average: 0.08, 0.03, 0.06
當前時間 運行時間(無重啟) 當前用戶 平均負載 1分 5分 15分
Tasks:(任務欄)(cpu在同一時刻,只能運行一個程序)
112 total, 1 running, 110 sleeping, 1 stopped, 0 zombie
總任務 處理進程 等待進程 停止進程 僵尸進程
%Cpu(s): 占用百分比
0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us: 用戶進程占用cpu百分比( 視頻加密、視頻解碼 )
sy: 內核進程占用cpu百分比 ( 比如 網(wǎng)卡煌往、硬件設備、硬盤 )
ni: 優(yōu)先級高的進程占用cpu百分比
id: 空閑的百分比 ( 值越大羞海、說明服務器越空閑 )
wa: 用戶請求磁盤資源却邓,磁盤很慢慢慢院水,請求的資源很多,會造成大量的等待程序 ( 數(shù)據(jù)庫 )
hi: 硬中斷
si: 軟中斷
st: 當該服務器運行了很多的虛擬機腊徙,這些虛擬機總共占用當前物理服務器的百分比是多少
不可能用top去每臺服務器觀察,后期將所有的服務器通過監(jiān)控衙耕,統(tǒng)一的監(jiān)控起來昧穿。
PR 20 10 0
NI 0 -10 -20 優(yōu)先級
top 常見指令
字母 含義
h 查看幫出
1 數(shù)字1,顯示所有CPU核心的負載
z 以高亮顯示數(shù)據(jù)
b 高亮顯示處于R狀態(tài)的進程
M 按內存使用百分比排序輸出
P 按CPU使用百分比排序輸出
q 退出top
中斷:
是系統(tǒng)用來響應硬件設備請求的一種機制橙喘,會打斷進程的正常調度和執(zhí)行时鸵,然后調用內核中的中斷處理程序來響應設備的請求。
為啥要有中斷厅瞎?
很簡單饰潜,你在處理一個事情,但是這個事情又不用你做什么和簸,只需要你等著彭雾。但是在等待的過程中,你又不能去做其他事半沽。就會出現(xiàn)時間被浪費。所以就需要中斷占哟。就是這個問題讓它自己處理著,我去做其他事,它處理完了史煎,或者處理出現(xiàn)問題了酝枢,然后提示我。我在這個時候诡延,在去處理這個事情逸绎。就變成兩不耽誤。
簡單講:就是當系統(tǒng)出現(xiàn)問題的時候参淹,會出現(xiàn)中斷的請求,然后這個時候去解決的這個問題识啦。來達到系統(tǒng)的并發(fā)處理能力家妆。
中斷會帶來的問題姨伤?
因為在中斷處理程序出現(xiàn)的時候,會打斷其他程序的正常運行忿偷,而必須先處理它的問題。那這個時候,如果耽誤的時間太久,就會對正常程序產生影響。
并且运挫,中斷處理程序在響應中斷的過程中冯袍,還會臨時關閉中斷。只處理這一個中斷。而這個時候,其他中斷就進不來的齿穗,那么這個進不來的中斷就可能會丟失腮出。導致我們不知道這個中斷帶來的是什么問題洛二。
如何處理中斷處理程序執(zhí)行過長和中斷丟失的問題垒迂?
Linux將中斷處理過程分為兩階段 :上階段和下階段
上階段用來快速處理中斷绣夺,它在中斷禁止模式下運行烈钞。主要處理跟硬件緊密相關工作晋涣。就是所謂的硬中斷。特點就是:快速執(zhí)行
下階段用來延遲處理上半部未完成的工作瘤运,通常以內核線程的方式運行。就是所謂的軟中斷,特點:延遲執(zhí)行彪杉。
Linux中的軟件中斷包括網(wǎng)絡收發(fā)侯嘀,定時,調度等各種類型楚午,通過/proc/softirqs來查看中斷的運行情況。
f: 經常聽同事說大量的網(wǎng)絡小包會導致性能問題丧荐,為什么呢?
q: 因為大量的網(wǎng)絡小包會導致頻繁的硬中斷和軟中斷?
所以大量網(wǎng)絡小包傳輸很慢,但如果將網(wǎng)絡包一次傳遞夸赫,是不是會快很多呢呼奢?