就是我按照网上的说法,在 /etc/security/limits.conf 里面,配置了以下内容
* soft nofile 6555
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
然后我登录环境,ulimit -n 执行结果也确实是 65535,
然后我在开机启动脚本 /etc/rc.local 启动 TcpRoute2 代理软件,结果这个进程起来之后 最大 fd 是 1024,提示 too many open files
我手动重启 TcpRoute2,这个进程的最大 fd 就是 65535 了,问题规避
通过查看 http://www.jb51.net/article/97706.htm ,我发现了原因:
1、这个限制是针对单个程序的限制
2、这个限制不会改变之前已经运行了的程序的限制
3、对这个值的修改,退出了当前的 shell 就会消失
比如说,我先运行了一个程序 A,然后通过 ulimit 修改了限制为 2048,然后运行 B,然后退出了 shell 再登录,然后运行 C。那就只有 B 可以打开 2048 个句柄。
那么我有几个小问题,希望大家指点一下:
1. 如果我就要开机启动脚本里面,启动的进程就是 65535,怎么办呢?或者是规范的做法是什么呢?
2. @GameXG 就算用户不设置 65535,代码里面可以申请 65535 个 fd 吗?总感觉默认 1024 不够用,毕竟是代理软件
谢谢
* soft nofile 6555
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
然后我登录环境,ulimit -n 执行结果也确实是 65535,
然后我在开机启动脚本 /etc/rc.local 启动 TcpRoute2 代理软件,结果这个进程起来之后 最大 fd 是 1024,提示 too many open files
我手动重启 TcpRoute2,这个进程的最大 fd 就是 65535 了,问题规避
通过查看 http://www.jb51.net/article/97706.htm ,我发现了原因:
1、这个限制是针对单个程序的限制
2、这个限制不会改变之前已经运行了的程序的限制
3、对这个值的修改,退出了当前的 shell 就会消失
比如说,我先运行了一个程序 A,然后通过 ulimit 修改了限制为 2048,然后运行 B,然后退出了 shell 再登录,然后运行 C。那就只有 B 可以打开 2048 个句柄。
那么我有几个小问题,希望大家指点一下:
1. 如果我就要开机启动脚本里面,启动的进程就是 65535,怎么办呢?或者是规范的做法是什么呢?
2. @GameXG 就算用户不设置 65535,代码里面可以申请 65535 个 fd 吗?总感觉默认 1024 不够用,毕竟是代理软件
谢谢
