[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)

 

도움이 되셨다면 광고 클릭 한번 부탁드립니다.  읽어 주셔서 감사합니다.

Designed by JB FACTORY