리눅스에서 파일 업다운 서버를 개발하는데 궁금한 점이 있습니다.
글쓴이: lecirar / 작성시간: 금, 2011/02/18 - 2:15오후
CentOS 5.4환경에서 파일 업다운 서버를 개발하고 있습니다.
서버 모델은 접속당 Thread방식으로 간단하게 구현했는데 한 1주일 정도 띄워 놓으면
파일 open에 많게는 60초 이상 걸리는 경우가 가끔 발생하네요.. 이유를 알 수 없습니다.
파일 open에는 fopen()을 사용하고 있습니다. Thread는 동시에 300개 정도 띄워서 pool로 관리합니다.
저런 증상이 발생할 때의 동시 접속은 100명이 좀 넘는 상황이라 큰 부하는 아니라고 생각합니다.
왜 이런 문제가 있는지 비슷한 문제를 겪어보셨거나 원인을 아시는 분 계시면 가르침을 부탁드립니다.
그리고 추가로 time()과 localtime()으로 tm 형태의 값을 얻어와서 오늘 날짜 이름으로 로그를 출력하고 있는데,
가끔씩 전혀 다른 숫자가 나오는 경우가 있네요. 20110218 로 나오다가 갑자가 20110309로 나온다던가 이럴 때가 있는데
이건 왜 그런건지도 모르겠네요. 답변 부탁드립니다..
Forums:
혹, localtime_r()을 안쓰고,
혹, localtime_r()을 안쓰고, localtime()을 쓰시는건 아니겠죠?
악..!! localtime_r() 이런게 있었군요..;;
보긴 봤는데 뭐하는 함수인지 잘 몰라서 넘어갔었는데 localtime()이 thread safe하지 않다는걸 덕분에 알게 됐습니다.
감사합니다..!!
이제 파일 open 느린문제만 해결되면 되겠는데...
lsof 와 strace를 이용하여 좀 더 상황을
lsof 와 strace를 이용하여
좀 더 상황을 파악할만한 자료를 모아보세요.
정말 fopen()에서 리턴이 블럭된 상태로 지연되다가 리턴하는게 맞는건가요?
지연되고 있을때, strace()로 어떤 시스템콜을 호출하려하는지도 찾아보시고, 혹은
fopen() 대신 open() system call을 직접 호출해보세요.
이런경우, open()의 문제보다
대부분 호출하는 프로그램의 찾기 어려운 버그로인해 발생한 경우가 많습니다.
댓글 달기