linux 下 tomcat 运行报错 Broken pipe

linux 下 tomcat 运行报错 Broken pipe

根据网上资料显示:我尝试过,貌似没解决问题

有可能是linux的线程机制会产生JVM出错的问题,特别是在连接高峰期间经常出现这样的问题,tomcat在linux下也出现类似情况。
  解决办法是在环境变量中设置: _JAVA_SR_SIGNUM = 12 基本就可以解决。

在WIN环境变量中设置: _JAVA_SR_SIGNUM=12, 若Linux下用 export _JAVA_SR_SIGNUM=12, 基本就可以解决. 
  sun的解释:
  --posted by: cooper 
  Below is a clipping from Sun on working around JVM crashes under high 
  thread counts in the JVM 1.3 for Linux 
  On Linux, use a larger signal number for hotspot thread 
  suspension/resumption handler. The signal number being used is 
  specified by environment variable _JAVA_SR_SIGNUM. Setting it to a 
  number larger than SIGSEGV (11) will solve the PRoblem. A good number 
  to use is 12, which is SIGUSR2. Using signal 16 to work around the 
  problem might have potential problems. So on tcsh, "setenv 
  _JAVA_SR_SIGNUM 12" can solve the problem.

### Eureka 启动后 CPU 占用过高及 Broken Pipe 报错分析 当 Spring Cloud 的 Eureka Server 部署并运行时,如果遇到高 CPU 使用率和 `Broken Pipe` 错误,通常是由以下几个原因引起的: #### 1. **心跳机制频繁触发** Spring Cloud 中的服务实例会定期向 Eureka 注册中心发送心跳请求以保持注册状态。如果服务数量较多或者网络延迟较高,则可能导致大量的心跳流量涌入 Eureka Server,从而增加其负载[^2]。 解决方案可以考虑调整客户端和服务端的相关配置参数来优化性能: - 增加续约间隔时间 (`lease.renewal.interval.in.seconds`) 来减少每秒的续约次数。 - 调整期望续租百分比 (`renewalPercentThreshold`) 和服务器缓存清理频率 (`evictionIntervalTimerInMs`) 参数,降低不必要的资源消耗。 ```yaml eureka: instance: leaseRenewalIntervalInSeconds: 30 # 默认为30秒 server: evictionIntervalTimerInMs: 60000 # 清理无效记录的时间间隔,默认60秒 ``` #### 2. **线程池设置不合理** 默认情况下,Tomcat 或 Jetty 等嵌入式 Web 容器使用的线程数可能不足以处理大规模并发连接请求,在高压力场景下容易造成阻塞现象,进而引发 CPU 利用率飙升问题[^3]。 可以通过修改容器的最大线程数目以及其他相关属性来进行改进: 对于 Tomcat 可以这样设定: ```properties server.tomcat.max-threads=500 server.tomcat.accept-count=100 server.connection-timeout=30000 ``` 而对于 Netty 运行环境则需关注 NIO 事件循环组大小等因素的影响。 #### 3. **Broken Pipe 异常解析** 该错误一般发生在写数据到已关闭套接字的情况之下。具体来说就是当远程主机突然断开了 TCP 连接之后再尝试往这个通道里传输信息就会抛出此异常消息[^4]。 一种常见的做法是在程序层面捕获此类异常并通过日志记录下来而不中断整个应用流程;另外还可以通过合理配置超时选项避免长时间等待无响应节点回复而导致管道破裂风险上升。 例如可以在 application.yml 文件中加入如下内容防止部分慢速链接影响整体表现: ```yaml ribbon: ReadTimeout: 5000 ConnectTimeout: 2000 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 5000 ``` 以上方法能够有效缓解因网络波动等原因造成的短暂失联状况下的报错情况发生几率。 --- ### 示例代码片段展示如何自定义过滤掉某些特定类型的异常报告行为 下面给出一段简单的 Java 实现例子用于演示目的仅限于说明概念并非实际生产环境中推荐的最佳实践方式: ```java @Component public class CustomExceptionHandler implements ErrorController { @Override public ResponseEntity<String> handleError(HttpServletRequest request, Exception ex) { if (ex instanceof SocketException && "Broken pipe".equals(ex.getMessage())) { log.warn("A broken pipe exception was caught and ignored."); return new ResponseEntity<>("Ignored broken pipe", HttpStatus.OK); } throw ex; } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值