FreeBSD: Đây là quá nhiều tệp đang mở, nhưng có thể mở 160.000 tệp khác


11

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 staysdướ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


4
ulimit không phải là toàn cầu, bạn có chắc rằng đó là cùng một ulimit mà MySQL của bạn đang chạy với?
derobert

1
Vì vậy, tôi có thể xem giá trị ulimit của daemon MySQL là gì và tôi có thể thay đổi giá trị ulimit cho daemon mà không dừng daemon không? Tôi biết tôi có thể thiết lập ulimittrong 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.
Stefan Lasiewski

1
Hãy xem / Proc, dưới thư mục con với bộ vi xử lý dịch vụ mysql của bạn. Bạn có thể cat limitsthấ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)
lornix

1
@lornix: đây là FreeBSD. Tôi chưa bao giờ sử dụng BSD cho mình, nhưng tôi không chắc liệu FreeBSD có thực sự hỗ trợ / Proc / * / giới hạn hay không.
Martin von Wittich

1
/prockhô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 đã /procgắn kết, hãy xem /proc/$PID/rlimittệp
zygis

Câu trả lời:


1

Kiểm tra /etc/login.conf và tìm ra lớp đăng nhập mà người dùng mysql của bạn được gán. Nó có thể là mặc định hoặc daemon. Nếu bạn muốn thay đổi các giới hạn cho người dùng của mình, hãy tạo một lớp mới, gán người dùng của bạn cho lớp đó, thay đổi các giới hạn cho lớp đó theo ý muốn và sau đó chạy "cap_mkdb /etc/login.conf"

Nếu bạn chưa đọc nó, hãy làm: http://www.freebsd.org/doc/handbook/users-limiting.htmlm

Các quy trình bắt đầu khi khởi động hệ thống bằng / etc / rc được gán cho lớp đăng nhập daemon .


0

Trên một số hệ điều hành, các giới hạn được đặt để tránh vấn đề bảo mật cho người dùng thông thường, bạn nên xem xét việc đọc trong man limits.conf
tệp này xác định giới hạn cho mỗi quy trình như số luồng tối đa hoặc số lượng tối đa của tệp mở. Khuôn mặt hạn chế sử dụng có thể đến từ đó. /etc/security/limits.conf

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.