测试环境报错:打开文件过多
今天在测试内存泄漏的解决代码时候压测了一下,发现错误日志:
于是看看文件描述符的限制,原来每个进程都是默认的1024, 查看的相关命令:
cat /etc/sysctl.conf可修改 cat /proc/sys/fs/file-nr cat /proc/sys/fs/file-max sysctl -a | grep fs.file-max最大文件描述符 ulimit -n查看单进程最大文件描述符 ulimit -n d更改为d ulimit -a查看限制 lsof查看当前哪些进程打开哪些句柄,哪些文件被哪些进程占用
lsof -p $java_pid 每个文件描述符的具体属性
lsof -p $java_pid | wc -l 当前Java进程file descriptor table中FD的总量
不过ulimit -n d(ulimt -SHn)是临时修改,重启就没了,可以通过修改/etc/security/limits.conf文件
这里的*是指所有用户,如果想指定用户,可以换成用户名
注意.这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning.其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变.
然而,这些都改完了,这个错误还在报,于是lsof -p pid 了一下,发现大量的对同一个文件的读写,那就简单了,代码里有bug,每次请求都去打开了下这个配置文件,改代码就好了。
参考:
http://blog.sina.com.cn/s/blog_4ac5f5e001016sw4.html
http://www.cnblogs.com/ibook360/archive/2012/05/11/2495404.html
转载请注明出处