
저는 Linux 프로세스를 이해하려고 노력하고 있습니다. 각각의 용어 와 에 pid_max
대해 혼란스럽습니다 .ulimit -u
thread_max
이 용어의 차이점은 정확히 무엇입니까? 누군가 차이점을 명확히 할 수 있습니까?
답변1
죄송합니다. 허용되는 답변은 여러 측면에서 잘못된 정보입니다.
/proc/sys/kernel/pid_max
주어진 시간에 실행할 수 있는 최대 프로세스 수와는 아무런 관련이 없습니다. 실제로 이는 커널이 할당할 수 있는 최대 숫자 PROCESS IDENTIFIER입니다.
Linux 커널에서 프로세스와 스레드는 하나이며 동일합니다. 커널에서도 같은 방식으로 처리됩니다. 둘 다 task_struct 데이터 구조의 슬롯을 차지합니다. 일반적인 용어로 스레드는 Linux에서 다른 프로세스와 리소스를 공유하는 프로세스입니다(스레드 그룹 ID도 공유함). Linux 커널의 스레드는 스케줄러에 관한 한 대체로 개념적 구성입니다.
이제 커널이 스레드와 프로세스를 크게 구분하지 않는다는 점을 이해했으므로 /proc/sys/kernel/threads-max
실제로 task_struct 데이터 구조에 포함된 최대 요소 수라는 것이 더 이해가 될 것입니다. 프로세스 목록, 즉 작업 목록을 포함하는 데이터 구조입니다.
ulimit는 이름에서 알 수 있듯이 사용자별 제한입니다. 플래그 -u
는 "단일 사용자가 사용할 수 있는 최대 프로세스 수"로 정의됩니다. task_struct의 요소에는 작업을 생성한 사용자의 uid가 포함되어 있습니다. task_struct에서 작업이 추가/제거될 때마다 UID별 개수가 유지되고 증가/감소합니다. 따라서 ulimit -u
특정 사용자가 주어진 시간에 task_struct 내에서 가질 수 있는 요소(프로세스)의 최대 수를 나타냅니다.
문제가 해결되었으면 좋겠습니다.
답변2
프로세스와 스레드의 차이점을 이해해 봅시다. 에 따라이것링크,
일반적인 차이점은 동일한 프로세스의 스레드가 공유 메모리 공간에서 실행되는 반면 프로세스는 별도의 메모리 공간에서 실행된다는 것입니다.
이제 pid_max
아래와 같이 결정할 수 있는 매개변수가 생겼습니다.
cat /proc/sys/kernel/pid_max
따라서 위 명령은 반환됩니다.32,768이는 내가 실행할 수 있다는 것을 의미합니다32,768별도의 메모리 공간에서 실행될 수 있는 시스템에서 동시에 프로세스를 처리합니다.
이제 threads-max
아래와 같이 결정할 수 있는 매개변수가 생겼습니다.
cat /proc/sys/kernel/threads-max
위 명령은 다음과 같은 출력을 반환합니다.126406그건 내가 가질 수 있다는 뜻이야126406공유 메모리 공간의 스레드.
ulimit -u
이제 특정 시간에 사용자가 가질 수 있는 전체 프로세스를 나타내는 세 번째 매개변수를 살펴보겠습니다 . 위 명령은 다음과 같은 출력을 반환합니다.63203. 이는 사용자가 가질 수 있는 특정 시점에 사용자가 생성한 모든 프로세스를 의미합니다.63203실행 중인 프로세스.
가상의 사례
따라서 2명의 사용자가 동시에 2개의 프로세스를 실행하고 각 프로세스가 메모리를 많이 소비한다고 가정하면 두 프로세스 모두 효과적으로63203프로세스에 대한 사용자 제한. 따라서 그렇다면 2명의 사용자가 전체 금액을 효과적으로 사용하게 됩니다.126406 threads-max
크기.
이제 사용자가 특정 시점에 실행할 수 있는 프로세스 수를 결정해야 합니다. 이는 파일에서 확인할 수 있습니다 /etc/security/limits.conf
. 따라서 위에서 설명한 대로 이 파일에는 기본적으로 2가지 설정이 있습니다.여기.
ㅏ소프트 리미트은 다음과 같다경고그리고하드 제한는실제 최대 한도. 예를 들어, 다음과 같이 하면 학생 그룹의 모든 프로세스가 50개를 초과하는 것을 방지하고 프로세스가 30개일 경우 경고가 표시됩니다.
@student hard nproc 50
@student soft nproc 30
하드 제한은 커널에 의해 유지되는 반면 소프트 제한은 셸에 의해 시행됩니다.