Sử dụng /proc/sys và sysctl để sửa đổi và đặt tham số thời gian chạy kernel

Tác giả sysadmin, T.M.Hai 30, 2022, 09:16:12 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 2 Khách đang xem chủ đề.

Sử dụng /proc/sys và sysctl để sửa đổi và đặt tham số thời gian chạy kernel


Nhân Linux được tối ưu hóa để nó có thể thực hiện các tác vụ chung và hoạt động tốt với khối lượng công việc trung bình mà không cần sửa đổi gì ngay lập tức, tuy nhiên, bạn có thể tùy ý tối ưu hóa thêm và điều chỉnh các tham số thời gian chạy nhân khác nhau để tăng mức hiệu suất, cho phép bạn tận dụng tối đa càng nhiều hiệu suất càng tốt.

Ở đây chúng ta sẽ thảo luận về hệ thống tệp /proc/sys và cách bạn có thể sửa đổi các tham số thời gian chạy kernel để sửa đổi và điều chỉnh Linux.

1. Lưu ý và cảnh báo

Bài đăng này chỉ vạch ra bề nổi của việc tối ưu hóa hệ thống và sửa đổi tham số kernel bằng cách xử lý các tham số được sửa đổi phổ biến hơn, vì đây là yêu cầu đối với chứng nhận RHCE. Red Hat cung cấp toàn bộ khóa học/bài kiểm tra dành riêng cho việc điều chỉnh hiệu suất hệ thống, để biết thêm thông tin, hãy xem tại đây.

Điều quan trọng cần lưu ý là trước tiên bạn nên thực hiện các thay đổi đối với các tham số thời gian chạy kernel trên máy chủ thử nghiệm. Những điều này cũng có thể được áp dụng một cách không liên tục trước tiên (mà chúng ta sẽ thảo luận) cho phép bạn dễ dàng hoàn nguyên mọi thay đổi bằng cách khởi động lại hệ thống nếu có bất kỳ sai sót nào nghiêm trọng xảy ra. Sau khi áp dụng, bạn muốn đảm bảo rằng bạn thực hiện kiểm tra đầy đủ để xác nhận rằng thay đổi hoạt động như dự định trước khi thực hiện thay đổi liên tục.

Thực hiện một thay đổi tại một thời điểm và thực hiện kiểm tra chuyên sâu trên từng thay đổi có thể giúp bạn xác định cài đặt riêng lẻ đang thực sự hoạt động như thế nào, so với việc thay đổi nhiều thứ cùng một lúc, có khả năng là ngẫu nhiên, có thể dẫn đến kết quả tiêu cực. Về cơ bản, nếu bạn không biết mình đang thay đổi những gì, trước tiên bạn nên thực hiện một số nghiên cứu và không thay đổi bất cứ điều gì bạn không chắc chắn trừ khi trên một máy chủ thử nghiệm mà bạn không ngại phá vỡ và chơi cùng.

2. Giới thiệu về hệ thống tệp /proc

Hệ thống tệp /proc/sys chứa các tệp biểu thị trạng thái hiện tại của kernel thông qua một số giá trị đã được đặt trên các tham số khác nhau để thực hiện các tác vụ khác nhau. Vì điều này mang lại cho chúng tôi giao diện với nhân Linux, chúng tôi có thể áp dụng các thay đổi để tối ưu hóa và tinh chỉnh các cài đặt cụ thể. Hệ thống tệp /proc là ảo, đó là lý do tại sao mọi thứ được liệt kê là 0 byte và những thay đổi được thực hiện đối với tệp sẽ không tồn tại khi khởi động lại hệ thống.

Chúng tôi có thể xem các cài đặt hiện tại của tất cả các tham số hệ thống bằng cách chạy lệnh 'sysctl -a', như hình bên dưới, có 1008 biến có thể điều chỉnh khác nhau trên hệ thống RHEL 7 của tôi.

Mã nguồn [Chọn]
[ root@centos7 ~]# sysctl -a |
1008

Chúng ta cũng cần lưu ý rằng net.ipv4.icmp_echo_ignore_all và /proc/sys/net/ipv4/icmp_echo_ignore_all là tương đương nhau, '.' có thể được thay đổi thành '/' để chỉ đường dẫn đầy đủ của tệp trong hệ thống tệp /proc/sys.

3. Sửa đổi tham số thời gian chạy kernel

Các giá trị trong hệ thống tệp /proc/sys có thể được sửa đổi theo một số cách khác nhau. Các giá trị này sẽ duy trì liên tục sau khi khởi động lại hệ thống hoặc sẽ chỉ áp dụng không liên tục và sẽ trở lại mặc định sau khi khởi động lại hệ thống.

3.1. Thay đổi không liên tục

Chẳng hạn, chúng ta hãy xem tệp /proc/sys/net/ipv4/icmp_echo_ignore_all bên dưới.

Mã nguồn [Chọn]
[root@centos7 ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
0

Tệp này hiện chứa '0', có nghĩa là tắt. Mặt khác, '1' có nghĩa là cài đặt được bật và được bật. Theo mặc định, icmp_echo_ignore_all được đặt thành 0 để hệ thống sẽ phản hồi ping.

Thay vào đó, chúng ta có thể đặt giá trị này thành 1 theo cách thủ công, điều này sẽ vô hiệu hóa các phản hồi ping, điều này có thể được thực hiện bằng cách chạy lệnh echo như hình bên dưới để ghi đè và thay thế nội dung của tệp bằng 1 thay vì 0.

Tại thời điểm này, bạn nên khởi động lệnh ping liên tục đến máy kiểm tra của mình và xem phản hồi của nó, khi chúng tôi thay đổi tham số này thành '1', lệnh ping sẽ bắt đầu lỗi.

Mã nguồn [Chọn]
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
Sau khi thực hiện lệnh này, hệ thống sẽ không còn phản hồi các yêu cầu ping nữa.

Điều này cũng có thể được thực hiện với lệnh sysctl -w, như hình bên dưới. Về cơ bản, chúng thực hiện cùng một kết quả, đó là sửa đổi tệp trong /proc/sys.

Mã nguồn [Chọn]
sysctl -w net.ipv4.icmp_echo_ignore_all=1
Cả hai phương pháp này đều không liên tục và sẽ không tồn tại khi khởi động lại. Nếu bạn thực hiện các lệnh echo hoặc sysctl -w và thực hiện khởi động lại hệ thống, thay đổi sẽ không được duy trì và giá trị của tham số mà bạn đã đặt sẽ hoàn nguyên về cài đặt mặc định.

3.2. Thay đổi liên tục

Để thay đổi được duy trì liên tục và tồn tại khi khởi động lại hệ thống, chúng ta cần tạo tệp.conf trong thư mục /etc/sysctl.d. Tệp này sẽ được dịch vụ systemd-sysctl đọc khi khởi động cũng như các tệp cấu hình sysctl khác. Trước RHEL 7, điều này thường được thực hiện bằng cách sửa đổi tệp /etc/sysctl.conf, tuy nhiên kể từ RHEL 7, bạn nên tạo các tệp "*.conf" của riêng mình trong thư mục /etc/sysctl.d cho mục đích này.

Nếu chúng ta muốn liên tục bỏ qua tất cả các yêu cầu tiếng vang ICMP, chúng ta có thể tạo một tệp có bất kỳ tên nào trong /etc/sysctl.d miễn là nó kết thúc bằng.conf – điều này rất quan trọng để tệp được chọn và sử dụng.

Mã nguồn [Chọn]
[root@centos7 ~]# echo "net.ipv4.icmp_echo_ignore_all = 1" > /etc/sysctl.d/icmp-ignore.conf
[root@centos7 ~]# cat /etc/sysctl.d/icmp-ignore.conf
net.ipv4.icmp_echo_ignore_all = 1

Trong ví dụ trên, chúng tôi đã tạo tệp /etc/sysctl.d/icmp-ignore.conf chứa "net.ipv4.icmp_echo_ignore_all = 1", trên hệ thống tiếp theo khởi động lại tệp /proc/sys/net/ipv4/icmp_echo_ignore_all sẽ được đặt thành 1, thay vì mặc định là 0.

Chúng tôi không cần thực hiện khởi động lại để áp dụng các thay đổi, chúng tôi có thể áp dụng các thay đổi bằng cách sử dụng sysctl -p, như được hiển thị bên dưới bằng cách chạy net.ipv4.icmp_echo_ignore_all này được đặt thành 1

Mã nguồn [Chọn]
[root@centos7 ~]# sysctl -a | grep icmp_echo_ignore_all
net.ipv4.icmp_echo_ignore_all = 0

[root@centos7 ~]# sysctl -p /etc/sysctl.d/icmp-ignore.conf
net.ipv4.icmp_echo_ignore_all = 1

[root@centos7 ~]# sysctl -a | grep icmp_echo_ignore_all
net.ipv4.icmp_echo_ignore_all = 1

[root@centos7 ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
1

Với lệnh 'sysctl --system', chúng tôi có thể xem tất cả các thay đổi trong tất cả các tệp cấu hình sysctl, tệp /etc/sysctl.d/icmp-ignore.conf liên tục của chúng tôi sẽ hiển thị ở đây cũng như mọi thứ khác được áp dụng.

Mã nguồn [Chọn]
[root@centos7 ~]# sysctl --system
* Applying /usr/lib/sysctl.d/00-system.conf...
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
kernel.shmmax = 4294967295
kernel.shmall = 268435456
* Applying /usr/lib/sysctl.d/50-default.conf...
kernel.sysrq = 16
kernel.core_uses_pid = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.d/99-sysctl.conf...
* Applying /etc/sysctl.d/icmp-ignore.conf...
net.ipv4.icmp_echo_ignore_all = 1
* Applying /usr/lib/sysctl.d/libvirtd.conf...
fs.aio-max-nr = 1048576
* Applying /etc/sysctl.conf...

Tệp /etc/sysctl.d/icmp-ignore.conf là tệp duy nhất chúng tôi đã thêm thủ công cho thay đổi của mình, tất cả các tệp và thư mục khác là mặc định.

Nếu bạn đang chạy lệnh ping liên tục đến hệ thống thử nghiệm của mình, bạn sẽ nhận thấy rằng hệ thống sẽ ngừng phản hồi lệnh ping bất kỳ lúc nào /proc/sys/net/ipv4/icmp_echo_ignore_all chứa '1' và sẽ phản hồi khi chứa lệnh này một '0'.

Mặc dù ví dụ của chúng tôi chỉ đề cập cụ thể đến icmp_echo_ignore_all, nhưng phương pháp sửa đổi các tham số thời gian chạy kernel khác cũng hoạt động theo cách tương tự. Dưới đây là một số tham số thường được sửa đổi khác rất quan trọng cần lưu ý, đặc biệt là đối với RHCE.

  • kernel.hostname – Cái này đặt tên máy chủ của hệ thống.
  • vm.swappiness – Giá trị này xác định giá trị thể hiện sự sẵn sàng trao đổi dữ liệu từ bộ nhớ chính sang đĩa của hệ thống của bạn.
  • net.ipv4.ip_forward – Tính năng này phải được bật để hệ thống Linux của bạn hoạt động như một bộ định tuyến và chuyển tiếp lưu lượng giữa các giao diện mạng.

Bây giờ bạn đã có hiểu biết sơ lược về hệ thống tệp /proc/sys và các tham số nhân có sẵn có thể được sửa đổi để thay đổi các khía cạnh khác nhau của hành vi hệ thống Linux. Chúng tôi có thể thay đổi cài đặt theo cách không liên tục để kiểm tra bằng cách thay đổi nội dung của tệp ảo trong /proc/sys hoặc chúng tôi có thể tạo tệp.conf của riêng mình trong thư mục /etc/sysctl.d, sau đó sẽ liên tục áp dụng thay đổi ngay cả khi khởi động lại hệ thống.