2014-03-26 69 views
0

我們有一個簡單的webapp,它將大量數據發送到我們的elasticsearch節點。Elasticsearch java api創建太多線程

這是我們如何創造運輸客戶elasticsearch

 TransportClient client = new TransportClient().addTransportAddress(new InetSocketTransportAddress(elasticSearchUrl, 9300)); 

萬物去罰款和數據會雖然直到事情發生到elasticsearch節點。所以,如果我們關閉集羣,我們得到一個非常好的預期異常

org.elasticsearch.client.transport.NoNodeAvailableException: No node available 
    at org.elasticsearch.client.transport.TransportClientNodesService$RetryListener.onFailure(TransportClientNodesService.java:249) 
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:217) 
    at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:106) 
    at org.elasticsearch.client.support.AbstractClient.index(AbstractClient.java:84) 
    at org.elasticsearch.client.transport.TransportClient.index(TransportClient.java:316) 
    at org.elasticsearch.action.index.IndexRequestBuilder.doExecute(IndexRequestBuilder.java:324) 
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85) 
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59) 
    at com.startmobi.statistics.core.StatisticServiceManager.createStatistic(StatisticServiceManager.java:42) 
    at sun.reflect.GeneratedMethodAccessor382.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:77) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at com.sun.proxy.$Proxy178.createStatistic(Unknown Source) 
    at sun.reflect.GeneratedMethodAccessor381.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205) 
    at org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:38) 
    at org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78) 
    at org.springframework.remoting.support.RemoteInvocationBasedExporter.invokeAndCreateResult(RemoteInvocationBasedExporter.java:114) 
    at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.handleRequest(HttpInvokerServiceExporter.java:73) 
    at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at com.googlecode.psiprobe.Tomcat60AgentValve.invoke(Tomcat60AgentValve.java:30) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:647) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:662) 

的問題是10秒後,我們得到了另一個異常

java.lang.OutOfMemoryError: unable to create new native thread 
    at java.lang.Thread.start0(Native Method) 
    at java.lang.Thread.start(Thread.java:640) 
    at java.util.concurrent.ThreadPoolExecutor.addThread(ThreadPoolExecutor.java:681) 
    at java.util.concurrent.ThreadPoolExecutor.addIfUnderMaximumPoolSize(ThreadPoolExecutor.java:727) 
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:655) 
    at org.elasticsearch.transport.TransportService.sendRequest(TransportService.java:203) 
    at org.elasticsearch.action.TransportActionNodeProxy.execute(TransportActionNodeProxy.java:68) 
    at org.elasticsearch.client.transport.support.InternalTransportClient$2.doWithNode(InternalTransportClient.java:109) 
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:214) 
    at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:106) 
    at org.elasticsearch.client.support.AbstractClient.index(AbstractClient.java:84) 
    at org.elasticsearch.client.transport.TransportClient.index(TransportClient.java:316) 
    at org.elasticsearch.action.index.IndexRequestBuilder.doExecute(IndexRequestBuilder.java:324) 
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85) 
    at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59) 
    at com.startmobi.statistics.core.StatisticServiceManager.createStatistic(StatisticServiceManager.java:42) 
    at sun.reflect.GeneratedMethodAccessor382.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
    at org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:77) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
    at com.sun.proxy.$Proxy178.createStatistic(Unknown Source) 
    at sun.reflect.GeneratedMethodAccessor381.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205) 
    at org.springframework.remoting.support.DefaultRemoteInvocationExecutor.invoke(DefaultRemoteInvocationExecutor.java:38) 
    at org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78) 
    at org.springframework.remoting.support.RemoteInvocationBasedExporter.invokeAndCreateResult(RemoteInvocationBasedExporter.java:114) 
    at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.handleRequest(HttpInvokerServiceExporter.java:73) 
    at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at com.googlecode.psiprobe.Tomcat60AgentValve.invoke(Tomcat60AgentValve.java:30) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:647) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Thread.java:662) 

而且整個操作系統只得到超級忙,我們必須重新啓動整個機器。你們有什麼線索可以解決問題嗎?

編輯:我們正在使用ES版本0.9.12

+0

Elasticsearch的哪個版本是這樣的? – pickypg

+0

您是否嘗試在Visual VM(或另一個分析器)中打開您的應用程序以查看其內存使用情況,因此_what_應歸咎於「OutOfMemoryError」?可能它是線程數,但執行程序不應該創建比Executor支持的線程多,這看起來像是另一個問題的症狀。具體而言,失敗的塊位於'catch(Throwable)'內,可能會捕獲'OutOfMemoryError'本身,然後重新觸發它。 – pickypg

+0

我們使用ES 0.9.12。我明天會試試這個配置文件。 –

回答

0

我們使用elasticsearch 0.90.12和Java庫爲0.90.6。由於我們將java庫更新爲0.90.12,所有問題都消失了。