#!/bin/bash # Kiểm tra quyền root if [ "$EUID" -ne 0 ]; then echo "Vui lòng chạy script bằng quyền root (sudo)." exit 1 fi # Đọc dung lượng RAM của hệ thống (đơn vị: MB) TOTAL_RAM_MB=$(free -m | awk '/^Mem:/{print $2}') # Cấu hình động dựa trên dung lượng RAM if [ "$TOTAL_RAM_MB" -gt 8000 ]; then # Hệ thống RAM lớn (> 8GB) SOMAXCONN=65535 MAX_SYN_BACKLOG=65535 CONNTRACK_MAX=262144 else # Hệ thống RAM nhỏ (<= 8GB) SOMAXCONN=16384 MAX_SYN_BACKLOG=16384 CONNTRACK_MAX=65536 fi echo "=== Thông số tối ưu Kernel phát hiện ===" echo "Total RAM: $TOTAL_RAM_MB MB" echo "net.core.somaxconn: $SOMAXCONN" echo "net.ipv4.tcp_max_syn_backlog: $MAX_SYN_BACKLOG" echo "net.netfilter.nf_conntrack_max: $CONNTRACK_MAX" echo "========================================" # Sao lưu file sysctl.conf hiện tại BACKUP_SYSCTL="/etc/sysctl.conf.bak.$(date +%F_%T)" cp /etc/sysctl.conf "$BACKUP_SYSCTL" echo "[+] Đã sao lưu sysctl.conf cũ tại: $BACKUP_SYSCTL" # Xóa các dòng cấu hình cũ trùng lặp nếu có để tránh xung đột sed -i '/fs.file-max/d' /etc/sysctl.conf sed -i '/net.core.somaxconn/d' /etc/sysctl.conf sed -i '/net.core.netdev_max_backlog/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_max_syn_backlog/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_fin_timeout/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_tw_reuse/d' /etc/sysctl.conf sed -i '/net.ipv4.ip_local_port_range/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_fastopen/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_rmem/d' /etc/sysctl.conf sed -i '/net.ipv4.tcp_wmem/d' /etc/sysctl.conf sed -i '/net.netfilter.nf_conntrack_max/d' /etc/sysctl.conf # Ghi cấu hình tối ưu mạng mới vào cuối file cat <> /etc/sysctl.conf # --- TOI UU REVERSE PROXY CHIU TAI CAO --- # Tang gioi han mo file cua toan he thong fs.file-max = 2097152 # Mo rong hang doi ket noi (Socket Backlog) net.core.somaxconn = $SOMAXCONN net.core.netdev_max_backlog = $SOMAXCONN net.ipv4.tcp_max_syn_backlog = $MAX_SYN_BACKLOG # Tai su dung trang thai TIME_WAIT de giai phong port nhanh hon net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_max_tw_buckets = 262144 # Mo rong dai port local cho phep ket noi outbound net.ipv4.ip_local_port_range = 1024 65535 # Bat TCP Fast Open de tang toc bat tay 3 buoc (neu duoc ho tro) net.ipv4.tcp_fastopen = 3 # Tang gioi han theo doi ket noi (Chong loi conntrack: table full) net.netfilter.nf_conntrack_max = $CONNTRACK_MAX # Toi uu hoa cua so buffer TCP (Buffer size tu dong dieu chinh) net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 EOF # Áp dụng cấu hình ngay lập tức mà không cần reboot server echo "[+] Đang áp dụng cấu hình Kernel mới..." sysctl -p if [ $? -eq 0 ]; then echo "[+] Tối ưu hóa sysctl.conf thành công!" else echo "[-] Có lỗi xảy ra khi áp dụng cấu hình. Đang khôi phục bản sao lưu..." cp "$BACKUP_SYSCTL" /etc/sysctl.conf sysctl -p exit 1 fi