2013-12-10 1 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 

우리가 보는 것처럼, 나는 다중 프로세스를 spwan 할 파이썬 프로세스를 시작하고 프로세스 내부에서 다중 스레드가 시작되고 스레드 내부에서 다중 스레드가 시작됩니다. 이 같은ps aux와 -ef 사이의 CPU 사용량 차이

프로세스 트리 :
main_process
--sub_process
---- thread1
------ sub_thread
------ sub_thread
------ sub_thread
------ sub_thread

thread2 ---- ---- thread3

--sub_process ----...... 01, 그림 내에서 pid-4205는 ps aux와 ps -ef에서 다른 CPU 사용법을 보여 주며, 하나는 166이고 다른 하나는 99입니다.
그리고 pid-4205는 하위 프로세스 중 하나이므로 python에서 GIL을 사용하는 CPU의 100 % 이상을 사용할 수 없다는 것을 의미합니다.
이것이 내 질문입니다. 왜 ps -ef와 ps aux가 차이점을 보입니까?

답변

2

샘플링 아티팩트 일뿐입니다. 한 시간에 한 대의 자동차가 공장에서 생산된다고 가정 해보십시오. 차가 만들어지기 직전에 차를 탄 채로 떠나면 한 시간이 넘는 시간에 두 대의 차를 볼 수있어 공장이 거의 두 배의 용량으로 운영되고 있다고 생각하게됩니다.

업데이트 : 예를 명확히하려고 노력하겠습니다. 한 시간에 한 시간에 한 대의 자동차가 공장에서 생산된다고 가정 해보십시오. 그것은 시간당 하나 이상의 자동차를 생산할 수 없습니다. 공장을 7시 59 분에서 9시 1 분까지 보면 공장에서 1 시간 (62 분) 만에 두 대의 자동차가 생산됩니다 (8시 1 분 및 9시 1 분). 그래서 당신은 공장이 시간당 약 2 대의 자동차를 생산하며 실제 생산량의 거의 두 배를 생산하는 것으로 추정 할 것입니다. 그것이 여기서 일어난 일입니다. top 잘못된 시간에 CPU 카운터를 검사하여 발생하는 샘플링 아티팩트입니다.

+0

죄송합니다. 저는 T_T이 무슨 뜻인지 정말 모르겠습니다. – Zagfai

+1

당신이 이해하지 못하는 것이 무엇인지 명확히 할 수 있습니까? 내 모범을 이해하지 못하니? 아니면 어떻게 적용 할 지 이해하지 못합니까? –

+0

thx 대단히 ~. – Zagfai