IT정보공유

RabbitMQ File, Socket descriptors 제한 수 변경 방법

알지오™ 2020. 3. 10.

요즘 메세지큐(Message Queue) 를 도입하는 경우가 많아진것 같습니다.

조금은 번거로운 TCP 통신 보다는 메세지큐 서버를 구축해 놓고 JSON 형태의 메세지큐를 통해 프로그램간의 인터페이스를 할 수 있는 RabbitMQ.

제가 근무하는 직장에서도 많이 사용하고 있습니다.

하지만, 기본적인 RabbitMQ 서버 구축후에는 접속 제한이 걸려 있기 때문에 메세지큐 서버에 접속하는 클라이언트가 많다면 조금 곤란한 상황에 처해질 수 있습니다.

 

RabbitMQ 기본 접속 소켓 수 (File descriptors, Socket descriptors)

 

RabbitMQ Overview

 

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로 표시되더라고요.

 

File descriptors

 

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 최대값이 증가되어 있습니다.

 

Socket descriptors

 

꽉 찼던 소켓 수가 이제 여유롭게 늘어났네요.

댓글

💲 추천 글