解决高并发中出现Too many open files问题

来源:互联网 发布:ipad照片怎么导入mac 编辑:程序博客网 时间:2024/05/20 18:18

1.主要方向:在源码项目中查找所有引用了InputStream或者其他流的地方,查看其是否在使用完后,正常close掉,此处建议将流的close放到finally块中,这样异常时也会去close流。

2.次要方向:session或者其他有用到socket的代码处,仔细查询看是否有没有释放资源的地方

 

另附:

        Linux中执行下面2个指令可以看出系统默认open files1024不足以支撑测试,请相应调整为4096

        在系统访问高峰时间以root用户执行下面的脚本,可能出现的结果如下:                 

                # lsof -n|awk ‘{print$2}’|sort|uniq -c |sort -nr|more 

                   1170   32229 
                    57  24244 

                    57  24231 
                    56  24264 

      其中第一列是打开的文件句柄数量,第二列是进程号。

                # ps-aef|grep 32229 

root    32229     1 33 10:58 pts/0    00:09:17/usr/java/jdk1.6.0_32/bin/java-Djava.util.logging.config.file=/kmsapp/apache-tomcat-6.0.35_engine/conf/logging.properties-Xms512m -Xmx2048m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager-Djava.endorsed.dirs=/kmsapp/apache-tomcat-6.0.35_engine/endorsed -classpath/kmsapp/apache-tomcat-6.0.35_engine/bin/bootstrap.jar-Dcatalina.base=/kmsapp/apache-tomcat-6.0.35_engine-Dcatalina.home=/kmsapp/apache-tomcat-6.0.35_engine -Djava.io.tmpdir=/kmsapp/apache-tomcat-6.0.35_engine/temporg.apache.catalina.startup.Bootstrap start

发现是tomcat进程打开最多文件句柄数量,而且它打开了1170个文件句柄数量,超出了1024的默认值。

 

所以应该将值调为4096,那么要想永久性的调整,请按如下2步操作:

 1、修改/etc/security/limits.conf

       通过 vi /etc/security/limits.conf修改其内容,在文件最后加入(数值也可以自己定义):

       * soft  nofile = 4096

        * hard  nofile = 4096


2、修改/etc/profile

       通过vi/etc/profile修改,在最后加入以下内容:

       ulimit -n4096


      然后重新登录即可生效了。
0 0