Tôi có một hệ thống FreeBSD 8 chạy ZFS, với máy chủ MySQL 5.5 có dung lượng khoảng 355GB và dự kiến sẽ phát triển thành một vài Terabyte.
MySQL đang kích hoạt lỗi về "Quá nhiều tệp đang mở" trên /etc/hosts.allow
. Chúng tôi không sử dụng rõ ràng /etc/hosts.allow
, nhưng nó được sử dụng bởi hosts_access (3) ( libwrap.a
), được sử dụng bởi nhiều thứ.
mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files
Nhưng khi tôi kiểm tra dường như không đạt được bất kỳ giới hạn thực tế nào. Số lượng tệp mở được báo cáo kern.openfiles stays
dưới 40.000 trong một thời gian dài và giới hạn của chúng tôi cao hơn đáng kể:
# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191
# ulimit -n
184320
Openfiles nên được đặt thành không giới hạn:
# grep openfiles /etc/login.conf
:openfiles=unlimited:\
MySQL nói rằng nó sẽ có thể mở các tệp xử lý 184320:
# mysqladmin variables | grep open_files_limit
| open_files_limit | 184320 |
Và một số thông tin từ quan điểm của người dùng MySQL. Tôi đã dừng mysql và hack /usr/local/etc/rc.d/mysql-server
để in ra các biến này, vì vậy điều này sẽ đại diện cho môi trường MySQL. Lưu ý rằng số 184320 phù hợp với ở trê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
Và, để dễ dàng tham khảo ở đây là các mô tả cho các sysctls:
kern.maxfiles: Maximum number of files
kern.openfiles: System-wide number of open files
kern.maxfilesperproc: Maximum files allowed open per process
Liên quan
- Điều này có thể liên quan đến câu hỏi ZFS trên Nexenta trên ServerFault: Tại sao MySQL không thể mở hosts.allow / hosts.deny?
- Cũng thấy vấn đề tương tự này trên các diễn đàn FreeBSD: [EMFILE] Quá nhiều tệp đang mở
ulimit
trong tập lệnh khởi động hoặc môi trường shell, nhưng điều đó sẽ yêu cầu tôi làm gián đoạn cơ sở dữ liệu.
cat limits
thấy những gì mysql đang chạy với. Bạn cũng có thể thay đổi chúng một cách nhanh chóng (với các nhân mới hơn): echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limits
(tất nhiên là root)
/proc
không được gắn mặc định trên FreeBSD, nhưng hãy tự mình làm điều đó sudo mount -t procfs proc /proc
, xem procfs(5)
để biết thêm thông tin. Khi bạn đã /proc
gắn kết, hãy xem /proc/$PID/rlimit
tệp