2014-11-20 2 views
1

У меня есть небольшой (5-узловой) кластер, который я использую для оценки производительности DSE Search с различными стратегиями индексирования (я использую DSE 4.5.2 на CentOS) , Когда я отправляю только один запрос за раз, все работает нормально, но когда я наращиваю нагрузку, я быстро вижу исключения netty. В SolrJ (большая часть моего тестирования использует клиент Java), они проявляются какDSE Solr: Ошибки Netty при одновременных запросах запросов

Error with server [MY URL]: org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: address already in use by: [id: 0x2d3873c4, local:E:2d3873c4 => local:local] 

Это, кажется, происходит последовательно, когда у меня есть несколько потоков одновременно запрашивая кластер, независимо от того, какой узел я фактически указал на и независимо от того, происходят ли запросы от одного и того же сервера. Я также смог вызвать это поведение при использовании других клиентов (например, PySolr4), поэтому, похоже, это проблема с настройкой DSE, а не какая-то странная проблема с моим тестовым приложением.

Кроме того, если я изменил тип связи между узлами в dse.yaml от netty до http, тот же кластер с радостью ответит клиентам, отправляющим сотни одновременных запросов. Сначала я оставил настройки netty * по умолчанию в dse.yaml, но после обнаружения ошибки я играл с несколькими опциями (max_connections, акцептор/рабочие потоки и т. Д.); к сожалению, я не нашел много документации вокруг этих значений, и ничто из меня не изменилось, казалось, имело желаемый эффект.

Концептуально, кажется, что использование netty обеспечит гораздо лучшую производительность, чем http, поэтому я хотел бы попытаться выяснить, что здесь может быть неправильным. Заранее благодарю за любой совет.

Ниже трассировки стека из /var/log/cassandra/system.log, соответствующий одному из этих ошибок:

ERROR [http-8983-exec-4] 2014-11-19 18:35:51,557 SolrDispatchFilter.java (line 696) Error request exception: address already in use by: [id: 0x17617168, local:E:17617168 => local:local] 
java.lang.RuntimeException: address already in use by: [id: 0x17617168, local:E:17617168 => local:local] 
    at com.datastax.bdp.search.solr.handler.shard.netty.ShardClient.tryNewConnection(ShardClient.java:204) 
    at com.datastax.bdp.search.solr.handler.shard.netty.ShardClient.sendTo(ShardClient.java:163) 
    at com.datastax.bdp.search.solr.handler.shard.netty.NettyShardHandler.submit(NettyShardHandler.java:76) 
    at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:287) 
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:137) 
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1889) 
    at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:723) 
    at com.datastax.bdp.search.solr.servlet.CassandraDispatchFilter.execute(CassandraDispatchFilter.java:185) 
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:413) 
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:197) 
    at com.datastax.bdp.search.solr.servlet.CassandraDispatchFilter.doFilter(CassandraDispatchFilter.java:147) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at com.datastax.bdp.cassandra.audit.SolrHttpAuditLogFilter.doFilter(SolrHttpAuditLogFilter.java:218) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at com.datastax.bdp.search.solr.auth.CassandraAuthorizationFilter.doFilter(CassandraAuthorizationFilter.java:100) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at com.datastax.bdp.search.solr.auth.DseAuthenticationFilter.doFilter(DseAuthenticationFilter.java:102) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    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 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:891) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:750) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:2283) 
    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: io.netty.channel.ChannelException: address already in use by: [id: 0x17617168, local:E:17617168 => local:local] 
    at io.netty.channel.local.LocalChannelRegistry.register(LocalChannelRegistry.java:46) 
    at io.netty.channel.local.LocalChannel.doBind(LocalChannel.java:178) 
    at io.netty.channel.local.LocalChannel$LocalUnsafe.connect(LocalChannel.java:349) 
    at io.netty.channel.DefaultChannelPipeline$HeadHandler.connect(DefaultChannelPipeline.java:1008) 
    at io.netty.channel.DefaultChannelHandlerContext.invokeConnect(DefaultChannelHandlerContext.java:495) 
    at io.netty.channel.DefaultChannelHandlerContext.connect(DefaultChannelHandlerContext.java:480) 
    at io.netty.channel.DefaultChannelHandlerContext.connect(DefaultChannelHandlerContext.java:465) 
    at io.netty.channel.DefaultChannelPipeline.connect(DefaultChannelPipeline.java:847) 
    at io.netty.channel.AbstractChannel.connect(AbstractChannel.java:199) 
    at io.netty.bootstrap.Bootstrap$2.run(Bootstrap.java:165) 
    at io.netty.channel.local.LocalEventLoop.run(LocalEventLoop.java:33) 
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) 
    ... 1 more 

ответ

1

Кажется,/JVM, ошибка Нетти, связанные с: https://github.com/netty/netty/issues/1765. Не могли бы вы попробовать другую ОС и/или версию JVM?

+1

Большая часть обсуждения, которое я вижу в этом потоке, касается поведения Netty в Java 6. Я использую 7, хотя я еще не вернулся, чтобы проверить, насколько это последнее. Если нет других идей, возможно, я по возможности модернизируюсь. – krai

+1

Похоже, я использовал очень старую версию 1.7 - обновление до последней решило проблему. Благодаря! – krai

Смежные вопросы