적정 thread 수 찾기 (적정 스레드)
[1]. Multi Thread를 이용한 개발시 확인 필요사항.
-
OS에서 지원하는 Thread의 최대 갯수
-
Process당 허용가능한 최대 Thread 갯수
-
Process당 적정 수준의 Thread 갯수
-
Thread 생성 에러가 나는 경우
[2]. 위 3가지에 대한 확인 방법(Linux 기준)
- OS에서 지원하는 Thread의 최대 갯수(OS 전체에서 사용가능한 Threa갯수이다)
- cat /proc/sys/kernel/threads-max
- Process당 허용가능한 최대 Thread 갯수
- Linux는 프로세스당 Thread를 제한 하는 것이 아니라. 단지 전체 Thread 갯수만 관리한다.
- Process당 적정 수준의 Thread 갯수
-
바쁜 시스템 : cpu core개수 + 1
-
한가한 시스템 : cpu core개수 * 2 + 1
- Thread 생성 에러가 나는 경우
- 시스템 전체의 max thread 값이 높다고 하여도 메모리의 한계로(out of memory) 더이상 thread 생성이 어려울 수 있다.
[3]. Linux에서 Thread 최대 갯수 계산 하는 방법
max_threads = totalram_pages / (8 * 8192 / 4096);
kernel/fork.c
/* The default maximum number of threads is set to a safe
-
value: the thread structures can take up at most half
-
of memory.
*/
max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);
출처: https://doitnow-man.tistory.com/16 [즐거운인생]
코어 수 또는 코어 수 * 2를 생각했었는데 그 외에도 볼 것이 여러개 있었다.
——————- 2019. 11. 20 ———————
totalram_pages 는
cat /proc/meminfo
의 MemTotal: 3985392 kB 값이다.
이것으로 위의 식에 대입하여 계산하였을 때
3985392 / ( 8 * 8192 / 4096)
= 249087
위 계산식은 cat /proc/sys/kernel/threads-max 명령어를 호출 했을 때랑은 전혀 다른 결과가 나온다.
따라서 저 계산식을 좀더 자세히 알기전까지는
cat /proc/sys/kernel/threads-max
이 명령어로 OS에서 커버 가능한 Thread 숫자를 보는 것이 좋을 것 같다.