음.....프로그램이 이상하게 아무 이유없이 자꾸 죽어서 왜 그런지 이유를 찾다가 우연히 Too many open files 라는 메시지를 보게 되었습니다.
아...너무 많은 파일들이 열려있다고 하는군요.
한 프로세스가 열 수 있는 파일의 수는 제한되어 있더군요.

ulimit -a 하면
통지(설명자) 256

이라고 나오는데요(영문판에서는 nofiles(descriptors) 이라고 나오더군요)

그 제한수만큼 fopen을 한다던지 소켓을 생성한다든지 해버리고 안 닫아버리면(close나 fclose) 계속 프로세스가 열고 있는 거더군요. 그래서 이거를 안 닫아주면 계속 생깁니다.
그 프로세스가 열고 있는 파일들을 보기 위해서는 이렇게 하면 됩니다.
우선 lsof프로그램을 설치해야합니다. 솔라리스에는 없어서 설치했어요-_-;
이 프로그램이 현재 열고 있는 파일이나 소켓 등을 찾아줍니다.

lsof -p 프로세스ID

하면 목록이 나오는데 그중에 안 닫고 있는게 있으면 그걸 소스에 찾아서 fclose나 close해줍니다.
 
Posted by 머드초보

댓글을 달아 주세요