Python 프로세스가 맨 위에 나타나고 사라집니다.

Python 프로세스가 맨 위에 나타나고 사라집니다.

24코어 서버(Ubuntu 14.04 LTS x64)에서 약 12개의 Python 스크립트가 동시에 시작되었습니다. 각 Python 스크립트를 완료하는 데 약 1시간이 걸립니다.

맨 위에는 산발적으로 나타나는 반면 각 스크립트는 중단 없이 하나의 코어를 최소한 100% 사용해야 합니다(서버에 약 100GB의 메모리가 있으므로 디스크 IO 관련 없음, 네트워크 IO 없음, 스왑 없음) RAM 스크립트 RAM 요구 사항은 매우 낮습니다.)

여기에 이미지 설명을 입력하세요.

상단의 각 스크립트가 하나 이상의 코어 CPU를 지속적으로 100% 차지하지 않는다는 것을 설명하는 방법은 무엇입니까?

24코어 서버는 컴퓨터 클러스터의 일부이지만 일반적으로 과부하가 있는 경우 st상단에 설명되어 있습니다. (즉, 0.0보다 훨씬 큼).

답변1

귀하의 커널이 이를 우선순위로 간주하지 않는 것 같습니다. :)

이미지를 보면 Python 프로세스의 우선순위가 20인 것을 알 수 있습니다. 기본값입니다. 이는 다른 스케줄링 요소(할당된 CPU 시간, 프로세스 상태 등)를 제쳐두면 Python 스크립트가 , top, rcu_shed, , ... 만큼 중요한 것으로 간주되며 sshd해당 프로세스가 항상 무언가를 갖지는 않을 수 있음을 의미합니다. 이렇게 하면 진입할 때 여전히 CPU에 액세스할 수 있습니다.운영상태.

Linux 프로세스는 시간 할당량(또는 시간 조각)으로 실행됩니다. 이는 모든N밀리초, 커널잡다(코어에서) 현재 실행 중인 프로세스를 (일시 중지)하고 예약할 다른 프로세스를 검색합니다. 기본적으로 시간 분할 값은 100밀리초(또는).

컴퓨터에 24개의 코어가 있으므로 기본적으로 24개의 프로세스가 동시에 실행되도록 예약할 수 있다고 가정할 수 있습니다. 스케줄링을 위해 선택된 (24) 프로세스(100밀리초마다)는 여러 요인에 따라 선택됩니다. 또한 시간 분할이 만료되기 전에 프로세스가 절전 모드로 전환되면 해당 프로세스도 선점될 수 있습니다. Linux 2.6부터 커널은 다음을 사용합니다.완전히 공정한 스케줄러기본 알고리즘. 프로세스 스케줄링 우선순위는 주로 각 프로세스가 얼마나 오랫동안 실행되었는지를 기준으로 하며,감쇠 인자:

CFS는 우선 순위를 직접 사용하지 않지만 작업 실행에 허용되는 시간에 대한 붕괴 요소로 사용합니다.우선 순위가 낮은 작업은 붕괴 요소가 더 높고, 우선 순위가 높은 작업은 지연 요소가 더 낮습니다.이는 우선 순위가 낮은 작업에 대해 실행하도록 허용된 작업 시간이 우선 순위가 높은 작업보다 더 빨리 소모된다는 것을 의미합니다. 이는 우선순위에 따라 실행 큐를 유지하는 것을 방지하는 우아한 솔루션입니다.

이제 다음 명령을 사용하여 (사용자 모드에서) nice사용자 정의 좋은 값으로 프로세스를 실행할 수 있습니다.

nice [OPTION] [COMMAND [ARG]...]
    Run  COMMAND  with an adjusted niceness, which affects  process scheduling. 
    With no COMMAND, print the  current niceness. Niceness  values range  from 
    -20 (most favorable to the process) to 19 (least favorable to the process).

Linux 스케줄러는 이 우선순위를 절대적인 것으로 사용하지 않는다는 점을 명심하십시오. 이 값은 커널이 프로세스를 선택해야 할 때마다 고려되지만 다른 요인도 고려됩니다. 프로세스의 탐욕으로 인해 프로세스가 선택될 가능성이 낮아집니다 (알고리즘의 이름은 설명이 필요하지 않습니다:p) .

관련 정보