Message queue 갯수 조절하기

리눅스에서는 여러가지 IPC(Interprocess Communication) 을 지원한다.

그 중, 메시지 큐의 경우 기본으로 잡혀있는 Open 가능한 최대 갯수는 16개로 지정되어 있는데, 간혹 여러 개의 메시지 큐를 사용하는 프로그램을 사용한다거나 등의 이유로 많은 갯수의 Message Queue가 필요한 경우 에러가 발생한다.

오늘 있었던 일도 그 중 하나였는데, 계속 해서 프로그램 구동시, Message Queue의 생성이 실패하며 자꾸 프로그램이 죽는 현상이 발생했다. 한참을 고민하다가 선임의 도움으로 해결할 수 있었다.

문제의 파악은 icps -q 명령어로 시작한다.

현재 운용 중인 많은 수의 메시지 큐. 이것이 문제였다.

[cube@cube1 RUN]$ ipcs -q

—— Message Queues ——–
key        msqid      owner      perms      used-bytes   messages
0x00015d40 0          cube       666        0            0
0x00015d41 32769      cube       666        0            0
0x00018388 1441794    cube       666        0            0
0x00018389 1474563    cube       666        0            0
0x000182bb 5079044    cube       666        0            0
0x000182eb 5111813    cube       666        0            0
0x000182ec 5144582    cube       666        0            0
0x000182b9 5177351    cube       666        0            0
0x000182ba 5210120    cube       666        0            0
0x000182bc 5242889    cube       666        0            0
0x0000ea60 5505034    cube       666        0            0

 

곧바로 확인 해 본 생성가능한 메시지 큐 갯수. 16개다. 당연히 문제가 생길 수 밖에.

[cube@cube1 RUN]$ ipcs -lq

—— Messages: Limits ——–
max queues system wide = 16
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

구글링을 해보니 커널소스의 msg.h 헤더 파일에서

#define MSGMNI 16 /* <= IPCMNI */ /* max # of msg queue

부분을 원하는 양으로 수정한 후, 다시 커널 컴파일을 수행하면 된다고 한다. 하지만 저 부분 하나만을 위해 커널 컴파일을 하기에는 너무 비효율적이다. 다행히 다른 방법이 있었다.

sysctl 명령어를 통한 수정 방법도 있었다. 재부팅이 되면 이 설정은 다시 초기화가 되지만 방법과(rc.local 파일에 설정한다거나..) 때에(잠시만 사용할 경우) 따라서는 요긴한 방법이다.

root 계정으로 로그인한 후, sysctl 명령어를 통해 메시지 큐의 갯수를 늘리는 방법은 아래와 같다.

sysctl -w kernel.msgmni=32

다음은 위의 명령어 이후에 확인한 메시지 큐의 내용들이다.

[cube@cube1 RUN]$ ipcs -q

—— Message Queues ——–
key        msqid      owner      perms      used-bytes   messages
0x00015d40 0          cube       666        1            1
0x00015d41 32769      cube       666        0            0
0x00018388 1441794    cube       666        0            0
0x00018389 1474563    cube       666        0            0
0x000182bb 5079044    cube       666        0            0
0x000182eb 5111813    cube       666        0            0
0x000182ec 5144582    cube       666        0            0
0x000182b9 5177351    cube       666        0            0
0x000182ba 5210120    cube       666        0            0
0x000182bc 5242889    cube       666        0            0
0x0000ea60 5505034    cube       666        0            0
0x0000ea61 5537803    cube       666        0            0
0x0000ea62 5570572    cube       666        0            0
0x0000ea63 5603341    cube       666        0            0
0x0000ea64 5636110    cube       666        0            0
0x0000ea65 5668879    cube       666        0            0
0x0000ea66 5701648    cube       666        0            0

 

[cube@cube1 RUN]$ ipcs -lq

—— Messages: Limits ——–
max queues system wide = 32
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

 

noeol – NO End Of Line

APUE 예제를 따라하다가 이상한 부분을 발견했다.

예제 파일을 실행한 후 생성된 결과 파일을 Vi 에디터로 열었더니 아래의 스크린샷처럼 나온 것.

파일 안의 내용은 정상이다. 하지만 문제점은 마지막 부분 “file.hole” [noeol] 부분.

리눅스를 사용하기때문에 자주 Vi 에디터를 사용하는 나로서는 처음 보는 메시지였기에 관심이 갔다. 찾아보니 원인은 간단.

http://www.computing.net/answers/unix/last-line-is-not-complete/7506.html

의 경로에서 그 내용을 확인할 수 있었다.

내용인즉, 파일의 마지막 줄이 Line Feed (개행문자)로 끝나지 않아서 vi에서 그 내용을 알려주는 부분이라는 것이다.

위의 경고를 없애고 싶다면 간단하다. 마지막 라인의 마지막째에 빈칸을 삽입하던가 혹은 echo “” >> file.hole 과 같은 방법으로 빈줄을 하나 추가하면 된다.

VMware network service 문제

 우분투 10.04-Desktop 버전에서 VMware 7.1.1 버전을 설치하고 사용을 하던 중 한가지 문제점을 발견했다.

 가상 머신을 실행 시킬때 마다 자동으로 네트워크 설정을 잡지 못하는 문제가 발생하는 것이다.
 
 정확하게 이야기 하면 가상머신을 실행시킬때마다 VMware 내의 Virtual Network Editor 를 실행하여 다시금 가상 네트워크 환경을 설정해 주어야 가상머신에서 네트워크 설정을 알아채는 문제였다.

 해결법을 찾아보니 아래의 링크에서 그 문제점의 원인과 해결방법을 찾을 수 있었다.

 http://www.ubuntu.or.kr/viewtopic.php?p=18214

 문제점의 원인은 우분투의 네트워크 관리 도구인 Network Manager가 VMware의 가상 장치인 vmnet1과 vmnet8을 관리하려고 하는 과정에서 일어난 것이었다.

 매 부팅(우분투) 때마다 Network Manager에서 인터넷 연결 설정을 재 설정하기 때문에 VMware의 가상장치 들의 설정을 덮어버리는 문제였던 것이다.

 해결책은 아래의 링크에 나와있었다.

http://ubuntuforums.org/showthread.php?t=1041589

/etc/network/interfaces 파일의 내에 다음의 명령을 추가하면 된다.
해당 인터페이스에 대한 설정을 수동으로 관리하겠다는 내용이다.

auto lo
iface lo inet loopback

auto vmnet0
iface vmnet0 inet manual

 vmnet0 부분을 VMware 에서 설정한 인터페이스 이름으로 변경 혹은 추가를 시켜주면 된다.

daytime server list

 Linux Socket Programming 책을 공부하다가 daytime 서버를 이용한 예제가 있어서 따라하던 중, 문득 내 리눅스 머신에는 daytime 데몬이 가동중이지 않다는 것을 알게 되었다.

 잠시 구글링을 한 결과 알게 된 경로를 이곳에 정리한다.

 한국의 경우, 보통은 time.bora.net 의 ntp 서비스를 사용한다.

 아래는 daytime 서비스를 위한 미국의 서버 리스트들이다.

 http://tf.nist.gov/tf-cgi/servers.cgi

Name IP Address Location Status
nist1-ny.ustiming.org 64.90.182.55 New York City, NY Recommended for new users
time-a.nist.gov 129.6.15.28 NIST, Gaithersburg, Maryland Ok
time-b.nist.gov 129.6.15.29 NIST, Gaithersburg, Maryland Ok
nist1.aol-va.symmetricom.com 64.236.96.53 Reston, Virginia Recommended for new users
nist1-pa.ustiming.org 206.246.122.250 Hatfield, PA Ok — recommended for new users
nist1.columbiacountyga.gov 68.216.79.113 Columbia County, Georgia Recommended for new users
nist1-chi.ustiming.org 208.66.175.36 Chicago, Illinois Recommended for new users
nist.expertsmi.com 173.14.47.149 Monroe, Michigan Recommended for new users
nist.netservicesgroup.com 64.113.32.5 Southfield, Michigan Recommended for new users
nisttime.carsoncity.k12.mi.us 66.219.116.140 Carson City, Michigan Recommended for new users
wwv.nist.gov 24.56.178.140 WWV, Fort Collins, Colorado Recommended for new users
time-a.timefreq.bldrdoc.gov 132.163.4.101 NIST, Boulder, Colorado Ok
time-b.timefreq.bldrdoc.gov 132.163.4.102 NIST, Boulder, Colorado Very busy
time-c.timefreq.bldrdoc.gov 132.163.4.103 NIST, Boulder, Colorado ok
time.nist.gov 192.43.244.18 NCAR, Boulder, Colorado Very busy
utcnist.colorado.edu 128.138.140.44 University of Colorado, Boulder ok
utcnist2.colorado.edu 128.138.188.172 University of Colorado, Boulder ok
ntp-nist.ldsbc.edu 198.60.73.8 LDSBC, Salt Lake City, Utah temporary network problem
nist1-lv.ustiming.org 64.250.229.100 Las Vegas, Nevada ok — Recommended for new users
time-nw.nist.gov 131.107.13.100 Microsoft, Redmond, Washington ok
nist1.aol-ca.symmetricom.com 207.200.81.113 Mountain View, California ok
nist1.symmetricom.com 69.25.96.13 San Jose, California Recommended for new users
nist1-sj.ustiming.org 65.50.199.148 San Jose, California system to be moved to new location
nist1-la.ustiming.org 64.147.116.229 Los Angeles, California Recommended for new users

 

apt source list for Debian sarge

 gcc 버전 문제로 인하여 데비안-3.1 Sarge 를 설치하던 중, 더이상 기존의 stable apt 업데이트는 sarge 및 기타 하위 버전을 지원하지 않는 것을 알았다.

 아마도, 다른 아카이브로 옮겨간 듯 싶어 잠시 공식 아카이브를 찾아보니 다음의 메시지를 볼 수 있었다.

See http://www.debian.org/ for information about Debian GNU/Linux.

This FTP site is a repository for old debian releases. For new releases
please see ftp://ftp.debian.org/debian/.

Releases are stored by their codenames under the dists/ directory.
etch is Debian 4.0
sarge is Debian 3.1
woody is Debian 3.0
potato is Debian 2.2
slink is Debian 2.1
hamm is Debian 2.0
bo is Debian 1.3
rex is Debian 1.2
buzz is Debian 1.1

If you are using APT the relevent sources.list entries are like:
deb http://archive.debian.org/debian/ $RELEASE main contrib
for example:
  deb http://archive.debian.org/debian/ sarge main contrib

즉, /etc/apt/sources.list 파일안에

deb http://archive.debian.org/debian/ sarge main contrib
라인을 추가하면 된다. :)

물론 가장 기본적인 소스 리스트 이므로 앞으로 더 필요한 소스 리스트들이 있다면 별도로 추가해서 사용해야 할 것이다.