공유메모리 사용 문제

robo의 이미지

서버와 클라이언트간의 데이터 공유를 위해 공유메모리를 사용하고 있습니다.
영상데이터라서 소켓으로 보내기에는 문제가 있을것 같구요...

서버는 한개고... 클라이언트는 여러개가 되는데요..

일단 클라이언트에서 영상데이터를 요청하면 서버는 공유메모리를 만들고 클라이언트에게 공유메모리 키값과 크기를 보내주게 되는데요...

클라이언트에서 그 공유메모리에서 데이터를 읽어오는것은 잘 됩니다..
그런데... 한개의 클라이언트에서 공유메모리에 접근..shmget()하면

계속 attach number가 증가합니다.... 그게 원래 정상인지.....요??
문제는 그렇게 되니... 메모리누수가 나고 있습니다...흠....

nthroot의 이미지

매번 공유메모리 만드는것 보다 소켓을 쓰는게 나을것 같은데요.
UDS 를 써보세요.

------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.

ddoman의 이미지

저도 윗분처럼 답은 아니지만 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

Quote:

확실히 Unix Domain Socket 가 다른것들 보다 느리긴 하지만, 느림이 문제가 되는경우는 없을것 같다. 계산을 해보면 알겠지만.. 71 바이트씩 메시지를 전송 했을경우 초당 28만건의 메시지 전송이 가능하며 512 바이트식 메시지를 전송했을경우 초당 약 24만건의 메시지 전송이 가능하다라는 계산이 나온다. 즉 어떤 IPC 를 사용하더라도 속도때문에 문제가 되는경우는 거의 없다고 봐도 무관하다라고 볼수 있다.

그렇다면 좀더 프로그래밍 하기 쉽고, 안정적이고 확장성이 용이한 쪽에 중심을 두고 IPC 설비를 선택해야 할것이다.

항상 성능을 생각할 때는 병목이 어느곳인가가 진단하는것이 중요한것 같습니다. 대부분의 경우 unix domain socket이면 IPC로는 충분할듯 싶습니다. 무엇보다 소켓이랑 API가 같다는게 가장 큰 장점이고요.

ssehoony의 이미지

ddoman wrote:

Quote:

확실히 Unix Domain Socket 가 다른것들 보다 느리긴 하지만, 느림이 문제가 되는경우는 없을것 같다. 계산을 해보면 알겠지만.. 71 바이트씩 메시지를 전송 했을경우 초당 28만건의 메시지 전송이 가능하며 512 바이트식 메시지를 전송했을경우 초당 약 24만건의 메시지 전송이 가능하다라는 계산이 나온다. 즉 어떤 IPC 를 사용하더라도 속도때문에 문제가 되는경우는 거의 없다고 봐도 무관하다라고 볼수 있다.

그렇다면 좀더 프로그래밍 하기 쉽고, 안정적이고 확장성이 용이한 쪽에 중심을 두고 IPC 설비를 선택해야 할것이다.



이 성능 평가는 어떤걸 기준으로 한것인가요?
벤치마크 결과는 항상 어떤 기준하에서 어떻게 테스트 한것인지 명시를 해줘야 좀 더 객관적인 자료가 될 듯 하군요.
UDS가 다른 것 보다 느리다는 것도 좀 우습군요. IP랑 비교 하면 UDS가 빠르죠. 파이프나 메시지큐, 공유메모리에 비해 느리다는 것인가요?
(위의 인용이 틀렸다는 것이 아니고 비교 기준이나 상황이 모호하다는 말입니다 ^^)

attach 는 shmget 을 통해 열결 될때 마다 증가합니다.
하나의 클라이언트에서 한번만 shmget 했다고 생각하는데 attach 가 증가한다면 뭔가 잘 못 코딩하신 것이라고 생각하시면 될 듯 하네요.

다른 분들 께서는 UDS 를 사용하라고 하셨는데, 제 생각에는 원래 계획하신 방법이 좋을 듯 합니다.
변경이 빈번하지 않는 고용량 데이터를 로컬에서 공유할 때는 소켓등으로 데이터를 모두 전송하는 것보다 소켓으로는 데이터의 변경여부만을 알려주고, 실제 덩치큰 데이터는 공유메모리를 이용하는 것이 하나의 테크닉으로 알려져 있습니다.

익명 사용자의 이미지

역시나.. 클라이언트쪽에서 shmget해서 데이터를 받은 후에

shmdt로 떼어내야 합니다...그래야 항상 attach Number가 늘어나지 않더군요..^^

메모리 릭은 다 잡힌 상황입니다...^^

빠르면 초당 20~30프레임...느리면 초당 5~10프레임의 영상이 클라이언트에 전달되어야 하는데..

어찌됐던 소켓을 사용하면 안될것 같드라구요..^^ 네트웍 자원을 여기서 다 소비해 버리면 다른 프로그램은 사용하지 못할꺼라고 생각됩니다만....

tinywolf의 이미지

한 컴퓨터 안에서 돌아가는 거라면야..
공유메모리도 좋은 선택인듯..

ㅡ_ㅡ;

ddoman의 이미지

ssehoony wrote:

이 성능 평가는 어떤걸 기준으로 한것인가요?
벤치마크 결과는 항상 어떤 기준하에서 어떻게 테스트 한것인지 명시를 해줘야 좀 더 객관적인 자료가 될 듯 하군요.
UDS가 다른 것 보다 느리다는 것도 좀 우습군요. IP랑 비교 하면 UDS가 빠르죠. 파이프나 메시지큐, 공유메모리에 비해 느리다는 것인가요?
(위의 인용이 틀렸다는 것이 아니고 비교 기준이나 상황이 모호하다는 말입니다 ^^)

혹시 링크의 글을 읽어보시지 않으셨나요?
링크안의 글을 인용한거라고 써놨는데...답글을 다시기전에 상대방의 글을 천천히 읽어보시는 습관을 가지시는게 8)

아 그렇다고 링크에 건 글이 무조건 맞다고 하는건 아니고, 단지 그 글에 있는 결론에 공감이 갔고 경험상 저도 그런 방법을 선택했다는 글이었습니다.

링크를 보시면 테스트 방법과 코드들이 나와있습니다.

ssehoony의 이미지

ddoman wrote:
ssehoony wrote:

이 성능 평가는 어떤걸 기준으로 한것인가요?
벤치마크 결과는 항상 어떤 기준하에서 어떻게 테스트 한것인지 명시를 해줘야 좀 더 객관적인 자료가 될 듯 하군요.
UDS가 다른 것 보다 느리다는 것도 좀 우습군요. IP랑 비교 하면 UDS가 빠르죠. 파이프나 메시지큐, 공유메모리에 비해 느리다는 것인가요?
(위의 인용이 틀렸다는 것이 아니고 비교 기준이나 상황이 모호하다는 말입니다 ^^)

혹시 링크의 글을 읽어보시지 않으셨나요?
링크안의 글을 인용한거라고 써놨는데...답글을 다시기전에 상대방의 글을 천천히 읽어보시는 습관을 가지시는게 8)

아 그렇다고 링크에 건 글이 무조건 맞다고 하는건 아니고, 단지 그 글에 있는 결론에 공감이 갔고 경험상 저도 그런 방법을 선택했다는 글이었습니다.

링크를 보시면 테스트 방법과 코드들이 나와있습니다.

네 링크에 있는 내용이었군요. 죄송합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.