[질문] 서버 메모리 한계
글쓴이: nTachyon / 작성시간: 토, 2004/04/24 - 3:16오후
안녕하세요...
제가 서버를 하나 맹글었는데... 문제가 좀 생기네요.
조언을 요청하는 측면에서 이렇게 글을 올립니다.
일단 지금 상황은... 클라이언트 측에서 특정 기간의 데이터를 서버에 요청하면... 서버가 데이터를 돌려주는데...
이때... 클라이언트는 20번의 요청을 기간을 다르게 하여 보내면 서버는 이를 세션관리모듈에서 요청이 올 때 마다 누적아여 저장하고 있다가(malloc을 통해 메모리를 할당해 추가하죠) 마지막 요청시 누적된 데이터를 한꺼번에 돌려주게 됩니다. 그 후 메모리를 해제하고요
이럴 때 요청이 적으면 문제가 안되지만, 요청 클라이언트가 많아질 경우... 당연히 서버 측면에서는 할당 받을 수 있는 메모리 량이 한계에 도달하는 듯 합니다.
(요청이 들어오는 와중에는 여러 클라이언트가 계속 malloc이 필요한 요청을 보내고 있으니 말이죠)
때문에 malloc이 실패하게 되고... 최종적으로 죽게 되지요.
그렇다고 파일에 쓰자니 이 역시 파일을 열 수 있는 한계가 있으므로 해결책은 되지 않을 듯 합니다.
문제되는 부분을 찾는데도 한참이 걸렸네요 -_-;
메모리도 아니고 파일도 아닌... 다른 어떤 디자인이 있을까요?
경험 많은 분들의 조언 부탁드립니다.
Forums:
접속당 그 누적되는 메모리의 추정치와 클라이언트 수가 어떻게 되며 서버
접속당 그 누적되는 메모리의 추정치와 클라이언트 수가 어떻게 되며 서버 머신의 칩셋과 메모리, 스왑 등 계산할 수 있는 팩터가 있어야 하지 않을까요?
이건 어떨까요
제가 이해한것은.
각각 다른 기간에 요청이 20번 오게 되면, 하나의 세션으로 판단하며, 이를
누적하여, 마지막에 모두 모아 답변을 한다.
그렇다면 이건 어떨까요.
처음 오는 요쳥에 따라 하나의 세션을 만들고, 하나의 세션에는 20개의 데이타
를 저장할 파일 위치 및 이름(session id로?)만 갖게 하는거죠. 또는 inode(inode로 하면 배보다 배꼽이 커질 수도 있겠군요)
이렇게되면, 20개에 대한 응답을 메모리에 갖고 있지 않아도 되고,
저장 장치의 어떤 위치에 있는지 위치 정보만을 유지하게 되는 것이죠.
물론, 언젠가 (엄청나게 많은 데이타가 와서 이또한 넘어간다면야..)
또한, 20개의 요청이 모두 된 세션인 경우 해당 파일을 열어 응답을 보내주고
파일 정보를 가진 노드를 삭제하고, 파일을 삭제. 또는 재사용.
하면 어떨까요.
파일이름을 파일이름을 255자로 하고, 노드 링크에 (구현에 따라 틀리겠지만) 크게 12bytes라고 하죠. 하나의 노드에 저장된 요청된 세션의 갯수 4bytes
하면 대략 300 바이트 안에서 하나의 세션이 해결될것이라고 생각됩니다.
어떤 상황인지 전체적인 이해가 부족해서. 보이는 부분만 보고 쉽게 생각해 보았습니다.
https://nicesj.com
https://blog.nicesj.com
댓글 달기