2013-12-10 64 views
0
[[email protected] ~]$ ps aux|grep python 
user  4182 0.0 0.0 9228 1080 ?  Ss 02:00 0:00 /bin/sh -c cd data/trandata && /usr/local/bin/python2.7 main.py >> /dev/null 2>&1 
user  4190 0.1 0.1 341108 10740 ?  Sl 02:00 0:52 /usr/local/bin/python2.7 main.py 
user  4205 166 1.6 1175176 129312 ?  Sl 02:00 901:39 /usr/local/bin/python2.7 main.py 
user  10049 0.1 0.1 435856 10712 ?  Sl 10:21 0:04 /usr/local/bin/python2.7 main.py 
user  10051 71.1 2.5 948248 207628 ?  Sl 10:21 28:42 /usr/local/bin/python2.7 main.py 
user  10052 51.9 1.9 948380 154688 ?  Sl 10:21 20:57 /usr/local/bin/python2.7 main.py 
user  10053 85.9 0.9 815104 76652 ?  Sl 10:21 34:41 /usr/local/bin/python2.7 main.py 
user  11166 0.0 0.0 103240 864 pts/1 S+ 11:01 0:00 grep python 
[[email protected] ~]$ ps -ef|grep python 
user  4182 4174 0 02:00 ?  00:00:00 /bin/sh -c cd /data/trandata && /usr/local/bin/python2.7 main.py >> /dev/null 2>&1 
user  4190 4182 0 02:00 ?  00:00:52 /usr/local/bin/python2.7 main.py 
user  4205 4190 99 02:00 ?  15:01:46 /usr/local/bin/python2.7 main.py 
user  10049  1 0 10:21 ?  00:00:04 /usr/local/bin/python2.7 main.py 
user  10051 10049 71 10:21 ?  00:28:47 /usr/local/bin/python2.7 main.py 
user  10052 10049 51 10:21 ?  00:21:01 /usr/local/bin/python2.7 main.py 
user  10053 10049 85 10:21 ?  00:34:45 /usr/local/bin/python2.7 main.py 
user  11168 10904 0 11:01 pts/1 00:00:00 grep python 

正如我們所看到的,我啓動了一個python進程,它會spwan多進程,並且在進程內啓動多線程,並且在線程內啓動多線程。ps aux和-ef之間的CPU使用率差異

流程樹是這樣的:
main_process
--sub_process
----線程1
------ sub_thread
------ sub_thread
------ sub_thread
------ sub_thread
----線程2
---- thread3
--sub_process
----......
畫面內時,PID-4205示出了的ps aux和ps -ef不同的CPU使用率,一個是166,而另一個是99,166在頂部-c也顯示。
我保證該PID-4205是子過程中的一個,這意味着在python它不能與GIL使用CPU的100%以上。
這就是我的問題,爲什麼ps -ef和ps aux顯示不同。

回答

2

這只是一個取樣神器。假設一家工廠每小時生產一輛汽車。如果你在製造汽車之前到達那裏並在製造汽車後立即離開,你可以看到兩輛汽車在一個小時的時間內製造出來,導致你認爲工廠的生產能力接近兩倍。

更新:讓我試着澄清例子。假設一家工廠每小時生產一輛汽車。它不能每小時生產一輛以上的汽車。如果你從7點59分到9點01分觀看工廠,你會看到兩輛車在短短一個多小時(62分鐘)內生產(一個在8:00,一個在9:00)。所以你估計工廠每小時生產兩輛車,幾乎是其實際產量的兩倍。這就是發生在這裏的事情。這是由top在錯誤的時間檢查CPU計數器導致的採樣僞像。

+0

對不起,我真的不知道你的意思是先生T_T。 – Zagfai

+1

你能澄清一下你不明白的嗎?你不明白我的例子嗎?或者你不明白它將如何應用? –

+0

thx非常〜。 – Zagfai

相關問題