Search Results for 'sunos'

1 POSTS

  1. 2008/05/30 썬 솔라리스에서 fopen 의 256 한계점..


원문 : Solaris OS Solutions to 32-Bit stdio's 256 File-Descriptors Limitation
번역 : 32-비트 stdio 의 256 파일 디스크립터 제한에 대한 해결책

동시 파일 open 수는 보통
setrlimit(RLIMIT_NOFILE, &rlimitb)
를 통해서 변경을 한다.

이번에 썬 장비에서 부하테스트를 하는데
자꾸 파일 읽기에 실패하는 오류가 발생을 하는거다.

그래서 setrlimit 를 써서 open 수를 조정했는데도
전혀 변함이 없다.
물론 함수 호출함에 있어서 에러는 없었는데 말이지.

그래서 언제나처럼 구글에게 물어봐... ^^

썬 솔라리스는 9버전까지는 시스템적으로 256개밖에 열수가 없다고 하네.
자세한 내용은 제일 상단에 있는 링크를 참조하고 일부만 발췌하면 아래와 같지.

그래서 해결을 할려면 패치가 필요로 한듯 하네.
확인을 하고 싶으면 제일 아래단에 있는 소스코드를 참고하면 될듯.

뭐. 결론은 라이브러리를 수정 요청했다.
은행들이 시스템 잘 안 바꿀려고 하잖아.. ^^

라이브러리내에서 초기 로드시에 한번 파일을 읽도록 수정.
상황종료...

역사적 배경

키워드 Solaris stdio open file descriptors 로 간단하게 찾아 본 결과 솔라리스 stdio 의 256 파일 디스크립터 제한에 대한 많은 자료들이 있었습니다. 1992 request for enhancement (RFE) 가 문제를 설명하고 있습니다: "32-비트 stdio 루틴들은 반드시 255 이상의 파일 디스크립터를 지원해야 한다." 버그 리포트 링크가 몇가지 다른 stdio 의 256 파일 디스크립터 제한에 대한 다른 버그들에 대한 링크를 포함하고 있습니다.

솔라리스의 이러한 제한은 표준 I/O 스트림과 연관된 파일 디스크립터의 값 이 unsigned char 형태로 저장되기 때문입니다. 어떠한 솔라리스 시스템에서도 찾을 수 있는 헤더 /usr/include/stdio_impl.h 에서 FILE 구조체의 정의를 보면 이 글에서 다루고 있는 해결책 을 다루고 있지 않음을 알 수 있습니다:

struct __FILE_TAG       
{
#ifdef _STDIO_REVERSE
        unsigned char   *_ptr;
        int             _cnt;   
#else
        int             _cnt;  
        unsigned char   *_ptr;  
#endif
        unsigned char   *_base;
        unsigned char   _flag;
        unsigned char   _file;  
			/* UNIX System file descriptor */
        unsigned        __orientation:2; 
        unsigned        __ionolock:1;   
        unsigned        __seekable:1;
        unsigned        __filler:4;
};

이름 __FILE_TAG 는 단지 FILE 의 alias 입니다. /usr/include/stdio_tag.h 을 보시기 바랍니다.

멤버 필드 _file 는 파일 디스크립터를 저장하고 있고 unsigned char 타입으로 정의되어 있습니다. unsigned char 는 메모리에서 8비트의 공간을 차지 합니다. 그러므로 _file 은 최고 2^8 즉 256 의 값을 가질 수 있습니다. 다시 말해서 _file 은 32-비트 프로세스당 256개의 파일 디스크립터 만을 가질 수 있도록 제한하고 있습니다. 이러한 제한은 명확하게 stdio(3C) 에 명시되어 있습니다.

썬은 더 많은 파일 디스크립터를 수용하도록 하려고 8-비트 unsigned char 를 16-비트 int 로 변경하지는 않았습니다. 왜냐하면 FILE 구조체의 사이즈를 변경 시키는 것이 솔라리스 이전 버전과의 바이너리 호환성을 망가뜨리는 일이기 때문입니다.




#include <stdlib.h>
#include <sys/resource.h>
#define NoOfFILES 65536

int main()
{
        char filename[10];
        FILE *fds[NoOfFILES];
        int i;
        struct rlimit rlimitb;

        getrlimit(RLIMIT_NOFILE, &rlimitb);
        printf("INFO file descriptor[%d,%d]\n", rlimitb.rlim_cur, rlimitb.rlim_max);
        if(rlimitb.rlim_cur < 1024)
        {
                rlimitb.rlim_cur = 1024;
                if(rlimitb.rlim_max < 1024)
                        rlimitb.rlim_max = 1024;
                if(!setrlimit(RLIMIT_NOFILE, &rlimitb))
                {
                        getrlimit(RLIMIT_NOFILE, &rlimitb);
                        printf("MODY file descriptor[%d,%d]\n", rlimitb.rlim_cur, rlimitb.rlim_max);
                }
        }

        for (i = 0; i < NoOfFILES; ++i)
        {
                sprintf (filename, "./tmp/%05d.log", i);
                fds[i] = fopen(filename, "w");
                if (fds[i] == NULL)
                {
                        printf("\nNumber of open files = %d. fopen() failed with error:  ", i);
                        perror("");
                        exit(1);
                }
                else
                {
                        fprintf(fds[i], "some string");
                }
        }
        return 0;
}

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/05/30 12:40 2008/05/30 12:40

Trackback URL : http://simplelife.pe.kr/tc/trackback/546



뚜는 지금.. 사랑해사랑해
아.. 열심히 살자..
남자B형염소자리인천

Categories

전체 (504)
뚜.. 서툰.. (258)
폰 이야기 (13)
나의 길 (85)
읽을거리 (21)
사진갤러리 (124)

Recent Posts

  1. Android Studio 2.2 에서 layout 미리...
  2. mac 에서 ssh 접속시 한글 입력이 안될때.
  3. Android Studio. Zxing 라이브러리 사...
  4. 안드로이드 프로젝트를 SVN 등록시 bin...
  5. 안드로이드에서 android.annotation 를...

Recent Comments

  1. Thanhk you for this informative read... Software Engineering 2018
  2. 오전부터 이것때문에 하루 종일 고생함... choi 2016
  3. 진짜 님이 하루 죙일 겜방에 갇혀서 있... 굳굳 2015
  4. 대박 이걸 어떻게 찾으셨어요? 덕분에 ... 34524 2015
  5. 와 이건 진짜 신의한수 였네요~ 감사합... interlude 2015

Recent Trackbacks

Bookmarks

  1. ATOMOS
  2. c3cc3's Homepage
  3. 봄실
  4. 우중산보... 그 싱그러운 여유

1316

1013

google chart api graph

-30 days

today : 21

Site Stats

TOTAL 869311 HIT
TODAY 21 HIT
YESTERDAY 1306 HIT