우분투와 레드햇에 한 프로세서에서 쓰레드 50개 정도를 만드는 부분이 있는데요
그곳에서 28개 만들고서는 (errno=12 Cannot allocate memory) 이라는 에러가 납니다.
쓰레드는 일단 50개 다 만들지만 쓰레드 첫부분에 malloc 부분에서 29개째부터 에러가 납니다.
실행시켜놓고 top을 쳐서 메모리 상태를 보면 남은 용량이 꽤 있습니다.
왜 이런 에러가 나오는걸까요?
어떤 상황인지 잘은 모르겠지만.. 매우 작은 크기의 메모리들을 아주 많이 만들었다던가 하면 쓰는 용량에 비해 실제로는 꽤나 큰 블록들이 할당되기 때문에 큐에 공간이 부족할 수도 있습니다.
각 쓰레드에서 같은 크기의 메모리 공간이 필요하다면 애초에 프로세스 시작할 때 한 개의 큰 블록으로 할당하고 각 쓰레드들이 주소를 적당히 나눠서 사용한다면 괜찮을지도 모르겠군요.
ㅡ_ㅡ;
텍스트 포맷에 대한 자세한 정보
<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]
어떤 상황인지 잘은
어떤 상황인지 잘은 모르겠지만..
매우 작은 크기의 메모리들을 아주 많이 만들었다던가 하면
쓰는 용량에 비해 실제로는 꽤나 큰 블록들이 할당되기 때문에 큐에 공간이 부족할 수도 있습니다.
각 쓰레드에서 같은 크기의 메모리 공간이 필요하다면
애초에 프로세스 시작할 때 한 개의 큰 블록으로 할당하고
각 쓰레드들이 주소를 적당히 나눠서 사용한다면 괜찮을지도 모르겠군요.
ㅡ_ㅡ;
댓글 달기