[MySQL] 리눅스의 파일 열기 갯수 변경 및 자원 제한 확인
■ 파일오픈갯수의변경및자원사용량변경의필요성
리눅스를 설치하면 기본적으로 오픈할 수 있는 File의 갯수가 작습니다. 이게 중요한 이유는 오픈할 수 파일 갯수가 작다면 성능에 제약을 받기 때문입니다.
예를 들어 파일 요청파일 갯수가 3000이 들어왔는데 열수 있는 파일이 1000개라면 1000개 이후의 모든 요청은 거절되거나 대기상태로 빠지기 때문입니다.
서버의 성능이 어느정도 된다면 기본값보다 값을 늘려 성능을 향상시킬 수 있습니다.
■ Linux의 확인 및 환경 설정
서버에서는 file-max 란 시스템 파라미터로 불리며 이것은 한번에 운영할 수 있는 파일수를 의미합니다.
보통 4MB 메모리당 256개의 파일을 운용할 수 있다고 합니다.
▶︎ 오픈 가능한 파일 갯수 확인 및 적용 방법
• 확인 방법
현재 file-max의 값을 알고 싶다면 다음과 같이 확읺래 보시면 됩니다.
shell> cat /proc/sys/fs/file-max
365679
• 적용 방법
이 값을 바로 바꾸고 싶다면 다음과 같이 실행합니다.
shell> echo 365679 > /proc/sys/fs/file-max
영구적으로 적용하고 싶다면 다음과 같이 설정합니다.
shell> vi /etc/sysctl.conf
# increase max open file
fs.file-max = 365679
그리고 재부팅을 하거나 아래와 같이 명령어를 입력합니다.
shell> sysctl -p
fs.file-max = 382386
기존에 여러값이 입력되어 있었다면 모두 출력됩니다.
▶︎ 유저별 할당 자원 확인 및 설정
ulimit는 유저가(쉘, 프로세스)에 대해서 할당할 자원의 한계를 정하는 것으로 다중 프로그램/사용자를 기본으로 하는 리눅스 시스템에서 과부하를 막아주는 설정입니다.
ulimit 기본적으로 hard 설정과 soft 설정이 있습니다.
• 확인 방법
하드 제한과 소프트 제한이 있습니다. 확인하는 명령어는 다음과 같습니다.
shell> ulimit -Ha
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 14999
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 4096
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 14999
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
shell> ulimit -Sa
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 14999
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
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) 14999
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
하드는 해당쉘의 최대값을 나타냅니다. 소프트는 현재 설정을 나타냅니다. 하드 설정의 경우는 root권한으로만 변경이 가능합니다.
• 설정 방법
아래와 같은 방법으로 영구 설정이 가능하며, 새롭게 접속하는 사용자부터 해당 내용이 적용됩니다.
shell> vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
소프트와 하드를 같이 설정합니다.
특정 유저에게만 할당하고 싶다면 다음과 같이 합니다.
mysql hard nofile 64000
mysql soft nofile 64000
■ MySQL의 확인 및 환경 설정
▶︎ mysql의 max open file 설정 확인
먼저 MySQL PID를 알아냅니다.
shell> ps afx | grep mysql
2928 pts/0 S+ 0:00 | \_ mysql --login-path=dbe
3194 pts/1 S+ 0:00 \_ grep --color=auto mysql
2871 ? Ssl 0:36 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
다음과 같은 방법으로 확인합니다.
shell> cat /proc/2871/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 14999 14999 processes
Max open files 10000 10000 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 14999 14999 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
▶︎ MySQL 안에서 확인
shell> mysql -uroot -p'password'
mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 10000 |
+------------------+-------+
1 row in set (0.01 sec)
▶︎ 변경 방법
my.cnf에 다음과 같은 파라미터를 입력합니다.
[mysqld_safe]
open-files-limit=64000
다음과 같이 확인합니다.
mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 64000 |
+------------------+-------+
1 row in set (0.00 sec)
도움이 되셨다면 광고 클릭 한번 부탁드립니다. 읽어 주셔서 감사합니다.