首页 > 编程语言 >Java什么情况下会Broken pipe java.io.ioexception broken pipe

Java什么情况下会Broken pipe java.io.ioexception broken pipe

时间:2024-09-06 12:54:03浏览次数:12  
标签:java nginx pipe Broken 报错 io Java

最近项目上出现了java.io.IOException: Broken pipe问题,后边,又出现了org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peer问题,其实,找到原因后,都是一个问题引起的。

错误信息

前端

浏览器/小程序接口返回报错信息:

net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)

后端

 出现问题后,先看了下日志,第一眼看到的事:

  java.io.IOException: Broken pipe报错,然后,分析了下,大概的意思是,前端调用然后因为某种原因,和后端服务器断开了。但是,从看到的结果,可能不是直接报错原因。

  然后,自己尝试用wifi调用,有的时候可以,有时报错,用手机4G试了了,一直报错,所以,怀疑是因为数据量大导致的断开,然后看了下日志,报错:org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peer。

原因

怀疑就是数据量大,导致的前后端通讯断开,所以,怀疑是nginx配置的有问题,所以配置下nginx转发的限制。

解决:

修改nginx的配置文件 nginx.config

#设置代理服务器(nginx)保存用户头信息的缓冲区大小

proxy_buffer_size 1024k;

#proxy_buffers缓冲区,网页平均在32k以下的设置

proxy_buffers 16 1024k;

#高负荷下缓冲大小(proxy_buffers*2)

proxy_busy_buffers_size 2048k;

#设定缓存文件夹大小,大于这个值,将从upstream服务器传

proxy_temp_file_write_size 2048k;

1.

2.

3.

4.

5.

6.

7.

8.

重启nginx

nginx -t

nginx -s reload

1.

2.

解决了。

java.io.IOException: Broken pipe学习

 既然,我已经查问题到这了,那就研究下Broken pipe

认识

pipe是管道的意思,管道里面是数据流,通常是从文件或网络套接字读取的数据。

当该管道从另一端突然关闭时,会发生数据突然中断,即是broken。

对于文件File来说,这可能是文件安装在已断开连接的光盘或远程网络上。

对于socket来说,可能是网络被拔出或另一端的进程崩溃。

在Java中,没有具体的BrokenPipeException。

将此类错误包含在另一个异常,例如java.io.IOException:Broken pipe

分析和解决

分析

1、客户端请求服务器数据,服务器突然挂了;

2、客户端请求服务端数据,服务端正常返回,凡是客户端由于超时等原因断开。

当然,通过上边的分析,我系统出现的问题,是服务器返回异常了,nginx端因为数据量超限制,关闭了通信连接,导致的前端报错。

压测

如果,不是显而易见的情况,需要,我们自己压测下,看下问题究竟出在哪里了

是DB连接数,通讯问题,程序问题,还是其他中间件使用问题。

解决

可能存在的解决方式

服务端:

1、查看是否有负载或者代理,是否因为中间件的问题,例如:nginx

2、是否因为程序导致的时间过长,这中情况,原因有可能很多了

 数据库连接数,RPC通讯,HTTP通讯等,看看修改一些连接数或者连接时长

客户端:

1、延长客户端超时时间,当然,不能太牺牲客户的体验

标签:java,nginx,pipe,Broken,报错,io,Java
From: https://blog.51cto.com/u_16265692/11937301

相关文章

  • #如何解决Tomcat中的应用java.io.IOException您的主机中的一个软件中止了一个已建立的
    错误描述其实就是因为各种原因(比如你调试打的断点,网速等原因导致连接时间超过了默认设置的超时时间tomcat就将该连接断开)org.apache.catalina.connector.ClientAbortException:java.io.IOException:您的主机中的软件中止了一个已建立的连接。1在tomcat出现这个错误是由于客户端......
  • Java中实现数据加密与解密
    加密与解密概述加密是将明文数据转换为密文数据的过程,而解密是将密文数据还原为明文数据的过程。Java提供了丰富的加密解密API,可以实现对称加密、非对称加密和哈希加密等多种加密方式。对称加密对称加密使用相同的密钥进行加密和解密。常见的对称加密算法包括AES、DES等。下面我们......
  • Java I/O (Input/Output)——文件字节流
    JavaI/O简介    JavaI/O(输入/输出)是Java程序中用于处理数据输入和输出的重要部分。输入流(InputStreams):用于从数据源读取数据。常见的输入流包括FileInputStream(从文件读取)、BufferedInputStream(提高读取效率)等。输出流(OutputStreams):用于将数据写入到目的地。例如Fil......
  • Java数据结构---Queue
    队列Queue队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。入队列(Enqueue):进行插入操作的一端称为队尾出队列(Dequeue):进行删除操作的一端称为队头队列具有先进先出的特性大家可以简单理解为日常生活中“排队”这一现象。队列的模拟实现简单想一想,因为Lin......
  • Java中如何实现minio文件上传
    一、导入minio依赖这里还要导入lombok是因为在MinIOConfig类中使用了@Data注解,正常来说导入minio依赖就够了<dependency>   <groupId>io.minio</groupId>   <artifactId>minio</artifactId>   <version>7.1.0</version> </dependency><dependency......
  • 从内存层面分析Java 参数传递机制
    在Java中,理解参数传递机制对于编写高效和可维护的代码至关重要。本文将探讨基本数据类型和引用数据类型的参数传递方式,并介绍System.identityHashCode方法及其作用。我们将结合栈帧的概念,通过示例代码来详细解释这些机制。System.identityHashCode的作用System.ident......
  • SSH框架整合实现Java三层架构实例(一)
    HTML前台发送请求代码:1<tr>2<td>选择收派时间</td>3<td>4<inputtype="text"name="takeTimeId"class="easyui-combobox"required="true"5data-options="url:'../........
  • Java静态代码块、构造代码块执行顺序问题
    packagecom.zxl.staticdemo;publicclassBlockTest{static{System.out.println("BlockTest静态代码块执行");}{System.out.println("BlockTest构造代码块执行");}publicBlockTest(){System.out.......
  • [Java基础]hashcode/equals
    hashcode()/equals()/====当==左右两边是基本类型的时候,比较的是数值是否相等;当==左右两边是对象(引用)类型的时候,比较的是p和p2这两个对象所指向的堆中的对象地址对于==来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是......
  • Java中实现对象和Map之间的转换
    在Java开发中,经常需要将Java对象转换成Map,或者反过来将Map转换成Java对象。这种转换在很多场景下都非常有用,比如在序列化和反序列化过程中、在数据传输和持久化时、或者在进行对象属性的批量操作时。本文将介绍几种不同的方法来实现Java对象和Map之间的相互转换,选择哪种方法取......