잠시만 기다려 주세요

     '민주당 심판은 아직 끝나지 않았다.'
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (19)  |  여러가지 팁 (1095)  |  추천 및 재미 (163)  |  자료실 (28)  |  
시사, 이슈, 칼럼, 평론, 비평 (795)  |  끄적거림 (142)  |  문예 창작 (719)  |  바람 따라 (75)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    리눅스 서버

리눅스 서버 - postgresql, 리눅스와 mysql의 max_open_file 사이즈 변경하기, too many open files
이 름 : 바다아이   |   조회수 : 13063         짧은 주소 : https://www.bada-ie.com/su/?571591781221
'too many open files ' 에러는 두가지 형태입니다.
첫째는 파일 작업을 열고 닫아주지 않아서 비정상적으로 열린 파일이 많을 때이고...
두번째는 동시접속자가 너무 폭주하여 생길 수 있는 문제입니다.
해결 방법은 db 와 서버의 최대 열 수 있는 파일 수를 늘려주는 것과 동시 접속자 부분 늘리기....
그리고 잘못된 프로그램 부분을 찾아서 연 파일을 정상적으로 닫아주시는 것입니다.

리눅스 계열은 급한대로 그냥 속편히 최대 파일 개수 늘려 주시면 되고요... 그리고 천천히 버그 잡으면 됩니다.
윈도우 계열은 잘못된 프로그램 부분 수정 필 입니다. -.-;
윈도우는 16384 개인가 세션에 제한이 걸려 있는데 수정이 되냐는 잘 모르겠네요..
윈도우에서 작업할 일이 별로 없는지라 죄송... 서버는 유닉스, 리눅스가 전부라 생각하는 1인이라..

postgresql 은 postgresql.conf 파일 열어서 max_connections = 최대접속개수
수정하시고 다시 시작... 물론 동시접속이 많다면 튜닝 필수 입니다만 일단 여기서는 최대접속 수만.....
그리고 리눅스 최대값 변경하시면 되겠습니다.
따로 postgresql 에서 크게 설정할 것은 없습니다.



환경: 리눅스 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_connections 변경은 여기 게시판에서 '동시접속' 으로 검색하시면 자료 있습니다.


현재 기본 값은 너무 작으니 값을 증가해야 겠다.
그리고 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 부터 영향을 끼치기 때문에

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

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


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


* hard nofile 64000

* soft nofile 64000


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


mysql hard nofile 64000

mysql soft nofile 64000



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)






참고사이트:

http://duntuk.com/how-raise-ulimit-open-files-and-mysql-openfileslimit

http://blog.endpoint.com/2013/12/increasing-mysql-55-maxconnections-on.html

https://dev.mysql.com/doc/refman/5.0/en/linux-postinstallation.html

http://jikime.tistory.com/44



출처: http://kugancity.tistory.com/entry/mysql-maxopenfile-사이즈-증가하기


 
| |





      1 page / 6 page
번 호 카테고리 제 목 이름 조회수
155 리눅스 서버 apt ... ... apt 바다아이 279
154 리눅스 서버 , smartctl, hdd ssd 바다아이 433
153 리눅스 서버 , .... arch kernel compile.... 바다아이 429
152 리눅스 서버 [Vim, Vi] 바다아이 409
151 리눅스 서버 ... 바다아이 483
150 리눅스 서버 vps root .. 바다아이 436
149 리눅스 서버 Ubuntu 24.04 LTS - SSH Port , ssh 바다아이 459
148 리눅스 서버 samba ... , ... 바다아이 1368
147 리눅스 서버 postfix main.cf ... 바다아이 5002
146 리눅스 서버 /etc/crontab ... 바다아이 3328
145 리눅스 서버 - MEMTEST, , 바다아이 4999
144 리눅스 서버 top , top 바다아이 5661
143 리눅스 서버 , systemd-networkd, archlinux network setting 바다아이 7002
142 리눅스 서버 mirror .. ... 바다아이 7281
141 리눅스 서버 [Ubuntu] (swapfile) , ... 바다아이 7316
140 리눅스 서버 ufw , iptables 바다아이 8254
139 리눅스 서버 ... grub . submenu, grub-mkconfig, grub 바다아이 6818
138 리눅스 서버 CentOS 7 Upgrade Kernel, centos 바다아이 9199
137 리눅스 서버 , dd , 바다아이 7134
136 리눅스 서버 ... ntp .. ... 바다아이 7892
135 리눅스 서버 archlinux netstat , netstat ... 바다아이 7515
134 리눅스 서버 ps , ps option 바다아이 7330
133 리눅스 서버 , swap , ... swap . 바다아이 7508
132 리눅스 서버 crontab , .... 바다아이 7515
131 리눅스 서버 ssh , ssh 바다아이 8759
130 리눅스 서버 SSH SSH , ssh-keygen rsa 바다아이 8256
129 리눅스 서버 , date : () , () , 바다아이 8520
128 리눅스 서버 aws lightsail, ssh .. .pem 바다아이 13543
127 리눅스 서버 , ubuntu generic kernel 바다아이 8898
126 리눅스 서버 .. apt ... 바다아이 8769
| |









Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천  실행시간 : 0.20504
to webmaster... gogo sea. gogo sea.