Ich habe ein FreeBSD 8-System mit ZFS und einem MySQL 5.5-Server mit etwa 355 GB, der voraussichtlich auf einige Terabyte anwachsen wird.
MySQL löst Fehler bezüglich "Zu viele geöffnete Dateien" aus /etc/hosts.allow
. Wir verwenden nicht ausdrücklich /etc/hosts.allow
, aber es wird von hosts_access (3) ( libwrap.a
) verwendet, das von vielen Dingen verwendet wird.
mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files
Aber wenn ich nachschaue, scheine ich keine tatsächlichen Grenzen zu erreichen. Die Anzahl der geöffneten Dateien wurde kern.openfiles stays
über einen längeren Zeitraum um weniger als 40.000 gemeldet , und unser Limit ist wesentlich höher:
# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191
# ulimit -n
184320
Openfiles sollten auf unbegrenzt gesetzt werden:
# grep openfiles /etc/login.conf
:openfiles=unlimited:\
MySQL sagt, es sollte in der Lage sein, 184320-Dateihandles zu öffnen:
# mysqladmin variables | grep open_files_limit
| open_files_limit | 184320 |
Und einige Informationen aus der Sicht des MySQL-Benutzers. Ich habe /usr/local/etc/rc.d/mysql-server
MySQL gestoppt und gehackt , um diese Variablen auszudrucken, daher sollte dies die MySQL-Umgebung darstellen. Beachten Sie, dass die Nummer 184320 mit der obigen übereinstimmt.
# /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
Und zum einfachen Nachschlagen hier die Beschreibungen für die Systeme:
kern.maxfiles: Maximum number of files
kern.openfiles: System-wide number of open files
kern.maxfilesperproc: Maximum files allowed open per process
verbunden
- Dies hängt möglicherweise mit einer ZFS on Nexenta-Frage zu ServerFault zusammen: Warum kann MySQL hosts.allow / hosts.deny nicht öffnen?
- Siehe auch dieses ähnliche Problem in den FreeBSD-Foren: [EMFILE] Zu viele geöffnete Dateien
ulimit
im Startskript oder in der Shell-Umgebung festlegen kann , aber dafür müsste ich die Datenbank unterbrechen.cat limits
sehen, mit was MySQL läuft. Sie können sie auch imecho -n "Max open files=soft_value:hard_value" > /proc/$PID/limits
/proc
wird nicht standardmäßig unter FreeBSD gemountet, aber machen Sie es selbst mitsudo mount -t procfs proc /proc
, sieheprocfs(5)
für weitere Informationen. Sobald Sie/proc
gemountet haben, schauen Sie sich/proc/$PID/rlimit
DateiAntworten:
Überprüfen Sie /etc/login.conf und finden Sie heraus, welcher Anmeldeklasse Ihr MySQL-Benutzer zugewiesen ist. Es ist wahrscheinlich Standard oder Daemon. Wenn Sie die Grenzwerte für Ihren Benutzer ändern möchten, erstellen Sie eine neue Klasse, weisen Sie Ihren Benutzer dieser Klasse zu, ändern Sie die Grenzwerte für diese Klasse nach Ihren Wünschen und führen Sie dann "cap_mkdb /etc/login.conf" aus.
Wenn Sie dies noch nicht gelesen haben, gehen Sie wie folgt vor: http://www.freebsd.org/doc/handbook/users-limiting.htm
Prozesse, die beim Systemstart von / etc / rc gestartet wurden, werden der Daemon- Anmeldeklasse zugewiesen .
quelle
Unter einigen Betriebssystemen sind die Grenzwerte so festgelegt, dass Sicherheitsprobleme für normale Benutzer vermieden werden. Lesen Sie in der
man limits.conf
Datei Diese Datei definiert die Grenzwerte pro Prozess wie die maximale Anzahl von Threads oder die maximale Anzahl von geöffneten Dateien. Das Gesicht zur Einschränkung der Verwendung könnte von dort kommen.
/etc/security/limits.conf
quelle