测试环境报错:打开文件过多

  今天在测试内存泄漏的解决代码时候压测了一下,发现错误日志:

  于是看看文件描述符的限制,原来每个进程都是默认的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

posted @ 2016-07-22 14:11  draculav  阅读(453)  评论(0)    收藏  举报