리눅스 mysql의 max_open_file 사이즈 변경하기

길라잡이 0 13 05.29 01:04

환경: 리눅스 CentOS 

 

새 서버를 받아 max open file 관련하여 설정을 하여 기록을 남긴다. 

mysql에서는 보통 max open file 기본 값으로 1024이 설정되어 있는데 

이 값이 낮아 mysql 작업 속도를 느리게 하는 원인이 되기도 하니 적절하게 값을 조정해보도록 하자. 

 

 

1.mysql의 max open file 설정 확인

 

일단 mysql 의 현재 max open file설정부터 확인해보자.

ps afx | grep mysql 로 해당 프로세스의 id를 알아내고 프로세스의 설정값을 확인해본다. 

1024(soft), 4096(hard) 값이 설정되어 있다.  

 

 

shell> ps afx | grep mysql

48320 pts/3    S+     0:00                      \_ grep mysql

21919 pts/0    S      0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql

22021 pts/0    Sl     0:03  \_ /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock

 

shell> cat /proc/22021/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            10485760             unlimited            bytes

Max core file size        0                    unlimited            bytes

Max resident set          unlimited            unlimited            bytes

Max processes             30122                30122                processes

Max open files            1024                 4096                 files

Max locked memory         65536                65536                bytes

Max address space         unlimited            unlimited            bytes

Max file locks            unlimited            unlimited            locks

Max pending signals       30122                30122                signals

Max msgqueue size         819200               819200               bytes

Max nice priority         0                    0

Max realtime priority     0                    0

Max realtime timeout      unlimited            unlimited            us

[root@quick141-176 ~]#

 

mysql>  show variables like 'max_connections';

+-----------------+-------+

| Variable_name   | Value |

+-----------------+-------+

| max_connections | 151   |

+-----------------+-------+

1 row in set (0.00 sec)

 

 


또는 mysql 에서 직접 open_files_limit 변수값을 확인할 수도 있다. 



mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1024  |
+------------------+-------+
1 row in set (0.00 sec)


 


현재 기본 값은 너무 작으니 값을 증가해야 겠다. 
그리고 mysql 의 max open file값은 시스템이나 사용자에게 기존에 할당된 값 이상으로 변경할 수 없으니 

mysql max open file 값을 변경하기 이전에 관련 설정들을 확인 및 변경해보자. 


 

2. OS의 max open file 설정 확인 및 변경 

 

일단 서버의 기본 max open file 설정부터 확인해보자. 

file-max 값은 리눅스에서 한 번에 운용할 수 있는 파일 수를 의미하며, 

보통 4MB 메모리당 256개의 파일을 운용할 수 있다고 한다.

대략 1G -> 65536개,  2G -> 131072 개 이다. 

 

 

 

shell> cat /proc/sys/fs/file-max

382386

 

 

 

이미 충분한 값이 설정되어 있는 것 같다. 

만약 위에 나온 값을 변경하고 싶으면 터미널에서 아래와 같이 입력하면 된다.  

그러나 재부팅시 이 값은 유지가 되지 않으니 유의하자. 

 

shell> echo 382386 > /proc/sys/fs/file-max

 

 

재부팅시에도 이 값을 계속 유지하려면 

/etc/sysctl.conf 파일에서 아래와 같이 file-max값 설정을 추가한다. 

 

 

# increase max open file

fs.file-max = 382386

 

 

그리고 sysctl -p 를 입력하여 설정값이 즉각 변경하도록 한다. 

이 값은 서버가 재시작을 해도 계속 유지된다.

 

 


shell> sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
fs.file-max = 382386







3. 사용자별 max open file 설정 확인 및 변경 

 

 

사용자별 프로세스(task)의 max open file 설정을 확인하려면 터미널에서 ulimit -a를 입력한다.




shell> 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) 30122
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) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 30122
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


 

open file 값이 기본값인 1024으로 설정되어 있어 64000으로 변경하려고 한다. 

ulimit의 값을 변경하는 방법은 두가지가 있다. 

 

터미널에서 아래와 같이 ulimit -n 옵션으로 변경할 수 있다. 

현재 로그인되어 있는 사용자에 한해 변경이 되며 로그아웃시에는 설정한 값이 유지가 되지 않으니 유의한다.  

 

 

shell> ulimit -n64000

 

 

다시 ulimit -a를 입력하여 해당 값이 제대로 변경된 것을 확인하였다. 

 

 

 

shell>  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) 30122

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 64000

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 10240

cpu time               (seconds, -t) unlimited

max user processes              (-u) 30122

virtual memory          (kbytes, -v) unlimited

 

file locks                      (-x) unlimited


 

ulimit -n의 변경값은 일시적이기 때문에 

이 값을 계속 유지하고 싶으면 /etc/security/limits.conf 파일의 내용을 수정해야 한다. 

nofile은 해당 사용자(그룹)이 오픈할 수 있는 최대 파일 개수를 의미한다.

/etc/security/limits.conf 값은 새로운 session 부터 영향을 끼치기 때문에

파일 설정을 변경하고 재로그인을하거나 새로운 세션으로 다시 접속하면

 해당 설정이 변경된 것을 확인할 수 있다.

 

참고로 root user 는 * wildcard 에 속하지 않으니 

root user   는 따로 설정해줘야한다.

 

# 전체 user에게 같은 설정을 하려면 * 을 사용한다

 

* hard nofile 64000

* soft nofile 64000

root hard nofile 64000

root soft nofile 64000


 

# 특정 user (예: mysql)에기만 설정을 하려면

 

mysql hard nofile 64000

mysql soft nofile 64000

 

 

 

만약 설정을 변경하였는데 ulimit -a    해도 동일한 결과가 나온다면

/etc/pam.d/su 의 아래 라인을 코멘트 아웃해야한다. 

limits.conf   는  pam_limits.so가 사용하는 설정값이라 

/etc/pam.d/su에서 사용되도록 설정되었는지 확인해야한다.

 

 

# Sets up user limits, please uncomment and read /etc/security/limits.conf

# to enable this functionality.

# (Replaces the use of /etc/limits in old login)

session    required   pam_limits.so


 

 

 



 

 

4. mysql max open file 설정 변경  

 

자 드디어 mysql max open file 설정을 변경할 차례가 왔다. 

/etc/my.cnf 파일에 아래와 같이 open-file-limit 옵션을 수정하자. 

 

 

[mysqld_safe]

open-files-limit=64000


 


그리고 mysqld 서비스를 재시작한다. 



shell> service mysqld restart
mysqld 를 정지 중:                                         [  OK  ]
mysqld (을)를 시작 중:                                     [  OK  ]




마지막으로 수정된 값을 확인하고 설정을 마무리한다. 



mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 64000 |
+------------------+-------+
1 row in set (0.00 sec)




 

Comments

번호 제목 글쓴이 날짜 조회
187 파이썬 MySql 쿼리 길라잡이 07.06 5
186 PHP 랜덤 문자열 생성 길라잡이 06.14 8
185 PHP 도메인명으로 아이피 확인하기 gethostbyname 길라잡이 06.13 4
184 파이썬 mysql 사용법 예제 pymysql 설치 길라잡이 06.13 7
183 MySQL 원격 접속 허용 길라잡이 06.13 9
182 IDLE 파이썬 쉘 길라잡이 06.13 9
181 파이썬 버전 확인 길라잡이 06.13 8
180 파이썬 DB연동 - PyMySQL + MySQL 길라잡이 06.13 6
179 php에서 쉘 명령어 실행 길라잡이 06.11 7
178 윈도우10 삭제가 안되는 폴더 파일 삭제하는 법 길라잡이 06.08 7
177 워드프레스 첫 번째 이미지를 자동으로 특성 이미지로 설정하는 방법 길라잡이 06.08 4
176 리눅스 CentOS 7 좀비 프로세스 생성, 찾기, 종료 길라잡이 06.04 10
175 MariaDB innodb_buffer_pool_size 최적화 항목들 길라잡이 06.01 16
174 리눅스 정보 조회 OS, CPU, RAM 길라잡이 06.01 15
173 MariaDB timeout 설정 길라잡이 06.01 17
172 데이터베이스 timeout 설정하기 길라잡이 06.01 11
171 MariaDB(MYSQL) 최적화 하기 – my.cnf(InnoDB) 설정 길라잡이 05.31 8
170 MariaDB Binlog Cache and Binlog Cache Size 길라잡이 05.31 8
169 apache error log 안쌓이게 하는 방법 길라잡이 05.31 13
168 파이썬으로 크롤링하는데 값이 안 읽어와질때 해결법 길라잡이 05.31 15
167 MariaDB max_heap_table_size 길라잡이 05.31 9
166 MariaDB tmp full 발생 시 조치방법 길라잡이 05.30 14
165 파이썬 MarkDown 사용법 총정리 길라잡이 05.30 16
164 파이썬 마크다운을 이용한 주피터 노트북 정리하는 방법 길라잡이 05.30 19
163 파이썬 input 함수 사용법 정리 파이썬 키보드 입력 길라잡이 05.30 15
162 파이썬 파일 사용법 정리 파일 읽기, 파일 쓰기, with문, pickle 모듈 길라잡이 05.30 9
161 파이썬 메모장에 글쓰기 길라잡이 05.30 14
160 파이썬 REQUESTS 모듈을 통한 자동화 글쓰기 길라잡이 05.30 9
159 파이썬 selenium chromedriver 버전 오류 해결하기 길라잡이 05.29 12
158 MARIADB OPEN_FILES_LIMIT 값 변경하기 길라잡이 05.29 11


 

페이스북에 공유 트위터에 공유 구글플러스에 공유 카카오스토리에 공유 네이버밴드에 공유