안녕하세요.. solaris에서 thread를 최대 몇개 까지 만들 수 있는지 궁금해서여... 그리고 몇개가 안정적인지두여.. 그럼 수고하세요..
한 process당 256개 초과시 process가 중지되는 것으로 알고있습니다.
동시 생성 thread 갯수는 255 이하로 생각하는것이 낫겠죠.
사족달기...
1 프로세서 당 Alzza 6.1 에서 pthread_create가 1023까지 유효하더군요.
_____________________________ 언제나 맑고픈 샘이가...http://purewell.biz
일반적으로 PTHREAD_THREADS_MAX 까지 가능할껍니다.
실제로 가능한 수는 부모 스레트의 최대가능 스택 사이즈에 달려 있습니다.
스레드 생성하면서 스택을 나눠먹기 때문에 나중에 스택이 모자라 무슨 시그널 에러 납니다. 그 시그널 보고 이게 스택이 모자라서 난 시그널이라곤 모를겁니다.
솔라리스에서는 별문제 없이 MAX까지 된것 같았다고 리눅스에서 그랬던걸로 기억나는군요.
screen + vim + ctags 좋아요~
솔라리스에서 테스트했습니다. 255~254개 동시생성 후 프로세스가 먹통이 되더군요.. ^^; 물론 MAX 설정에 따라 다르겠지만..
저 내용은 pthread.h에 안 들어 있더군요.
limits.h에 들어 있더군요...
#include .... ... void* myfunc(void*) { while (true) {sleep(10);} return NULL; } int main(void) { for (int i=0; i<PTHREAD_THREADS_MAX; i++) { pthread_t th; if (pthread_create(&th, NULL, myfunc, NULL)) { printf("MAX: %d\n", i); break; } } return 0; }
이거 돌리니까 254개 정도 나오더군요.
OS: RH8 CPU: P3 700Mhz x4 MEM: 2GB
(회사꺼 테스트 서버입니다)
레드햇 9.1에서.. 2000개까지 테스트 해봤습니다. 커널을 수정하지 않고 .. pthread_attr_setstacksize() 를 이용해서 각 쓰레드의 스택 사이즈를 PTHREAd_STACK_MIN으로 조정하니 2000개까지 돌려도 다운되지 않고 잘 돌더군요.. 흠.. 더 테스트를 해봐야 겠지만요.. wink
SunOS 5.8 사용하고 현재 정상 운영중입니다. processes당 평균 200-400개 정도 threads 생성해서 운영하고 있습니다.
processes 하나당 1500개 정도까지 만들어서 테스트 해 봤는데 CPU 부하를 너무 많이 먹어서 개수를 많이 줄였습니다.
대략 제가 추천하는 threads 개수는 processes가 작업량이 많을 경우 200-300개 정도까지가 좋지 않을까 생각합니다.
>/dev/null 2>&1
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
한 process당 256개 초과시 process가 중지되는 것으로 알고
한 process당 256개 초과시 process가 중지되는 것으로 알고있습니다.
동시 생성 thread 갯수는 255 이하로 생각하는것이 낫겠죠.
사족달기...1 프로세서 당 Alzza 6.1 에서 pthread
사족달기...
1 프로세서 당 Alzza 6.1 에서 pthread_create가 1023까지 유효하더군요.
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
일반적으로 PTHREAD_THREADS_MAX 까지 가능할껍니다.
일반적으로 PTHREAD_THREADS_MAX 까지 가능할껍니다.
실제로 가능한 수는 부모 스레트의 최대가능 스택 사이즈에 달려 있습니다.
실제로 가능한 수는 부모 스레트의 최대가능 스택 사이즈에 달려 있습니다.
스레드 생성하면서 스택을 나눠먹기 때문에 나중에 스택이 모자라
무슨 시그널 에러 납니다. 그 시그널 보고 이게 스택이 모자라서
난 시그널이라곤 모를겁니다.
솔라리스에서는 별문제 없이 MAX까지 된것 같았다고
리눅스에서 그랬던걸로 기억나는군요.
screen + vim + ctags 좋아요~
솔라리스에서 테스트했습니다.255~254개 동시생성 후 프로세스가 먹
솔라리스에서 테스트했습니다.
255~254개 동시생성 후 프로세스가 먹통이 되더군요.. ^^;
물론 MAX 설정에 따라 다르겠지만..
[quote]일반적으로 PTHREAD_THREADS_MAX 까지 가능할껍
저 내용은 pthread.h에 안 들어 있더군요.
limits.h에 들어 있더군요...
이거 돌리니까 254개 정도 나오더군요.
OS: RH8
CPU: P3 700Mhz x4
MEM: 2GB
(회사꺼 테스트 서버입니다)
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
레드햇 9.1에서.. 쓰레드 2000개까지 테스트 해봤습니다.
레드햇 9.1에서.. 2000개까지 테스트 해봤습니다.
커널을 수정하지 않고 .. pthread_attr_setstacksize() 를 이용해서 각 쓰레드의 스택 사이즈를 PTHREAd_STACK_MIN으로 조정하니 2000개까지 돌려도 다운되지 않고 잘 돌더군요..
흠.. 더 테스트를 해봐야 겠지만요.. wink
SunOS 5.8 사용하고 현재 정상 운영중입니다.processes당
SunOS 5.8 사용하고 현재 정상 운영중입니다.
processes당 평균 200-400개 정도 threads 생성해서 운영하고 있습니다.
processes 하나당 1500개 정도까지 만들어서 테스트 해 봤는데
CPU 부하를 너무 많이 먹어서 개수를 많이 줄였습니다.
대략 제가 추천하는 threads 개수는 processes가 작업량이 많을 경우
200-300개 정도까지가 좋지 않을까 생각합니다.
>/dev/null 2>&1
댓글 달기