FreeBSD :“너무 많은 열린 파일”이지만 다른 160,000 개의 파일을 열 수 있어야합니다


11

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

관련


4
ulimit는 전역이 아니며 MySQL과 동일한 ulimit가 확실합니까?
derobert

1
따라서 MySQL 데몬에 대한 ulimit 값이 무엇인지 알 수 있으며 데몬을 중지하지 않고 데몬의 ulimit 값을 변경할 수 있습니까? ulimit시작 스크립트 또는 셸 환경에서 설정할 수 있지만 데이터베이스를 중단해야한다는 것을 알고 있습니다.
Stefan Lasiewski

1
mysql 서비스의 PID가있는 하위 디렉토리에서 / proc을 찾으십시오. cat limitsmysql이 무엇을 실행하는지 확인할 수 있습니다 . 또한 최신 커널을 사용하여 즉시 변경할 수도 있습니다. echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limits(물론)
lornix

1
@lornix : 이것은 FreeBSD입니다. 필자는 BSD를 사용한 적이 없지만 FreeBSD가 실제로 / proc / * / limits를 지원하는지 확실하지 않습니다.
Martin von Wittich

1
/proc기본적으로 FreeBSD에 마운트되어 있지는 않지만 직접 사용 sudo mount -t procfs proc /proc하십시오 procfs(5). 당신은 일단 /proc장착 봐 /proc/$PID/rlimit파일
zygis

답변:


1

/etc/login.conf를 확인하고 mysql 사용자가 할당 한 로그인 클래스를 찾으십시오. 아마도 기본 또는 데몬 일 것입니다. 사용자의 한계를 변경하려면 새 클래스를 작성하고 해당 클래스에 사용자를 지정하고 원하는대로 해당 클래스의 한계를 변경 한 다음 "cap_mkdb /etc/login.conf"를 실행하십시오.

아직 읽지 않은 경우 다음을 수행하십시오. http://www.freebsd.org/doc/handbook/users-limiting.htm

/ etc / rc에 의해 시스템 시작시 시작된 프로세스는 데몬 로그인 클래스에 할당됩니다 .


0

일부 OS에서는 일반 사용자에게 보안 문제가 발생하지 않도록 제한이 설정되어 있습니다. man limits.conf
이 파일은 최대 스레드 수 또는 열린 파일 수와 같은 프로세스 당 제한을 정의합니다. 제한 사용 얼굴이 거기에서 올 수 있습니다. /etc/security/limits.conf

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.