现象: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
升级依赖
spring-boot-starter-parent :
2.3.1.RELEASE改为2.3.4.RELEASE;
spring-cloud-starter-gateway :
2.2.7.RELEASE改为 2.2.10.RELEASE