Skip to content
陈宝仪 edited this page May 4, 2017 · 7 revisions

java.io.EOFException出现的三种典型场景

1 client-output-buffer-limit slave参数设置引发的EOFException

  • client-output-buffer-limit slave参数设置造成同步缓冲区过小,如果replicator消费event过慢以致服务端缓冲区积压超过限制,则会服务端主动断开与replicator的连接,引发EOFException.

  • 解决方法 : 设置client-output-buffer-limit slave 0 0 0

  • 副作用 : 有可能服务端缓冲区积压过多导致服务端内存耗尽

2 rdb单个事件处理时间过长引起EOFException

  • preFullSync,postFullSync,rdb事件,这三类事件如果每个事件处理的时间超过配置的readTimeout ,则会产生由readTimeout引发的EOFException.

  • 解决方法 : 调整readTimeout时间或者将事件异步发送到MQ中慢慢消费

3 服务端repl-ping-slave-period设置的时间大于replicator的readTimeout

  • 由于服务端ping replicator的时间比readTimeout要大,导致replicator读超时引发EOFException

  • 解决方法 : 调小repl-ping-slave-period或者调大readTimeout使得repl-ping-slave-period < readTimeout的不等式成立