쓰레드 50개 만드는데.. (errno=12 Cannot allocate memory) 에러나는 경우

lansea의 이미지

우분투와 레드햇에 한 프로세서에서 쓰레드 50개 정도를 만드는 부분이 있는데요

그곳에서 28개 만들고서는 (errno=12 Cannot allocate memory) 이라는 에러가 납니다.

쓰레드는 일단 50개 다 만들지만 쓰레드 첫부분에 malloc 부분에서 29개째부터 에러가 납니다.

실행시켜놓고 top을 쳐서 메모리 상태를 보면 남은 용량이 꽤 있습니다.

왜 이런 에러가 나오는걸까요?

tinywolf의 이미지

어떤 상황인지 잘은 모르겠지만..
매우 작은 크기의 메모리들을 아주 많이 만들었다던가 하면
쓰는 용량에 비해 실제로는 꽤나 큰 블록들이 할당되기 때문에 큐에 공간이 부족할 수도 있습니다.

각 쓰레드에서 같은 크기의 메모리 공간이 필요하다면
애초에 프로세스 시작할 때 한 개의 큰 블록으로 할당하고
각 쓰레드들이 주소를 적당히 나눠서 사용한다면 괜찮을지도 모르겠군요.

ㅡ_ㅡ;