솔라리스 공유 메모리 shmat 에서 Not enought space 에러에 대해 질문

lieps의 이미지

안녕하세요~

다름이 아니라 솔라리스 10 에서 공유메모리 사용에 있어서
궁금한 점이 생겨 이렇게 문의 드립니다.

관련내용에 대하여 여기 저기 많이 자료를 찾아 봤는데요,
딱히 원하는 답이 없네요.

솔라리스 10 에서 중계서버 역할을 하는 것을 개발중인데요.
중간에 전문들의 유효성 여부를 shared-memory 에 정상/비정상/통신에러 .. 같은 항목을 두고
전문들의 유효성을 +1 해가며 사용중입니다.

문제는, 지금 스트레스 테스트 중인데요. 만여건 이상의 동시 전문을 받아서 처리하면서
shmat 된 구조체 변수 안에 값을 +1 씩 증가시키면서 사용하고 있습니다.

그런데 만여건 이상을 읽고 쓰고 하면서 어느순간 shmat 에서 "Not enough space" 하면서
shmat 가 실패하고 마네요.

혹시 이런현상에 대하여 알고 계신다면, 조언좀 부탁드립니다.

솔라리스 10 에서 gcc 3.4.6 으로 개발중이구요.
shmat 하고 shmdt 는 하지 않고 있습니다. (이게 혹시 문제가 될까요?)
불안하게 생각되는게 공유메모리를 읽고 쓸때 마다 shmat 를 계속 해주고 있습니다.(이것도 문제가 될까요?)

공유메모리를 읽고 쓰는 함수 마다 shmat 를 해주고 있구요.
각 전문이 들어올때마다 공유메모리를 읽고 쓰는 것을 반복 하고 있습니다.

멀티 쓰레드 환경이고요, pthread 를 쓰고 있고, 공유메모리에 접근할때마다 mutex 는 걸어주고 있습니다.

조언 부탁 드립니다~!

IsExist의 이미지

먼저 ipcs -m 명령어로 현재 생성되어 있는 shared 메모리를 확인해 보세요.
솔라리스라면 /etc/system 에서 전체 shared 메모리 최대값을 지정해 두고
있습니다.

아래 링크 참조하세요.
http://docs.sun.com/app/docs/doc/817-0404/chapter1-33?a=view

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

IsExist의 이미지

같은 shmid 에 대해 매번 shmat를 호출할때 동일한 포인터를 넘긴다는
보장이 없습니다. 물론 shmid 가 같다면 같은 영역을 가리키 겠지만
리턴되는 포인터 값은 다를 수 있습니다. 만약 리턴되는 주소값이 매번
틀리다면 shmdt를 쌍으로 호출해야 될것 같네요.

pthread 기반이라면 전역변수로 두시고 shmat를 한번만 호출하는 걸로
하세요. pthread_once_t를 사용해서 shmat 호출은 한번으로 할 수 있습니다.

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

lieps의 이미지

감사합니다.

shmat 와 shmdt 를 쌍으로 호출하도록 수정했습니다.
일단, 테스트를 더 해보아야 하지만, 아직 까진 정상적으로 동작하는 듯 보입니다.
shmat 를 한번만 호출하도록 수정하는 방안도 생각중입니다.
많은 도움이 되었습니다:-)
---
To solve an interesting problem,
start by finding a problem that is interesting to you.

---
To solve an interesting problem,
start by finding a problem that is interesting to you.

chadr의 이미지

공유메모리 포인터를 매번 가져오는 것 또한 문제가 될수 있습니다.
공유 메모리의 용량이 어느정도 되는지 모르겠지만 매우 많은 경우에는

매번 포인터를 가져올 때마다 공유메모리 만큼의 프로세스영역에 매핑을 해야하는데
매우 많은 쌍의 포인터를 가져오고 놓아주는 식이 된다면 어느 순간 연속된 메모리를
매핑하지 못해서 그런 현상이 일어날수 있습니다.

가능한 한번만 포인터를 가져와서 사용하도록 하시는 편이 좋을것 같습니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

lieps의 이미지

감사합니다. 좋은 걸 알았습니다. :-)
---
To solve an interesting problem,
start by finding a problem that is interesting to you.

---
To solve an interesting problem,
start by finding a problem that is interesting to you.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.