JedisConnectionException: java.net.SocketException: Broken pipe (Write failed)

问题:

查看线上的日志发现线上出现大量的如下的日志, 由于线上只是用redis做缓存。 所以应用没有大量报业务逻辑的错误,

redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: Broken pipe (Write failed)at redis.clients.jedis.Protocol.sendCommand(Protocol.java:104)at redis.clients.jedis.Protocol.sendCommand(Protocol.java:84)at redis.clients.jedis.Connection.sendCommand(Connection.java:127)at redis.clients.jedis.Connection.sendCommand(Connection.java:121)at redis.clients.jedis.BinaryClient.ping(BinaryClient.java:106)at redis.clients.jedis.BinaryJedis.ping(BinaryJedis.java:195)at com.souche.tracer.org.springframework.boot.actuate.redis.RedisHealthIndicator.doHealthCheck(RedisHealthIndicator.java:71)at com.souche.tracer.org.springframework.boot.actuate.health.AbstractHealthIndicator.health(AbstractHealthIndicator.java:66)at com.souche.tracer.addon.health.HealthRegistrar.applyAsDouble(HealthRegistrar.java:52)at com.souche.tracer.addon.health.HealthRegistrar.access$000(HealthRegistrar.java:21)at com.souche.tracer.addon.health.HealthRegistrar$1.call(HealthRegistrar.java:110)at com.souche.tracer.addon.health.HealthRegistrar$1.call(HealthRegistrar.java:107)at com.souche.tracer.addon.health.Gauge$Child.get(Gauge.java:253)at com.souche.tracer.addon.health.Gauge.collect(Gauge.java:345)at com.souche.trace.core.jmx.shaded.io.prometheus.client.CollectorRegistry$MetricFamilySamplesEnumeration.findNextElement(CollectorRegistry.java:183)at com.souche.trace.core.jmx.shaded.io.prometheus.client.CollectorRegistry$MetricFamilySamplesEnumeration.nextElement(CollectorRegistry.java:216)at com.souche.trace.core.jmx.shaded.io.prometheus.client.CollectorRegistry$MetricFamilySamplesEnumeration.nextElement(CollectorRegistry.java:137)at com.souche.trace.core.jmx.shaded.io.prometheus.client.exporter.common.TextFormat.write004(TextFormat.java:22)at com.souche.trace.core.jmx.shaded.io.prometheus.client.exporter.HTTPServer$HTTPMetricHandler.handle(HTTPServer.java:59)at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79)at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83)at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:82)at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:675)at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:79)at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:647)at com.alibaba.ttl.TtlRunnable.run(TtlRunnable.java:49)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.SocketException: Broken pipe (Write failed)at java.net.SocketOutputStream.socketWrite0(Native Method)at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)at java.net.SocketOutputStream.write(SocketOutputStream.java:155)at redis.clients.util.RedisOutputStream.flushBuffer(RedisOutputStream.java:52)at redis.clients.util.RedisOutputStream.write(RedisOutputStream.java:59)at redis.clients.jedis.Protocol.sendCommand(Protocol.java:90)... 28 common frames omitted

分析

出现这个错误是原因是连接断开了,但是客户端不知道还再往连接里面写入数据导致的。 可能导致这种情况的原因:

  1. 客户端设置不正确,写入大量数据的时候超时. 如果是这个原因可以加上如下配置
#客户端超时时间
redis.timeout=0
#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
redis.testOnBorrow=true
#在空闲时检查有效性, 默认false
redis.testWhileIdle=true
#是否进行有效性检查
redis.testOnReturn=true
  1. redis库的数据量太大, 导致写入数据时候超时。 可以切换下redis的数据库, 使用较空闲的库, 不要都使用默认的0号库

  2. redis有很多的慢查询导致redis阻塞。

如果是慢查询导致的,可以配置redis的SLOWLOG。 让redis 记录下来慢查询命令。 然后就可以查看那些命令超时了。 针对耗时慢的命令进行改造解决。

slowlog 日志的开启可以参考: https://www.cnblogs.com/huanxiyun/p/5580555.html

解决:

  • 我先排查了自己的redis的配置, 发现没有问题。
  • 找运维拿到线上redis的同一个库的慢查询语句,发现耗时都挺快的, 没有特别慢的
  • 由于我们很多个应用都使用同一个redis库, 怀疑可能是库数据量太大,运维让我切换其他redis库。 切换后问题解决

JedisConnectionException: java.net.SocketException: Broken pipe (Write failed)相关推荐

  1. JedisConnectionException: java.net.SocketException: Broken pipe

    问题:redis一台,内存15g,32个现成共同操作redis!数据量160w,报出:JedisConnectionException: java.net.SocketException: Broke ...

  2. java.net.SocketException: Broken pipe问题解决

    2019独角兽企业重金招聘Python工程师标准>>> javax.servlet.ServletException: ClientAbortException:  java.net ...

  3. java broken pipe_java.net.SocketException: Broken pipe问题解决

    javax.servlet.ServletException: ClientAbortException:  java.net.SocketException: Broken pipe错误完美解决 现 ...

  4. java.io.IOException: Broken pipe 线上问题记录

    今天在上线前staging环境验证时遇到这样一个问题java.io.IOException: Broken pipe,操作服务刚起来之后,测试人员第一次进行更配[post]操作,结果操作失败,但是第二 ...

  5. java.io.IOException: Broken pipe 的异常处理

    断开的管道 java.io.IOException: Broken pipe 解决方法 一.Broken pipe产生原因分析 1.当访问某个服务突然服务器挂了,就会产生Broken pipe; 2. ...

  6. 断开的管道 java.io.IOException: Broken pipe 解决方法

    断开的管道 java.io.IOException: Broken pipe 解决方法 一.Broken pipe产生原因分析 1.当访问某个服务突然服务器挂了,就会产生Broken pipe; 2. ...

  7. Java中 java.io.IOException: Broken pipe

    认识broken pipe pipe是管道的意思,管道里面是数据流,通常是从文件或网络套接字读取的数据. 当该管道从另一端突然关闭时,会发生数据突然中断,即是broken. 对于文件File来说,这可 ...

  8. ClientAbortException: java.io.IOException: Broken pipe 解决

    ClientAbortException: java.io.IOException: Broken pipe 解决 参考:https://www.jianshu.com/p/d7f5de27fec5 ...

  9. org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe

    完整错误信息: org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipeat org.a ...

最新文章

  1. android stadio 快捷键最好的材料 android stadio大全 最牛逼的android stadio快捷键
  2. PostgreSQL(从版本9.3至11.2)任意命令执行漏洞 cve-2019-9193
  3. 面向对象第四单元(UML)总结体会课程总结
  4. 老板请吃饭 | 李笑来约你聊聊垂直社区的产品和运营
  5. 爬虫笔记7正则表达式与re库
  6. Windows 10 Visual Studio 2015 配置 Caffe
  7. 关于eclipse解压安装的问题
  8. Fedora的systemctl命令详解 Fedora配置IP地址/DNS/Networking
  9. Codeforces Round #530 (Div. 2)
  10. Job中的Task是如何调度的
  11. DAC0832_简易函数信号发生器_按键控制波形and步进
  12. 编译加速 remote cache
  13. iis 访问网站需要进行身份验证
  14. php 串行化与json(转)--很不错的文章
  15. jdbc批量执行SQL insert 操作
  16. 按群计数10以内_10米12米60吨地磅扬州地磅数字地磅厂-鹰衡称重
  17. Windows操作系统 | Visual C++库可不能乱删
  18. python基础四 面向对象编程
  19. PDF文件怎么拆分,PDF拆分技巧
  20. mysql 日期查询 今天、明天、本周、七天内、本月、后一个月

热门文章

  1. 华为鸿蒙 HarmonyOS 2.0 手机开发者 Beta 来了,对开发者意味着什么?
  2. Java基础之jvm,堆的分类新生代、老生代和永久代详解
  3. 20155232 2016-2017-2《Java程序设计》课程总结
  4. 使用MathType编辑公式时,删除键backspace和delete不好用,解决办法
  5. kettle_Day4_Hop的作用
  6. 爬虫期末考试笔记(填空题)
  7. 【微信征文】辩证:微创新时代的比较创新(By Skyh)
  8. 小红书专业号实操指南 | 巧用完美日记私域打法
  9. HITCSAPP大作业——程序人生
  10. 怎么禁用Windows 10 自动更新驱动程序