Java 在bluemix liberty上调试web应用中的文件描述符泄漏

Java 在bluemix liberty上调试web应用中的文件描述符泄漏,java,jdbc,db2,ibm-cloud,websphere-liberty,Java,Jdbc,Db2,Ibm Cloud,Websphere Liberty,我有一个在bluemix liberty上运行的web应用程序。If提供了一个restapi,它通过jdbc从db2实例检索信息。我观察到,大约7天后,我所有的RESTAPI查询都失败了。查看日志,我看到DriverManager.getConnection方法引发NoClassDef异常。ffdc异常摘要文件还有一个关联的FileNotFound异常(原因是“打开的文件太多”),导致无法写入该文件。摘录自底部包含的messages.log 查看我的代码,我发现我并没有在一个RESTAPI请求中

我有一个在bluemix liberty上运行的web应用程序。If提供了一个restapi,它通过jdbc从db2实例检索信息。我观察到,大约7天后,我所有的RESTAPI查询都失败了。查看日志,我看到DriverManager.getConnection方法引发NoClassDef异常。ffdc异常摘要文件还有一个关联的FileNotFound异常(原因是“打开的文件太多”),导致无法写入该文件。摘录自底部包含的messages.log

查看我的代码,我发现我并没有在一个RESTAPI请求中关闭jdbc连接,该请求在过去7天中每5分钟调用一次。这是否会导致wlp服务器的打开文件描述符超过限制(限制约为16000)

我尝试了以下步骤来验证这一点:

  • 将属性“BLUEMIX\u APP\u MGMT\u ENABLE”设置为“devconsole+shell”。(cf set env BLUEMIX\u APP\u MGMT\u ENABLE devconsole+shell)
  • 重新启动的应用程序
  • 已通过“打开外壳至应用程序环境”https:///bluemix-debug/shell'.
  • 找到wlp服务器的pid。运行'lsof-p pid | wc-l'以获取打开文件的计数
  • 使用未关闭的连接运行rest api请求500次
  • 再次对上述pid的打开文件进行计数
  • ​ 我注意到打开的文件数量有所增加,但只是暂时的。这个数字逐渐下降(到所有500个请求完成时),几乎与以前一样。我原以为打开的文件数会持续更长时间

    这种方法正确吗(即泄漏发生在其他地方)? 我也尝试过使用jconsole,但它没有显示打开的文件描述符计数

    [2/9/16 3:00:11:773 GMT] 0000fd52 com.ibm.ws.webcontainer.util.ApplicationErrorUtils           E SRVE0777E: Exception thrown by application class 'org..apache.wink.server.internal.RequestProcessor.handleRequest:195'
    javax.servlet.ServletException: java.lang.NoClassDefFoundError: com/ibm/db2/jcc/am/uo
        at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:195)
        at com.ibm.websphere.jaxrs.server.IBMRestServlet..service(IBMRestServlet.java:107)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1287)
        at com.ibm.ws.webcontainer.servlet..ServletWrapper.handleRequest(ServletWrapper.java:778)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:475)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1161)
        at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:81)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:928)
        at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:262)
        at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:955)
        at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:341)
        at com.ibm..ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:470)
        at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:404)
        at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:284)
        at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:255)
        at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback..java:174)
        at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:83)
        at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:504)
        at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:574)
        at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:929)
        at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1018)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.NoClassDefFoundError: com/ibm/db2/jcc/am/uo
        at com.ibm.db2.jcc.t4.xb.a(xb.java:433)
        at com.ibm.db2.jcc.t4.xb.<init>(xb.java:90)
        at com.ibm.db2.jcc.t4.a.z(a.java:347)
        at com.ibm.db2.jcc.t4.b.a(b.java:1974)
        at com.ibm.db2.jcc.am.ib.a(ib.java:691)
        at com.ibm.db2.jcc.am.ib.<init>(ib.java:644)
        at com.ibm.db2.jcc.t4.b..<init>(b.java:330)
        at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:231)
        at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:197)
        at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:472)
        at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:113)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at com.ibm.biginsights.bluemix.infra.util.RepositoryHelper.getConnection(RepositoryHelper.java:58)
        at com.ibm.biginsights.bluemix.infra.dao.JdbcDAOFactoryImpl.initConnection(JdbcDAOFactoryImpl.java:39)
        at com.ibm.biginsights.bluemix.infra.pojo.MonitoringAPI.getStatus(MonitoringAPI.java:48)
        at com.ibm.biginsights.bluemix.infra.rest.MonitoringService.getStats(MonitoringService.java:53)
        at sun.reflect.GeneratedMethodAccessor82.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.wink.server.internal.handlers.InvokeMethodHandler.handleRequest(InvokeMethodHandler.java:63)
        at org.apache.wink.server.handlers.AbstractHandler.handleRequest(AbstractHandler.java:33)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.handlers.CreateInvocationParametersHandler.handleRequest(CreateInvocationParametersHandler.java:54)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.handlers.AbstractHandler.handleRequest(AbstractHandler.java:34)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleResourceMethod(FindResourceMethodHandler.java:151)
        at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleRequest(FindResourceMethodHandler.java:65)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.handlers.FindRootResourceHandler.handleRequest(FindRootResourceHandler.java:95)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink..server.internal.handlers.HeadMethodHandler.handleRequest(HeadMethodHandler..java:53)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.handlers.OptionsMethodWADLHandler.handleRequest(OptionsMethodWADLHandler.java:51)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.handlers.SearchResultHandler.handleRequest(SearchResultHandler.java:33)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.log.ResourceInvocation.handleRequest(ResourceInvocation.java:92)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.internal.log.Requests.handleRequest(Requests.java:76)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
        at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
        at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
        at org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:60)
        at org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:207)
        at org..apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:154)
        ... 24 more
    
    [2/9/16 3:00:11:774 GMT] 0000fd52 SystemErr                                                    R java.io.FileNotFoundException: ../../../../../logs/ffdc/exception_summary_16.02.05_08.25.38.0.log (Too many open files)
    [2/9/16 3:00:11:774 GMT] 0000fd52 SystemErr                                                    R    at java.io.FileOutputStream.open0(Native Method)
    [2/9/16 3:00:11:775 GMT] 0000fd52 SystemErr                                                    R    at java.io.FileOutputStream.open(Unknown Source)
    [2/9/16 3:00:11:775 GMT] 0000fd52 SystemErr                                                    R    at java.io.FileOutputStream.<init>(Unknown Source)
    [2/9/16 3:00:11:775 GMT] 0000fd52 SystemErr                                                    R    at java.io.FileOutputStream.<init>(Unknown Source)
    [2/9/16 3:00:11:775 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.kernel..boot.logging.DefaultFileStreamFactory.createOutputStream(DefaultFileStreamFactory.java:28)
    [2/9/16 3:00:11:775 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.kernel.boot.logging..TextFileOutputStreamFactory.createOutputStream(TextFileOutputStreamFactory..java:66)
    [2/9/16 3:00:11:775 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl$1.createOutputStream(LauncherDelegateImpl.java:59)
    [2/9/16 3:00:11:776 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.logging.internal.impl.BaseFFDCService.createSummaryStream(BaseFFDCService.java:430)
    [2/9/16 3:00:11:776 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.logging.internal.impl.BaseFFDCService.logSummary(BaseFFDCService.java:300)
    [2/9/16 3:00:11:776 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.logging.internal.impl.BaseFFDCService.logSummary(BaseFFDCService.java:274)
    [2/9/16 3:00:11:776 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.logging.internal.impl.BaseFFDCService.log(BaseFFDCService.java:237)
    [2/9/16 3:00:11:776 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.logging.internal.impl.BaseFFDCService.processException(BaseFFDCService.java:160)
    [2/9/16 3:00:11:776 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.ffdc.FFDCFilter.processException(FFDCFilter.java:45)
    [2/9/16 3:00:11:777 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1226)
    [2/9/16 3:00:11:777 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:81)
    [2/9/16 3:00:11:777 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.webcontainer.WebContainer..handleRequest(WebContainer.java:928)
    [2/9/16 3:00:11:777 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:262)
    [2/9/16 3:00:11:777 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:955)
    [2/9/16 3:00:11:777 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:341)
    [2/9/16 3:00:11:777 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:470)
    [2/9/16 3:00:11:778 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:404)
    [2/9/16 3:00:11:778 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:284)
    [2/9/16 3:00:11:778 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:255)
    [2/9/16 3:00:11:778 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:174)
    [2/9/16 3:00:11:778 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:83)
    [2/9/16 3:00:11:778 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:504)
    [2/9/16 3:00:11:779 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:574)
    [2/9/16 3:00:11:779 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:929)
    [2/9/16 3:00:11:779 GMT] 0000fd52 SystemErr                                                    R    at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1018)
    [2/9/16 3:00:11:779 GMT] 0000fd52 SystemErr                                                    R    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    [2/9/16 3:00:11:779 GMT] 0000fd52 SystemErr                                                    R    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    [2/9/16 3:00:11:779 GMT] 0000fd52 SystemErr                                                    R    at java.lang.Thread.run(Unknown Source)
    
    [2/9/16 3:00:11:773 GMT]0000fd52 com.ibm.ws.webcontainer.util.ApplicationErrorUtils E SRVE0777E:应用程序类“org..apache.wink.server.internal.RequestProcessor.HandlerRequest:195”引发的异常
    javax.servlet.ServletException:java.lang.NoClassDefFoundError:com/ibm/db2/jcc/am/uo
    位于org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:195)
    位于com.ibm.websphere.jaxrs.server.IBMRestServlet..service(IBMRestServlet.java:107)
    位于javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    位于com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1287)
    位于com.ibm.ws.webcontainer.servlet..ServletWrapper.HandlerRequest(ServletWrapper.java:778)
    位于com.ibm.ws.webcontainer.servlet.ServletWrapper.HandlerRequest(ServletWrapper.java:475)
    在com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1161)
    位于com.ibm.ws.webcontainer.servlet.CacheServletWrapper.HandlerRequest(CacheServletWrapper.java:81)
    位于com.ibm.ws.webcontainer.webcontainer.handleRequest(webcontainer.java:928)
    位于com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:262)
    位于com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:955)
    位于com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:341)
    位于com.ibm..ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:470)
    位于com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:404)
    位于com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:284)
    位于com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:255)
    在com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators上(NewConnectionInitialReadCallback..java:174)
    在com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:83)上
    位于com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:504)
    位于com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:574)
    位于com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:929)
    位于com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1018)
    位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源)
    位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源)
    位于java.lang.Thread.run(未知源)
    原因:java.lang.NoClassDefFoundError:com/ibm/db2/jcc/am/uo
    com.ibm.db2.jcc.t4.xb.a(xb.java:433)
    com.ibm.db2.jcc.t4.xb.(xb.java:90)
    位于com.ibm.db2.jcc.t4.a.z(a.java:347)
    com.ibm.db2.jcc.t4.b.a(b.java:1974)
    com.ibm.db2.jcc.am.ib.a(ib.java:691)
    com.ibm.db2.jcc.am.ib.(ib.java:644)
    在com.ibm.db2.jcc.t4.b…(b.java:330)
    位于com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:231)
    位于com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:197)
    com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:472)
    com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:113)
    位于java.sql.DriverManager.getConnection(未知源)
    位于java.sql.DriverManager.getConnection(未知源)
    在com.ibm.bigdights.bluemix.infra.util.RepositoryHelper.getConnection上(RepositoryHelper.java:58)
    位于com.ibm.bigdights.bluemix.infra.dao.jdbcdaofactorympl.initConnection(jdbcdaofactorympl.java:39)
    在com.ibm.bigdights.bluemix.infra.pojo.MonitoringAPI.getStatus上(MonitoringAPI.java:48)
    在com.ibm.bigdights.bluemix.infra.rest.MonitoringService.getStats上(MonitoringService.java:53)
    位于sun.reflect.GeneratedMethodAccessor82.invoke(未知源)
    在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
    位于java.lang.reflect.Method.invoke(未知源)
    位于org.apache.wink.server.internal.handlers.InvokeMethodHandler.handleRequest(InvokeMethodHandler.java:63)
    位于org.apache.wink.server.handlers.AbstractHandler.HandlerRequest(AbstractHandler.java:33)