Add optimize_sysctl.sh
This commit is contained in:
1 parent
abcb86cfdb
commit
05e5e29d53
1 file changed
+93
@@ -0,0 +1,93 @@
|
|||||||
|
#!/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 <<EOF >> /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
|
||||||
Reference in new issue
Block a user