요즘 메세지큐(Message Queue) 를 도입하는 경우가 많아진것 같습니다.
조금은 번거로운 TCP 통신 보다는 메세지큐 서버를 구축해 놓고 JSON 형태의 메세지큐를 통해 프로그램간의 인터페이스를 할 수 있는 RabbitMQ.
제가 근무하는 직장에서도 많이 사용하고 있습니다.
하지만, 기본적인 RabbitMQ 서버 구축후에는 접속 제한이 걸려 있기 때문에 메세지큐 서버에 접속하는 클라이언트가 많다면 조금 곤란한 상황에 처해질 수 있습니다.
RabbitMQ 기본 접속 소켓 수 (File descriptors, Socket descriptors)
RabbitMQ File descriptors 아래쪽에 보면 1024 available 이라고 표시되어 있습니다.
이는 1024개의 파일을 오픈할 수 있다는 얘기이고, 리눅스에서 기본적으로 1024로 제한되어 있다고 알고 있습니다.
그래서 RabbitMQ도 기본적으로 OS의 환경에 따라서 1024로 설정이됩니다.
또한 리눅스에서는 소켓도 파일처럼 다루기 때문에 Socket descriptors 도 File descriptors를 따라가게 되어 있습니다.
그래서 연결될 수 있는 소켓도 1024로 제한되게 됩니다.
ulimit 명령어를 통한 파일 오픈 제한 갯수 확인
리눅스에서 현재 설정되어 있는 파일 접근 제한 갯수를 확인하려면 아래의 명령어를 통해 조회 할 수 있습니다.
ulimit -a
[root@test ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7185
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024 <- File Descriptor Limit
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 7185
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Linux OS 설정 파일 변경
1) /etc/security/limits.conf 파일 편집
#
#<domain> <type> <item> <value>
#
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
* soft nofile 65535 <- 추가
* hard nofile 65535 <- 추가
위에 보이는 마지막 두줄을 추가해 줍니다.
2) /etc/systemd/system.conf 파일 편집
DefaultLimitNOFILE=1048576
system.conf 파일을 열어 DefaultLimitNOFILE 파일 항목을 찾아 주석을 제거하고, 값을 입력합니다.
65535로 입력하니 RabbitMQ 관리 페이지에서는 File descriptors 가 16384로 표시되더라고요.
65535개로 늘리려면 1048576으로 지정해 주면 됩니다.
래빗엠큐 설정파일에서도 변경을 해야 하니 find / -name "*rabbitmq-server.service*" 명령을 실행하여 설정 파일을 찾습니다. (CentOS 기준으로 설명합니다.)
[root@svr001 ~]# find / -name "*rabbitmq-server.service*"
/sys/fs/cgroup/systemd/system.slice/rabbitmq-server.service
/etc/systemd/system/multi-user.target.wants/rabbitmq-server.service
/usr/lib/systemd/system/rabbitmq-server.service
////////////////////////////////////////////
vi /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service
3개의 파일이 발견되었고 etc 폴더 하위에 있는 rabbitmq-server.service 를 vi로 편집합니다.
[Unit]
Description=RabbitMQ broker
After=syslog.target network.target
[Service]
Type=notify
User=rabbitmq
Group=rabbitmq
UMask=0027
NotifyAccess=all
TimeoutStartSec=3600
# Un-comment this setting if you need to increase RabbitMQ's
# open files limit
LimitNOFILE=65535
#
# Note: systemd on CentOS 7 complains about in-line comments,
# so only append them here
LimitNOFILE 을 찾아서 65535로 바꿔줍니다. 원래는 주석이기 때문에 주석을 빼고 숫자도 바꿔주었습니다.
RabbitMQ Service 재시작
systemctl daemon-reload
systemctl restart rabbitmq-server
두 명령을 차례대로 수행해 줍니다.
래빗엠큐 관리자 페이지로 접속하면, File descriptors와 Socket descriptors 최대값이 증가되어 있습니다.
꽉 찼던 소켓 수가 이제 여유롭게 늘어났네요.
댓글