现象:springcloudgateway报错too many open files*

查看系统和进程限制句柄数

查询服务器允许最大句柄数

ulimit -a

查询此进程允许最大句柄数

cat /proc/{pid}/limits

查询此进程当前占用句柄数

ls /proc/{pid}/fd | wc -l

观察open files数值,查看进程句柄数是否已达到限制。

持续压测,查看服务处理过程中,进程句柄数是否会释放。

服务器句柄数设置:

以下内容来源:https://www.cnblogs.com/sxdcgaq8080/p/11136952.html
系统级修改
2.1 临时修改方式

echo  6553560 > /proc/sys/fs/file-max

2.2 永久生效方式
vi /etc/sysctl.conf
修改/etc/sysctl.conf 文件,加入:

fs.file-max=65535

或者执行如下修改命令:

echo   fs.file-max = 6553560  >> /etc/sysctl.conf

使用vi修改文件和使用echo修改文件,最终效果都一样。

2.3 系统级永久生效方式修改后,重启服务器,才能生效

reboot

2.4 查看系统级文件句柄修改,是否生效

sudo sysctl -p

其他

也可能是服务不释放句柄的bug,需要升级相应版本。

https://github.com/spring-cloud/spring-cloud-gateway/issues/1792

netty0.9.8版本bug修复。

查看相关依赖,pom.xml搜索reactor-netty

image.png

升级依赖

spring-boot-starter-parent :
2.3.1.RELEASE改为2.3.4.RELEASE;
spring-cloud-starter-gateway :
2.2.7.RELEASE改为 2.2.10.RELEASE