2016-02-12 128 views
0

我有一个在bluemix liberty上运行的web应用程序。如果提供一个rest API,通过jdbc从db2实例中获取信息。我观察大约7天后,我所有的休息api查询都失败了。看着日志,我看到了DriverManager.getConnection方法引发的NoClassDef异常。还有一个关联的FileNotFound异常(原因是“打开的文件太多”),导致ffdc异常汇总文件无法写入。摘自底部包含的messages.log。在bluemix liberty上调试Web应用程序中的文件描述符泄漏

看着我的代码,我看到我没有在最近7天每5分钟调用一次的rest api请求中关闭jdbc连接。这可能导致超过wlp服务器的打开文件描述符的限制(限制约为16000)?

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

  1. 设置属性 'BLUEMIX_APP_MGMT_ENABLE' 到 'devconsole +外壳'。 (参见set-env BLUEMIX_APP_MGMT_ENABLE devconsole + shell)。
  2. Restaged app。
  3. 通过'https:/// bluemix-debug/shell'打开应用程序env的shell。
  4. 找到了wpp服务器的pid。 Ran'lsof -p pid | wc -l'来获得打开文件的数量。
  5. 其余的API请求与未关闭的连接500次。
  6. 再次计算了上面的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) 
+0

更新:确实发生了文件描述符泄漏。它似乎与我的Web应用程序中使用的db2 jdbc驱动程序有关。用新版本替换后,我没有再观察到泄漏。 – Sbin123

回答

相关问题