有个服务程序,老是报文件无法打开,肯定是文件句柄打开太多了,需要修改一下
文件打开句柄限制可以通过命令查看:
ulimit -n
65535
65535看起来还不错,不至于这么少。所以我们看看我们的服务程序进程怎样。查看单独某个已经启动的进程,想查看它的文件打开句柄限制如下,(看起来有点少):
cat /proc/9481/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 127582 127582 processes
Max open files 1024 1048576 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 127582 127582 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
如果想修改登录用户的限制,则可以直接执行命令
ulimit -n 1000
ulimit -n
1000
当然这只是临时修改,如果想重启还生效可以修改配置文件:
/etc/security/limits.conf
其中:root说明针对root用户,*表示针对所有用户。
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535
这么修改后,重启服务,看看服务进程的打开句柄数,结果还是没有生效,原来这个修改只是针对登录用户的shell环境。我们在阿里云的操作系统中如果选择的是centos7操作系统镜像,是使用的systemd来启动的service,这个环境的打开句柄限制在另一个地方。
/etc/systemd/system.conf
其中修改的项目为:
DefaultLimitNOFILE=65000
修改后,重启机器就生效了。