
Linux學習筆記1:CPU核數&linux進程

一、CPU核數
1、物理cpu數:physicalidid
#以下是兩個物理CPU
[root@8-20~]#cat/proc/cpuinfo|grep-i’physicalid|sort|uniq
physicalid:0
physicalid:1
2、核數:看cpucores
#以下是每個物理CPU的8個核
[root@8-20~]#cat/proc/cpuinfo|grep-i’cpucores|sort|uniq
cpucores:8
3、是否支持超線程:sibling是否大于cpucores。如果大于,則表示支持超線程。超線程數為siblings/cpucores=16/8=2
4、總核數:物理CPU數*核數,以上例子:2*8=16核
5、CPU總邏輯數(線程數):總核數*超線程數,以上例子:16*2=32線程
6、看總邏輯CPU數的方法比較簡單:top命令,然后按1
邏輯cpu的數量為32

二、linux的進程狀態
linux進程狀態及轉換關系
2.1R狀態(對系統產生負載)
就緒狀態(runnable):說明過程處于CPU的就緒隊列中,就緒過程
運行狀態(running):表示過程處于CPU的就緒隊列中,運行態的過程
2.2D狀態(對系統產生負載)
睡眠狀態不能中斷(uninterruptible):表示過程正在與硬件交互(如申請資源(內存)io)或者處理硬件),此時不允許被其他過程中斷,這也是過程的自我保護機制。雖然它在短時間內是一種不可中斷的睡眠狀態,但它仍然占用資源,因此它會產生系統負載。
注:少量D狀態無關緊要,但有大量D狀態:需要進一步分析瓶頸在哪里
2.3Z狀態
僵死狀態(zombie):僵尸過程意味著過程實際上已經結束,但父親的過程尚未恢復其資源(如過程描述符、PID等)
2.4S狀態
它可以中斷睡眠狀態,這意味著該過程因等待事件而被系統懸掛(堵塞)。當等待過程的事件發生時,它會被喚醒并進入R狀態
2.5I狀態
空閑狀態(Idle)。用于不中斷睡眠的核心線程。由硬件交互引起的不中斷過程用D表示,但對于某些核心線程來說,在不中斷睡眠時可能沒有任何負載。
2.6T或T狀態
(Stopped或Traced)表示過程處于暫停或跟蹤狀態
2.7X狀態
過程已經消亡

三、平均負載loadaverage
1、含義:系統的平均負載長度,即平均活動過程數(R狀態)【runing、runable】與D狀態(不中斷,與硬件交互,受保護)
說明:R狀態和D狀態都能產生系統負載
2、平均負載怎么算高?怎么計算?
要看核數,要看系數
2.1高度與否與cpu核數有關
2.1單核過去1分鐘、5分鐘、15分鐘的平均負荷>10高
2.224核過去1分鐘、5分鐘、15分鐘平均負荷>10且小于24,不高
2.2、如何計算系數?
核數為0.7*,load不高<0.7*核數,load不高
大于0.7核數,小于5*核數,load不高,不好說,要進一步監控分析
>5*核數,load高
3、平均負載高的原因是什么?
平均負載是將r狀態和b狀態的過程計入負載,因此平均負載高的原因肯定可以推斷出活躍過程的數量。
3.1只能推斷出過程太多,應用是cpu密集過程。這些cpu密集過程有太多的任務(計算和統計),cpu滿載。這個時候需要進一步看top和哪個過程。
4、與平均利用率相比
4.1平均負載高,cpu占用高嗎?
CPU密集過程,是的,如果平均負載高,CPU必須占用高
I/O密集型平均負載不一定高,cpu占用率高(沒有復雜的計算操作,所以不一定)
4.2cpu占用率高,平均負荷高嗎?
cpu占用率高,平均負載不一定高:java過程占90%和8核,平均負載可能是1
cpu密集型工藝比例高,工藝多。因此,cpu占用率高,平均負載可能高