[HP-UX] Message Queue 사이즈 변경 및 적용

2022. 12. 21. 18:10W.IT/W.유닉스

HP-UX 11.31 버전에서 Message Queue Full 이슈로 인하여 해당 Message Queue의 크기를 확인해보니 64k였습니다.

 

 평소엔 충분하겠지만 많은 메시지가 들어왔을 때는 부족한 사이즈겠죠..

 

  * Message Queue 크기 확인방법

$>ipcs -qa | grep [사용자]
q   87031860 0xdd000002 --rw-rw-rw-    test     users    test     users      0     0 65535     0     0 no-entry no-entry 17:30:54

 

커널 쪽에 Message Queue 사이즈를 확인해보니 아래와 같았습니다.

 

$>/usr/sbin/kctune | grep msg
msgmbs                         8        Default     Immed
msgmnb                         1280000  1280000     Immed
msgmni                         512      Default     Immed
msgtql                         1024     Default     Immed
msgmbs - 모든 Message Queue의 최대 MB 수
msgmnb - 하나의 Message Queue의 최대 바이트 수
msgmni - 전체 Message Queue의 메시지 대기열(ID)의 최대 수
msgtql - Message Queue의 최대 메시지 수

   ☞ kctune : HP-UX 커널 parameter를 보는 명령어 (util)

 

그렇다면 Message Queue가 생성될 때 커널 사이즈 값인 1280000Byte로 생성이 돼야 하지만 무조건 64k로 생성되더라고요...

 

인터넷 검색 결과,

 Message Queue 값의 사이즈를 제한 이상 늘리기 위해선 Make 할 시 특정 옵션 값을 추가하여 컴파일해줘야 된다는 것을 알았습니다.

 

-D__BIGMSGQUEUE_ENABLED

위 옵션을 msgget ( Message Queue 생성 함수 ) 이 존재하는 소스 컴파일 시 추가하여해줘야 합니다.

 

만약 해당 소스가 정적 라이브러리일 경우에는 해당 라이브러리를 사용하는 모든 프로세스를 다시 컴파일해 줘야겠죠.

 (동적 라이브러리 포함)

 

컴파일 후 Message Queue의 사이즈를 확인해보니 정상적으로 바뀐 모습을 확인할 수 있었습니다.

$>ipcs -qa | grep [사용자]
q   87031860 0xdd000002 --rw-rw-rw-    test     users    test     users      0     0   1280000     0     0 no-entry no-entry 17:56:54

 

추가적으로, 만약 커널 메시지 사이즈가 작을 때, 변경하는 방법도 공유드립니다.

 * 해당 방법은 root 계정으로 진행하셔야 합니다.

 

 kctune을 이용하여 변경하시면 됩니다.

 

  [ kctune 사용 설명 ]

usage: kctune [-dghuvBDKS] [-b backup] [-c config] [-C comment] [-F fmt]
              [-m module] [-P fields] [args...]
       args are:
           tunable            (query tunable)
           tunable=           (set tunable to default)
           tunable=Default    (set tunable to default)
           tunable=expr       (set tunable to expression)
           tunable+=value     (increase tunable by value)
           tunable>=value     (set tunable to value if currently less)

 

  [ msgmbs 값 변경 예시 ]

# kctune msgmbs=9
       * The automatic 'backup' configuration has been updated.
       * The requested changes have been applied to the currently
         running configuration.
Tunable            Value  Expression  Changes
msgmbs   (before)      8  Default     Immed
         (now)         9  9  


# kctune msgmbs=
       * The automatic 'backup' configuration has been updated.
WARNING: sysV_msgmbs_perspu_reserve is not recalculated.
         
       * The requested changes have been applied to the currently
         running configuration.
Tunable            Value  Expression  Changes
msgmbs   (before)      9  9           Immed
         (now)         8  Default

 

위 해당 명령어는 "msgmbs" 값을 default로 변경한 예시이고,

만약 "msgmnb"를 변경하시고 싶으시다면 "msgmbs" 대신 "msgmnb"로 바꾸어 변경 진행해 주시면 됩니다.


 제 글에서 부족하거나 잘못된 부분이 있다면 댓글로 남겨주시길 부탁드립니다.

※ 제 글은 제가 코딩하면서 지속해서 확인하기 위한 히스토리 성 정보들이자 회사 생활 중 실제 프로그램을 코딩하며 중요하거나 필요했던 정보들을 공유하기 위해 적은 글입니다.