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
그런 다음 계산에 따라 /proc/stat/processes
보고됩니다.삼.
미적분 보고서를 기반으로 할 때 /proc/loadavg
14 - 10 = 4(극단적인 경우를 설명하기 위해 +1) =5실제로 스레드 수를 보고합니다(pidmax에 도달하지 않는다고 가정).
결론: 꼭 하고 싶은 말이라면프로세스원래 의미에서 기반 미적분학은 /proc/stat/processes
가능한 pidmax에 도달하는지 여부에 관계없이 원하는 결과를 제공합니다.
실제로 수량을 의미하는 경우실/proc/loadavg
, 다음을 기반 으로 한 미적분학부팅 이후 시스템이 pidmax에 도달한 적이 없다고 가정할 수 있는 경우, 그렇지 않으면 의미가 없습니다.
(*) 제공된 예는 단순화를 위한 것입니다. 2.5 커널 이후로 상황이 확실히 바뀌었지만(효율성 향상) 주요 아이디어는 여전히 동일합니다.