2022. 12. 21. 18:10ㆍW.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"로 바꾸어 변경 진행해 주시면 됩니다.
※ 제 글에서 부족하거나 잘못된 부분이 있다면 댓글로 남겨주시길 부탁드립니다.
※ 제 글은 제가 코딩하면서 지속해서 확인하기 위한 히스토리 성 정보들이자 회사 생활 중 실제 프로그램을 코딩하며 중요하거나 필요했던 정보들을 공유하기 위해 적은 글입니다.
'W.IT > W.유닉스' 카테고리의 다른 글
[AIX] 프로세스 통신 중 DISK I/O가 100% 차는 현상 (0) | 2021.10.03 |
---|---|
[유닉스/리눅스] popen , pclose 정리 및 사용 예제 (0) | 2021.08.01 |
[리눅스/유닉스] 프로젝트 서버 구축 기본 환경 정리 (0) | 2021.07.29 |
[Unix/Linux] Signal 의 종류 (0) | 2021.02.27 |