Post
KO

적정 thread 수 찾기 (적정 스레드)

[1]. Multi Thread를 이용한 개발시 확인 필요사항.

  1. OS에서 지원하는 Thread의 최대 갯수

  2. Process당 허용가능한 최대 Thread 갯수

  3. Process당 적정 수준의 Thread 갯수

  4. Thread 생성 에러가 나는 경우

[2]. 위 3가지에 대한 확인 방법(Linux 기준)

  1. OS에서 지원하는 Thread의 최대 갯수(OS 전체에서 사용가능한 Threa갯수이다)
  • cat /proc/sys/kernel/threads-max

  1. Process당 허용가능한 최대 Thread 갯수
  • Linux는 프로세스당 Thread를 제한 하는 것이 아니라. 단지 전체 Thread 갯수만 관리한다.

  1. Process당 적정 수준의 Thread 갯수
  • 바쁜 시스템 : cpu core개수 + 1

  • 한가한 시스템 : cpu core개수 * 2 + 1

  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 숫자를 보는 것이 좋을 것 같다.

This article is licensed under CC BY 4.0 by the author.