생성된 프로세스의 총 수를 계산하려면 /proc/loadavg를 사용하십시오.

생성된 프로세스의 총 수를 계산하려면 /proc/loadavg를 사용하십시오.

Red Hat Linux 8 OS에서 출력을 확인 cat /proc/loadavg하고 "5.20 5.78 8.04 16/1596 1954863"을 얻었습니다. 4분 후 출력을
다시 확인 하고 "7.05 7.33 8.11 3/1605 2071966"을 받았습니다. 이제 두 출력의 마지막 값인 2071966 - 1954863 = 117103 간의 차이를 계산하고 있습니다./proc/loadavg

이는 4분 간격 동안 시스템이 117103개의 새로운 프로세스를 생성했다는 의미입니까?

답변1

이제 두 출력의 마지막 값인 2071966 - 1954863 = 117103 간의 차이를 계산하고 있습니다. 이는 4분 간격 동안 시스템이 117103개의 새로운 프로세스를 생성했다는 의미입니까?

아니요, 사실이에요불필요한의미는, 왜냐하면PID 할당 방법. (*)
pid가 커널에 도달하면 /proc/sys/kernel/pid_max커널은 300부터 시작하여 할당되지 않은 pid를 검색합니다.

따라서 마지막 재부팅 이후 시스템이 최소 한 번 이상 pid_max에 도달하면 계산이 의미가 없게 됩니다.
그러나 이것이 불가능하다고 합리적으로 가정할 수 있다면, 그렇습니다. 귀하의 계산은 실제로 정확합니다.


OP의 의견에서 귀하의 질문에 대한 업데이트를 찾았습니다. 그렇습니다. 서로 다른 시간에 보고된 값의 차이를 계산하는 것이 /proc/stat/processes확실히 신뢰할 수 있는 정보를 얻는 방법입니다.이 값은

출시 이후 포크 수

이 말을 주목해주세요포크명시적으로 언급했습니다. 실제로 수량을 나타내는 숫자는 무엇입니까?프로세스원래 의미(및 파일 이름)로는 귀하의 것일 수도 있습니다.
그러나 이는 다중 스레드 프로세스에서 생성된 스레드를 암시적으로 제외합니다.. (시스템 호출에 의해 생성되지 않기 때문입니다 fork(). 그리고 스레드는 예약 가능한 엔터티이므로 해당 ID(스레드 ID)는 사용 가능한 PID 목록에서 가져옵니다.
예를 들어 (단순화를 위해 숫자는 순서대로 가져옵니다.) :

    10번째(단일 스레드) 프로세스 포크: PID = 10 TID = 10
    11번째(멀티 스레드) 프로세스 포크: PID = 11 TID = 11
      첫 번째 스레드는 PID11에 의해 생성됩니다: TID = 12
      두 번째 스레드는 PID11에 의해 생성됩니다: TID = 13
    12번째 프로세스 포크: PID = 14 TID = 14

그런 다음 계산에 따라 /proc/stat/processes보고됩니다..
미적분 보고서를 기반으로 할 때 /proc/loadavg14 - 10 = 4(극단적인 경우를 설명하기 위해 +1) =5실제로 스레드 수를 보고합니다(pidmax에 도달하지 않는다고 가정).

결론: 꼭 하고 싶은 말이라면프로세스원래 의미에서 기반 미적분학은 /proc/stat/processes가능한 pidmax에 도달하는지 여부에 관계없이 원하는 결과를 제공합니다.
실제로 수량을 의미하는 경우/proc/loadavg, 다음을 기반 으로 한 미적분학부팅 이후 시스템이 pidmax에 도달한 적이 없다고 가정할 수 있는 경우, 그렇지 않으면 의미가 없습니다.


(*) 제공된 예는 단순화를 위한 것입니다. 2.5 커널 이후로 상황이 확실히 바뀌었지만(효율성 향상) 주요 아이디어는 여전히 동일합니다.

관련 정보