ZFS를 실행하는 FreeBSD 8 시스템이 있는데 약 355GB의 MySQL 5.5 서버가 있고 몇 테라 바이트로 성장할 것으로 예상됩니다.
MySQL에서 "오픈 파일이 너무 많습니다"에 대한 오류가 발생했습니다 /etc/hosts.allow
. 우리는 명시 적으로 사용하지 않는 /etc/hosts.allow
, 그러나 그것은에 의해 사용된다 는 hosts_access (3) ( libwrap.a
많은 것들에 의해 사용된다).
mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files
하지만 확인하면 실제 한계에 도달하지 않는 것 같습니다. kern.openfiles stays
지속 기간 동안 열린 파일 수는 40,000 미만으로 보고되었으며 그 한계는 상당히 높습니다.
# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191
# ulimit -n
184320
오픈 파일은 무제한으로 설정해야합니다 :
# grep openfiles /etc/login.conf
:openfiles=unlimited:\
MySQL은 184320 파일 핸들을 열 수 있어야한다고 말합니다.
# mysqladmin variables | grep open_files_limit
| open_files_limit | 184320 |
그리고 MySQL 사용자의 관점에서 일부 정보. 나는 mysql을 멈추고이 /usr/local/etc/rc.d/mysql-server
변수를 인쇄하기 위해 해킹 했으므로 MySQL 환경을 나타내야합니다. 숫자 184320은 위와 일치합니다.
# /usr/local/etc/rc.d/mysql-server.stefantest start
Starting mysql.
cpu time (seconds, -t) unlimited
file size (512-blocks, -f) unlimited
data seg size (kbytes, -d) 33554432
stack size (kbytes, -s) 524288
core file size (512-blocks, -c) unlimited
max memory size (kbytes, -m) unlimited
locked memory (kbytes, -l) unlimited
max user processes (-u) 5547
open files (-n) 184320
virtual mem size (kbytes, -v) unlimited
swap limit (kbytes, -w) unlimited
sbsize (bytes, -b) unlimited
pseudo-terminals (-p) unlimited
그리고 쉽게 참조 할 수 있도록 sysctls에 대한 설명은 다음과 같습니다.
kern.maxfiles: Maximum number of files
kern.openfiles: System-wide number of open files
kern.maxfilesperproc: Maximum files allowed open per process
관련
- 이는 ServerFault의 Nexenta ZFS 질문과 관련이있을 수 있습니다. MySQL이 hosts.allow / hosts.deny를 열 수없는 이유는 무엇입니까?
- FreeBSD 포럼에서도 이와 유사한 문제를 참조하십시오 : [EMFILE] 열린 파일이 너무 많습니다
ulimit
시작 스크립트 또는 셸 환경에서 설정할 수 있지만 데이터베이스를 중단해야한다는 것을 알고 있습니다.
cat limits
mysql이 무엇을 실행하는지 확인할 수 있습니다 . 또한 최신 커널을 사용하여 즉시 변경할 수도 있습니다. echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limits
(물론)
/proc
기본적으로 FreeBSD에 마운트되어 있지는 않지만 직접 사용 sudo mount -t procfs proc /proc
하십시오 procfs(5)
. 당신은 일단 /proc
장착 봐 /proc/$PID/rlimit
파일