다양한 Linux 배포판의 스레드 ID

다양한 Linux 배포판의 스레드 ID

ubuntu 및 이전 Mandrake Linux에서는 잘 실행되지만 Redhat Enterprise Linux(RHEL 4 업데이트 8, 정확히는 커널 2.6.9-89)에서는 항상 실패하는 서버 애플리케이션이 있습니다. RHEL에서 서버는 일반적으로 들어오는 연결에 대한 응답을 중지하기 전까지 40일 이상 실행됩니다.

우분투에서는 약 5000개의 수신 연결에 대해 서버가 약 50개의 고유 스레드 ID만 생성한다는 것을 확인했습니다. 한편, RHEL에는 동일한 수의 수신 연결에 대해 수천 개의 스레드 ID가 있습니다. 내 생각엔 이것이 이 서버들이 정지되는 이유일지도 모른다고 생각합니다.

이것이 원인인지 확인할 수 있는 방법이 있나요? 시스템의 "유휴" 스레드 수를 표시할 수 있는 도구나 서버의 "스레드 누수"를 표시할 수 있는 도구가 있을까요? 스레드 할당 및 해제 방법을 제어하는 ​​시스템 설정이 있습니까? 특정 스레드를 들어오는 TCP 연결에 "바인딩"하는 설정이 있을 수 있으며 이는 우분투와 RHEL에서 다르게 작동합니까?

폴리스티렌

RHEL 스레드 ID는 일반적으로 xxxx004 또는 xxxx005와 유사하며 여기서 x는 1E8004 및 750005와 같은 16진수이며 시간이 지남에 따라 항상 증가한다는 점을 언급하는 것을 잊었습니다.

답변1

/프로세스

스레드 최대 한도에 도달한 것 같습니다. 이 매개변수는 여기에서 확인할 수 있습니다.

$ cat /proc/sys/kernel/threads-max
12345

다음 명령을 사용하여 이 값을 변경할 수 있습니다.

$ sudo echo <number> > /proc/sys/kernel/threads-max

영구적으로 재부팅하려면 이 파일을 편집 /etc/sysctl.conf하고 다음 줄을 추가하세요.

kernel.threads-max = 50000

그런 다음 다음 명령을 실행하십시오.

$ sudo sysctl -p

추가 커널 매개변수

명령을 사용하여 커널의 다른 구성을 볼 수 있습니다 sysctl -a.

예를 들어, 모든 "스레드" 매개변수는 다음과 같습니다.

$ sudo sysctl -a|grep thread
kernel.threads-max = 7514
kernel.slow-work.min-threads = 2
kernel.slow-work.max-threads = 16
vm.nr_pdflush_threads = 0

2.6 및 3.x 커널

오래된 2.6 커널과 glibc 라이브러리를 사용하는 RHEL 4.x를 최신 3.x와 비교하는 것은 사과를 오렌지와 비교하는 것과 같습니다. 커널에 많은 변경 사항이 있었기 때문에 그 중 어떤 것도 비슷한 방식으로 작동할 것으로 기대하지 않습니다.

관련 정보