线上视频服务画面不可见了,打开日志发现错误提示 too many open files,是说进程打开的文件数过大,已达上限,线上服务器是ubuntu20.04,默认进程能够打开的文件数配置大小是1024,故需要增大可打开的文件数。
线上视频服务名称为goCamera,查看此服务打开的文件数。
1、查看进程能够打开的最大文件数:
ulimit -a
2、查询到进程ID:
ps -ef | grep goCamera
得到进程ID为282048
3、查看此进程允许打开的最大文件数:
cat /proc/282048/limits
4、查询此进程已经打开的文件数:
sudo lsof -p 282048 | wc -l
目前是355,当涨到一千多的时候就会报错:too many open files
5、增大进程可打开的最大文件数:
5.1、通过命令暂时修改,重启后失效:
若遇权限不足,使用较大权限的账号
ulimit -n 204800
5.2、通过修改配置文件的形式永久修改:
# sudo vim /etc/security/limits.conf
# 在文件末尾添加
* soft nofile 204800
* hard nofile 204800
至此,如果解决了那就没啥问题了,但如果还是会出现相同的问题,那么检查自己的服务是否交由systemctl进行了管理,若是,则还需要进行配置。
在Centos7 & ubuntu 系统中,使用Systemd替代了之前的SysV。/etc/security/limits.conf文件的配置作用域缩小了。/etc/security/limits.conf的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。
6、修改Systemctl默认的进程能够打开的最大文件数:
# sudo vim /etc/systemd/system.conf
# 在文件末尾添加
DefaultLimitNOFILE=204800
DefaultLimitNPROC=204800
然后运行命令:
# 使修改system.conf生效
sudo systemctl daemon-reexec
# 重启服务
sudo systemctl restart xxx.Service
7、补充:
7.1、查看系统能够打开的最大文件数(区别于进程):
cat /proc/sys/fs/file-max
7.2、修改系统能够打开的最大文件数:
sudo vim /etc/sysctl.conf
# 文件末尾添加
fs.file-max=1000000
# 刷新配置生效
sudo sysctl -p
8、总结:
淦!