分享

HBase异常:java.io.IOException: Connection reset by peer解决办法汇总

hyj 2014-7-22 19:56:14 发表于 总结型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 103408
本帖最后由 pig2 于 2014-7-23 00:05 编辑
问题导读:

1.java.io.IOException: Connection reset by peer你认为是什么原因造成的?
2.java.io.IOException: Connection reset by peer你认为该如何解决?





  1. 2013-01-08 15:37:19,565 WARN org.apache.hadoop.ipc.HBaseServer: IPC Server listener on 60000: readAndProcess threw exception java.io.IOException: Connection reset by peer. Count of bytes read: 0
  2. java.io.IOException: Connection reset by peer
  3.     at sun.nio.ch.FileDispatcher.read0(Native Method)
  4.     at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:21)
  5.     at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:198)
  6.     at sun.nio.ch.IOUtil.read(IOUtil.java:171)
  7.     at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:243)
  8.     at org.apache.hadoop.hbase.ipc.HBaseServer.channelIO(HBaseServer.java:1389)
  9.     at org.apache.hadoop.hbase.ipc.HBaseServer.channelRead(HBaseServer.java:1359)
  10.     at org.apache.hadoop.hbase.ipc.HBaseServer$Connection.readAndProcess(HBaseServer.java:940)
  11.     at org.apache.hadoop.hbase.ipc.HBaseServer$Listener.doRead(HBaseServer.java:522)
  12.     at org.apache.hadoop.hbase.ipc.HBaseServer$Listener$Reader.run(HBaseServer.java:316)
  13.     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
  14.     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
  15.     at java.lang.Thread.run(Thread.java:662)
复制代码



透过现象看本 质:
hbase客户端每次和regionserver交互的时候,都会在服务器端生成一个租约(Lease),租约的有效期由参数hbase.regionserver.lease.period确定。
客户端去regionserver取 数据的时候,hbase中存得数据量很大并且很多region的时候的,客户端请求的region不在内存中,或是没有被cache住,需要从磁盘中加 载,如果这时候加载需要的时间超过hbase.regionserver.lease.period所配置的时间,并且客户端没有和 regionserver报告其还活着,那么regionserver就会认为本次租约已经过期,并从LeaseQueue从删除掉本次租约,当 regionserver加载完成后,拿已经被删除的租约再去取数据的时候,就会出现如上的错误现象。

解 决的办法:

1、适当的增大 hbase.regionserver.lease.period参数的值,默认是1分钟
2、增大regionserver的cache大小







我想问一下 我从一个端口读取数据包 出现丢包现象
用的是Apache MINA 框架  ProtocolDecoder
但是从 tcpdump 上监控 发现 数据包 是完整的
请各位高手 赐教
这是问题出现是 的错误信息
警告: EXCEPTION:
java.io.IOException: Connection reset by peer
        at sun.nio.ch.FileDispatcher.read0(Native Method)
        at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:21)
        at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233)
        at sun.nio.ch.IOUtil.read(IOUtil.java:206)
        at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:207)
        at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:156)
        at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:41)
        at org.apache.mina.common.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:408)
        at org.apache.mina.common.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:387)
        at org.apache.mina.common.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:379)
        at org.apache.mina.common.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:43)
        at org.apache.mina.common.AbstractPollingIoProcessor$Worker.run(AbstractPollingIoProcessor.java:678)
        at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
        at java.lang.Thread.run(Thread.java:595)



讨论:

1.ava.io.IOException: Connection reset by peer

是因为对方断链引起,链接断了肯定数据收不全。
注意:mina是通过事件来管理的,它不会一次把所有数据收全。


2.我今天也碰到此现这个错误,不过我这边是在作压力测试的时候出现的,如果机子起动二十个终端去连服务器,感觉终端不知道什么原因就把该连接断开了,所以导致服务端出现很多的connect reset:by peer,但我如我起十个终端的话,它就是OK的







已有(1)人评论

跳转到指定楼层
尘世随缘 发表于 2015-3-6 09:43:12
这种问题我也经常遇到过,需要从代码阶段优化。有时候连接的时候服务器端做了一些校验,导致处理时间长,降低了并发量。优化后一个服务器大概可以承载7-8万个链接。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条