← 戻る
ファイル記述子の上限を引き上げ
nofile を 65535 に引き上げ、file-max と接続バックログも広げます。高負荷なサービスはこの三か所で詰まりがちです。
root が必要
ワンライン実行
curl -fsSL https://www.moiu.cn/scripts/limits-tune.sh | bashソース
#!/usr/bin/env bash
# 提高文件描述符上限
#
# 把 nofile 软硬上限提到 65535,并调大内核级的 file-max 与连接队列 ——
# 高并发服务经常在这三处撞墙。
# ❗ nofile 要重新登录(或重启服务)才对当前会话生效。
set -e
# 需要 root:下面的系统级改动都直接执行,不再逐条 sudo
if [ "$(id -u)" -ne 0 ]; then
echo '[!] 这个脚本需要 root 权限,请用 sudo 重新运行:'
echo ' curl -fsSL 脚本地址 | sudo bash'
echo ' 或已经下载到本地:sudo bash 本文件'
exit 1
fi
LIMITS=/etc/security/limits.d/99-xiaomo.conf
SYSCTL=/etc/sysctl.d/99-xiaomo-limits.conf
echo '====== 提高系统上限 ======'
cat > "$LIMITS" <<'LIMITS_EOF'
# 由 XiaoMo 脚本写入
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
LIMITS_EOF
cat > "$SYSCTL" <<'SYSCTL_EOF'
# 由 XiaoMo 脚本写入
fs.file-max = 1000000
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
SYSCTL_EOF
sysctl --system >/dev/null
echo '[*] 已写入:'
echo " $LIMITS"
echo " $SYSCTL"
echo ''
echo '====== 当前内核值 ======'
echo " fs.file-max:$(cat /proc/sys/fs/file-max)"
echo " somaxconn:$(cat /proc/sys/net/core/somaxconn)"
echo ''
echo '❗ nofile 要重新登录(或重启服务)才对当前会话生效。'
