FreeBSD: “Çok fazla açık dosya”, ancak 160.000 dosya daha açabilmelidir


11

ZFS çalıştıran ve yaklaşık 355GB'lık bir MySQL 5.5 sunucusuyla Terabytes'in bir çiftine dönüşmesi öngörülen bir FreeBSD 8 sistemim var.

MySQL, "Çok fazla açık dosya" ile ilgili hataları tetikliyor /etc/hosts.allow. Açıkça kullanmıyoruz /etc/hosts.allow, ancak birçok şey tarafından kullanılan hosts_access (3) ( libwrap.a) tarafından kullanılıyor.

mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files

Ama kontrol ettiğimde gerçek sınırlara ulaşmıyor gibi görünüyor. kern.openfiles staysSürekli bir süre içinde 40.000'in altında rapor edilen açık dosya sayısı ve sınırımız önemli ölçüde daha yüksek:

# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191

# ulimit -n
184320

Açık dosyalar sınırsız olarak ayarlanmalıdır:

# grep openfiles /etc/login.conf
    :openfiles=unlimited:\

MySQL, 184320 dosya tanıtıcılarını açabileceğini söylüyor:

# mysqladmin variables | grep open_files_limit
| open_files_limit                              |     184320                |

Ve MySQL kullanıcısı açısından bazı bilgiler. MySQL durdu ve /usr/local/etc/rc.d/mysql-serverbu değişkenleri yazdırmak için kesmek , bu MySQL ortamını temsil etmelidir. 184320 sayısının yukarıdakilerle tutarlı olduğunu unutmayın.

# /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

Ve kolay referans için burada sysctl'lerin açıklamaları vardır:

kern.maxfiles: Maximum number of files
kern.openfiles: System-wide number of open files
kern.maxfilesperproc: Maximum files allowed open per process

İlişkili


4
ulimit global değil, MySQL'inizin çalıştığı ulimit ile aynı olduğundan emin misiniz?
derobert

1
Peki, MySQL arka plan programı için ulimit değerinin ne olduğunu görebilir miyim ve arka plan programını durdurmadan arka plan programının ulimit değerini değiştirebilir miyim? ulimitBaşlangıç ​​komut dosyasında veya kabuk ortamında ayarlayabileceğimi biliyorum , ancak bu veritabanını kesmenizi gerektiriyor.
Stefan Lasiewski

1
Mysql hizmetinizin PID'si ile alt dizinin altına / proc'a bakın. Şunları yapabilirsiniz cat limitsMySQL ile çalışan ne olduğunu görmek için. Bunları anında (daha yeni çekirdeklerle) değiştirebilirsiniz: echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limits(elbette kök olarak)
lornix

1
@lornix: bu FreeBSD. BSD'yi hiç kullanmadım, ancak FreeBSD'nin gerçekten / proc / * / sınırlarını destekleyip desteklemediğinden emin değilim.
Martin von Wittich

1
/procFreeBSD'de varsayılan olarak bağlanmaz, ancak kendiniz yapın sudo mount -t procfs proc /proc, procfs(5)daha fazla bilgi için bkz . Bir kez /procmonte ettikten sonra , /proc/$PID/rlimitdosyaya bakın
zygis

Yanıtlar:


1

/Etc/login.conf dosyasını kontrol edin ve mysql kullanıcınızın hangi giriş sınıfına atandığını öğrenin. Muhtemelen varsayılan veya arka plan programıdır. Kullanıcınızın sınırlarını değiştirmek istiyorsanız, yeni bir sınıf oluşturun, kullanıcınızı o sınıfa atayın, o sınıfın sınırlarını istediğiniz gibi değiştirin ve "cap_mkdb /etc/login.conf" komutunu çalıştırın.

Bunu henüz okumadıysanız, şunları yapın: http://www.freebsd.org/doc/handbook/users-limiting.htm

/ Etc / rc ile sistem başlangıcında başlatılan işlemler daemon oturum açma sınıfına atanır .


0

Bazı işletim sistemlerinde sınırlar, normal kullanıcı için güvenlik sorunundan kaçınmak için ayarlanır man limits.conf
. Kullanım kısıtlama yüzü oradan gelebilir. /etc/security/limits.conf

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.