공유메모리 사용 문제
글쓴이: robo / 작성시간: 금, 2005/10/14 - 2:26오후
서버와 클라이언트간의 데이터 공유를 위해 공유메모리를 사용하고 있습니다.
영상데이터라서 소켓으로 보내기에는 문제가 있을것 같구요...
서버는 한개고... 클라이언트는 여러개가 되는데요..
일단 클라이언트에서 영상데이터를 요청하면 서버는 공유메모리를 만들고 클라이언트에게 공유메모리 키값과 크기를 보내주게 되는데요...
클라이언트에서 그 공유메모리에서 데이터를 읽어오는것은 잘 됩니다..
그런데... 한개의 클라이언트에서 공유메모리에 접근..shmget()하면
계속 attach number가 증가합니다.... 그게 원래 정상인지.....요??
문제는 그렇게 되니... 메모리누수가 나고 있습니다...흠....
Forums:
매번 공유메모리 만드는것 보다 소켓을 쓰는게 나을것 같은데요.UDS
매번 공유메모리 만드는것 보다 소켓을 쓰는게 나을것 같은데요.
UDS 를 써보세요.
------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.
저도 윗분처럼 답은 아니지만 uds 권유를..=3=3저의 경우도
저도 윗분처럼 답은 아니지만 uds 권유를..=3=3
저의 경우도 얼마전에 몇 가지 IPC 설비들에 대해 무엇을 선택해야하나 재보고 고민했었습니다. 아무래도 성능에 민감한 부분이라고 생각을 했기에 가능하면 성능이 좋은 IPC를 사용하여 통신을 해보고싶었기 때문이죠.
그래서 질문하신분처럼 공유메모리도 생각했다가, 파이프, 소켓 등 고민을 했었습니다. 결국 unix domain socket으로 했는데, 아래 링크의 글에 나와있는 결론에 공감이 갔습니다.
http://www.joinc.co.kr/modules/moniwiki/wiki.php/article_IPC_%BC%BA%B4%C9%C5%D7%BD%BA%C6%AE
항상 성능을 생각할 때는 병목이 어느곳인가가 진단하는것이 중요한것 같습니다. 대부분의 경우 unix domain socket이면 IPC로는 충분할듯 싶습니다. 무엇보다 소켓이랑 API가 같다는게 가장 큰 장점이고요.
[quote="ddoman"][quote]확실히 Unix Doma
이 성능 평가는 어떤걸 기준으로 한것인가요?
벤치마크 결과는 항상 어떤 기준하에서 어떻게 테스트 한것인지 명시를 해줘야 좀 더 객관적인 자료가 될 듯 하군요.
UDS가 다른 것 보다 느리다는 것도 좀 우습군요. IP랑 비교 하면 UDS가 빠르죠. 파이프나 메시지큐, 공유메모리에 비해 느리다는 것인가요?
(위의 인용이 틀렸다는 것이 아니고 비교 기준이나 상황이 모호하다는 말입니다 ^^)
attach 는 shmget 을 통해 열결 될때 마다 증가합니다.
하나의 클라이언트에서 한번만 shmget 했다고 생각하는데 attach 가 증가한다면 뭔가 잘 못 코딩하신 것이라고 생각하시면 될 듯 하네요.
다른 분들 께서는 UDS 를 사용하라고 하셨는데, 제 생각에는 원래 계획하신 방법이 좋을 듯 합니다.
변경이 빈번하지 않는 고용량 데이터를 로컬에서 공유할 때는 소켓등으로 데이터를 모두 전송하는 것보다 소켓으로는 데이터의 변경여부만을 알려주고, 실제 덩치큰 데이터는 공유메모리를 이용하는 것이 하나의 테크닉으로 알려져 있습니다.
제 실수 맞습니다..^^
역시나.. 클라이언트쪽에서 shmget해서 데이터를 받은 후에
shmdt로 떼어내야 합니다...그래야 항상 attach Number가 늘어나지 않더군요..^^
메모리 릭은 다 잡힌 상황입니다...^^
빠르면 초당 20~30프레임...느리면 초당 5~10프레임의 영상이 클라이언트에 전달되어야 하는데..
어찌됐던 소켓을 사용하면 안될것 같드라구요..^^ 네트웍 자원을 여기서 다 소비해 버리면 다른 프로그램은 사용하지 못할꺼라고 생각됩니다만....
한 컴퓨터 안에서 돌아가는 거라면야..공유메모리도 좋은 선택인듯..
한 컴퓨터 안에서 돌아가는 거라면야..
공유메모리도 좋은 선택인듯..
ㅡ_ㅡ;
[quote="ssehoony"]이 성능 평가는 어떤걸 기준으로 한것
혹시 링크의 글을 읽어보시지 않으셨나요?
링크안의 글을 인용한거라고 써놨는데...답글을 다시기전에 상대방의 글을 천천히 읽어보시는 습관을 가지시는게 8)
아 그렇다고 링크에 건 글이 무조건 맞다고 하는건 아니고, 단지 그 글에 있는 결론에 공감이 갔고 경험상 저도 그런 방법을 선택했다는 글이었습니다.
링크를 보시면 테스트 방법과 코드들이 나와있습니다.
[quote="ddoman"][quote="ssehoony"]이 성능
네 링크에 있는 내용이었군요. 죄송합니다.
댓글 달기