Cách tăng số lượng giới hạn tệp mở trong Linux Image Cách tăng số lượng giới hạn tệp mở trong Linux

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.