PID가 400,000을 넘는 것으로 확인됩니다. 이유가 무엇인가요? 이는 뭔가 잘못되었음을 의미합니까?

PID가 400,000을 넘는 것으로 확인됩니다. 이유가 무엇인가요? 이는 뭔가 잘못되었음을 의미합니까?

오늘 방금 내 프로세스 ID가 400,000(예: 449624)으로 매우 높은 것을 확인했습니다. 나는 달리고 있을 때 ps -ef | more이것을 발견했다 . 이는 정상입니까, 아니면 문제가 있음을 나타냅니까? 그렇지 않으면 스크립트가 정상적으로 실행됩니다.

저는 Redhat 7.3 x64비트를 사용하고 있습니다.

내가 알아차린 또 다른 점은 Redhat 7.2도 있고 pid가 그다지 높지 않고 최신 OS에서만 가능하다는 것입니다. 왜 그럴까요? 이것이 OS와 관련이 있고 정상이라는 뜻입니까?

kernel_pid_max내 것에는 그런 것이 없습니다 sysctl.conf. 나는 고양이를 달렸고 /proc/sys/kernel/pid_max, 그것을 얻었다 458752.

답변1

시작 시 커널은 pid_max사용 가능한 CPU 수에 따라 기본값을 조정합니다. 숫자가 더 작으면 일반적인 32768이 선택됩니다. 그렇지 않은 경우 계산은 다음과 같습니다(여기에 표시된 3.10 커널은 RHEL과 유사하지만 몇 가지 변경 사항을 제외하면 최근 Linux 커널과 동일합니다).

include/linux/threads.h:

/*
 * 이는 프로세스에 할당된 기본 최대 PID를 제어합니다.
 */
#PID_MAX_DEFAULT 정의(CONFIG_BASE_SMALL? 0x1000:0x8000)

0x8000 = 32768은 사용 가능한 CPU 스레드가 32개 미만인 시스템에서 일반적으로 사용되는 값입니다.

그 다음에:

#PIDS_PER_CPU_DEFAULT 1024 정의

그런 다음 이 값을 사용하여kernel/pid.c:

int pid_max = PID_MAX_DEFAULT;

그리고~ 후에:

    /* CPU 수에 따라 기본값과 최소 pid_max를 조정합니다 */
    pid_max = min(pid_max_max, max_t(int, pid_max,
                PIDS_PER_CPU_DEFAULT * num_possible_cpus()));
    pid_max_min = max_t(int, pid_max_min,
                PIDS_PER_CPU_MIN * num_possible_cpus());
    pr_info("pid_max: 기본값: %u 최소값: %u\n", pid_max, pid_max_min);

따라서 OP의 관점에서 이는 총 458752/1024 = 448개의 사용 가능한 동시 스레드를 의미합니다. 상당히 많습니다. 다른 시스템에는 CPU/코어/스레드 등이 많지 않을 수 있으므로 기본값은 더 낮습니다 pid_max.

답변2

~에서proc선적 서류 비치:

32비트 플랫폼에서는 32768이 pid_max의 최대값입니다. 64비트 시스템에서 pid_max는 최대 2^22(PID_MAX_LIMIT, 약 400만)의 값으로 설정할 수 있습니다.

을 사용하여 조회 cat /proc/sys/kernel/pid_max할 수도 있습니다 sysctl.

sudo sysctl -a | grep kernel.pid_max

또는:

sysctl -n kernel.pid_max

/etc/sysctl.conf값을 영구적으로 변경하도록 수정 하고 reload 를 사용하세요 sysctl -p.

답변3

프로세스 ID는 pid_t운영 체제별 유형으로 표시되는 모든 값일 수 있습니다. 실제로 이는 일반적으로 32비트 부호 있는 정수입니다. 즉, 최대 프로세스 ID는 2147483647이거나 현재 보고 있는 프로세스 ID보다 약 5000배 더 큽니다.

이것GNU 문서설명하다:

데이터 유형:PID_t

데이터 pid_t유형은 프로세스 ID를 나타낼 수 있는 부호 있는 정수 유형입니다. GNU C 라이브러리에서 이는 int.

실제로 커널은 일반적으로 그보다 낮은 한도를 적용합니다. Linux 시스템에서는 에 의해 제어되며 /proc/sys/kernel/pid_max기본값은 32768입니다. 시스템이 Linux인 경우 파일을 확인하여 현재 제한이 무엇인지 확인할 수 있습니다.

운영 체제마다 제한 사항이 다를 수 있습니다. 예를 들어 다음과 같습니다.macOS에서는 PID_MAX99999로 하드코딩되어 있습니다..

관련 정보