记录文件描述符达到上限问题解决

1)先看系统的

复制代码
[root@huawei-sh1-3-gywzsbcslmzdsxsj-game-1 ~]# ulimit -n
65535   

疑问: 看着这个值是65535啊,但是依然连不上了

2)问了下豆包

3)那就查询下

复制代码
[root@huawei-sh1-3-gywzsbcslmzdsxsj-game-1 ~]# jps
12145 Jps
15603 nacos-server.jar
8979 server.jar
8627 server.jar
9421 server.jar
[root@huawei-sh1-3-gywzsbcslmzdsxsj-game-1 ~]# cat /proc/8979/limits | grep "Max open files"
Max open files            4096                 4096                 files     
[root@huawei-sh1-3-gywzsbcslmzdsxsj-game-1 ~]# cat /proc/8627/limits | grep "Max open files"
Max open files            4096                 4096                 files     
[root@huawei-sh1-3-gywzsbcslmzdsxsj-game-1 ~]# cat /proc/9421/limits | grep "Max open files"
Max open files            4096                 4096                 files     

果然是: 4096

4)调整配置

vim /etc/systemd/system.conf

复制代码
DefaultLimitNOFILE=1048576
#DefaultLimitAS=
DefaultLimitNPROC=1048576

vim /etc/sysctl.conf

复制代码
# ========== 文件描述符核心配置(必须加,匹配systemd的1048576) ==========
# 系统全局最大可打开的文件描述符总数(给1000万,冗余拉满,支撑高并发)
fs.file-max = 10000000
# 单个进程最大可打开的文件描述符硬上限(必须 >= systemd的DefaultLimitNOFILE=1048576)
fs.nr_open = 2000000

# ========== TCP 高并发优化(游戏服务器必加,解决连接瓶颈) ==========
# 调整TCP连接队列上限,解决高并发下连接拒绝
net.core.somaxconn = 65535
# 半连接队列上限,应对SYN Flood攻击,提升并发
net.ipv4.tcp_max_syn_backlog = 65535
# TIME_WAIT状态连接的最大数量,避免短时间大量连接占满端口
net.ipv4.tcp_max_tw_buckets = 2000000
# 允许TIME_WAIT状态的端口被快速复用,解决端口耗尽问题
net.ipv4.tcp_tw_reuse = 1
# 开启TCP时间戳,tw_reuse依赖此参数
net.ipv4.tcp_timestamps = 1
# 调整TCP keepalive参数,快速回收死连接,释放FD
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3

# ========== 内存优化(你已经有了,这里补充完整) ==========
# 关闭swap,避免内存交换导致服务卡顿(你已经配置了vm.swappiness=0,保留即可)
vm.swappiness=0

vim /etc/security/limits.conf

复制代码
root soft nofile 1048576
root hard nofile 1048576
* soft nofile 1048576
* hard nofile 1048576

5)生效

复制代码
sysctl -p

systemctl daemon-reexec

6)退出回话重新登录验证

复制代码
cat /proc/self/limits

ulimit -n

systemctl show --property DefaultLimitNOFILE

systemctl show --property DefaultLimitNPROC

7)验证java进程最大句柄数

复制代码
for pid in $(pidof java); do echo "PID: $pid"; cat /proc/$pid/limits | grep "Max open files"; done

可见,除了nacos没重启,其它的java进程都改为100W了

PID: 15603

Max open files 4096 4096 files

PID: 8357

Max open files 1048576 1048576 files

PID: 7897

Max open files 1048576 1048576 files

PID: 7531

Max open files 1048576 1048576 files

8)查看当每个java进程句柄占用数

复制代码
for pid in $(jps -q); do
echo -n "PID $pid: "
ls /proc/$pid/fd 2>/dev/null | wc -l
done
相关推荐
北京智和信通6 分钟前
某部队IT基础设施及机房动环统一运维建设实例
运维·网管平台·网管软件·网络管理系统·网络运维平台·网络运维系统
乐维_lwops15 分钟前
从 “救火运维” 到 “自动驾驶”:运维智能体到底解决了什么?
运维·人工智能·运维智能体
bush424 分钟前
嵌入式linux学习记录二
linux·运维·学习
9分钟带帽25 分钟前
linux_通过NFS挂载远程服务器的硬盘
linux·服务器
weixin_4684668541 分钟前
MoneyPrinterTurbo 短视频自动化生产实战指南
运维·人工智能·自动化·大模型·音视频·moneyprinter
難釋懷1 小时前
Nginx自签名-图形化工具 XCA
运维·nginx
迷枫7122 小时前
DM8 目录结构与常用排查入口梳理
服务器·数据库
运维栈记3 小时前
API Error: 400 Request body format invalid
linux·ai
志栋智能3 小时前
小步快跑:从单一场景开启超自动化巡检之旅
运维·网络·人工智能·自动化
AugustRed3 小时前
Linux 运维常用命令大全(超全速查表)
运维·网络·php