Bài viết này hướng dẫn các bạn cách tăng số lượng giới hạn tệp mở trong hệ điều hành Linux, giới thiệu về ulimit và file-max qua những minh họa bên dưới sẽ giúp cho các bạn có thể tự tìm hiểu và các bạn tự học Linux cơ bản một cách dễ dàng hơn.
1. Giới thiệu ulimit
Chúng ta có thể thay đổi số lượng tệp mở tối đa. Lệnh ulimit
cấp cho bạn khả năng kiểm soát các tài nguyên có sẵn hoặc tiến trình bắt đầu bởi nó.
ulimit được thi hành ở cấp độ tiến trình (process), có thể nhỏ hơn mức file-max.
2. Kiểm tra giới hạn cứng giới hạn mềm
Để xem giới hạn cứng và giới hạn mềm, bạn có thể sử dụng các lệnh sau:
Kiểm tra giới hạn cứng trong Linux:
[root@test1 ~]# ulimit -Hn 4096
Kiểm tra giới hạn mềm trong Linux:
[root@test1 ~]# ulimit -Sn 1024
Để xem các giới hạn cứng và giới hạn mềm cho những người dùng khác nhau chúng ta thực hiện như sau:
Kiểm tra giới hạn cứng trong Linux:
[root@test1 ~]# su dang [dang@test1 ~]$ ulimit -Hn 4096
Kiểm tra giới hạn mềm trong Linux:
[dang@test1 ~]$ ulimit -Sn 1024
3. Giới thiệu về giới hạn File Descriptor
File Descriptor (FD) là một số xác định duy nhất một tệp đang mở trong hệ điều hành. Nó mô tả một tài nguyên dữ liệu và cách tài nguyên đó có thể được truy cập. Trên Linux mọi thứ điều được biểu diễn dưới dạng file và FD là các số nguyên không âm đại diện cho những file này.
Nếu bạn gặp lỗi "Too many open files (24)" thì application/command/script của bạn đang đạt giới hạn tệp mở tối đa được cho phép bởi linux. Bạn cần tăng giới hạn tệp mở.
Số lượng mô tả tệp mở tối đa được hiển thị bằng lệnh sau:
[root@test1 ~]# cat /proc/sys/fs/file-max
200416
Số trên hiển thị số lượng tệp mà người dùng có thể đã mở cho mỗi phiên đăng nhập. Kết quả có thể khác nhau tùy thuộc vào hệ thống của bạn.
Tập tin file-max /proc/sys/fs/file-max
mô tả tối đa số File Descriptor (FD) mà được thi hành ở cấp độ Linux kernel. Chúng ta có thể điều chỉnh tập tin này để cải tiến số lượng tập tin được mở bằng cách tăng giá trị của /proc/sys/fs/file-max
tới một giá trị hợp lí nào đó.
4. Kiểm tra giới hạn File Descriptor cho toàn bộ hệ thống
Khi chúng ta chạy các ứng dụng (PHP, MySQL, MariaDB,...) trong máy chủ, một số ứng dụng có thể yêu cầu giới hạn cao hơn cho các mô tả tệp.
Trong những trường hợp này, chúng ta có thể tăng giới hạn bằng cách chỉnh sửa tệp fs.file-max
bằng cách sử dụng lệnh sysctl
.
Để thể hiện, chúng ta sẽ tăng giới hạn của các tệp đang mở lên 600.000.
[root@test1 ~]# sysctl -w fs.file-max=600000
fs.file-max = 600000
Chúng ta có thể kiểm tra giới hạn mới đã được thiết lập chính xác, bằng lệnh sau:
[root@test1 ~]# cat /proc/sys/fs/file-max
600000
Với lệnh trên, những thay đổi bạn đã thực hiện sẽ chỉ duy trì hoạt động cho đến lần khởi động lại tiếp theo, vì vậy nếu bạn muốn giới hạn này không đổi, bạn phải truy cập tệp /etc/sysctl.conf
sau bằng trình chỉnh sửa vi và thêm vào dòng fs.file-max=600000
:
[root@test1 ~]# vi /etc/sysctl.conf
[root@test1 ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
fs.file-max=600000
Người dùng sẽ cần phải đăng xuất và đăng nhập lại để những thay đổi có hiệu lực nếu chúng ta muốn thực hiện chúng ngay lập tức, chúng ta sẽ thực hiện lệnh sau:
[root@test1 ~]# sysctl -p
fs.file-max = 600000
4. Đặt giới hạn tệp mở cho mỗi người dùng
Chúng ta có thể đặt giới hạn cụ thể của các tệp đang mở cho một người dùng cụ thể trong một miền, vì vậy chúng ta phải truy cập vào tệp cấu hình sau:
[root@test1 ~]# cat /etc/security/limits.conf
# /etc/security/limits.conf
#
#This file sets the resource limits for the users logged in via PAM.
#It does not affect resource limits of the system services.
#
#Also note that configuration files in /etc/security/limits.d directory,
#which are read in alphabetical order, override the settings in this
#file in case the domain is the same or more specific.
#That means for example that setting a limit for wildcard domain here
#can be overriden with a wildcard setting in a config file in the
#subdirectory, but a user specific setting here can be overriden only
#with a user specific setting in the subdirectory.
#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value>
Trong phần cuối cùng, chúng ta thấy cú pháp sau:
<domain> <type> <item> <value>
Chúng ta phải thêm tên người dùng loại phần tử và giới hạn để gán. Sau đó lưu các thay đổi và rời khỏi trình chỉnh sửa.
Ví dụ: Đặt giới hạn mềm và giới hạn cứng cho người dùng
Chúng ta thêm vào /etc/security/limits.conf
để đặt giới hạn mềm và giới hạn cứng cho user dang:
##Ví dụ giới hạn cứng cho các tệp được mở tối đa 5120
dang hard nofile 5120
## Ví dụ giới hạn mềm cho các tệp được mở tối đa 2048
dang soft nofile 2048
Sau đó chúng ta lưu lại nhấn phím Esc
, :wq
và nhấn phím Enter
. Tiếp theo đăng nhập user dang để kiểm tra giới hạn mềm và giới hạn cứng:
[root@test1 ~]# su dang
[dang@test1 ~]$ ulimit -Hn
5120
[dang@test1 ~]$ ulimit -Sn
2048
5. Lời kết
Qua bài trên, giúp cho chúng ta biết cách thiết lập hoặc tăng giới hạn cho người dùng đối với các tệp đang mở qua việc các thao tác với ulimit và file-max trên hệ điều hành Linux.