【案例60】NIO导致本地内存溢出

问题 现象

集成环境出现宕机,javacore中报本地内存溢出。

问题分析

对JAVACORE进行分析之后可以发现,有大量的异步IO线程。

同时查看websphere的ffdc事件可以发现:

从FFDC中可以看到部分信息:

java 复制代码
com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1814)
Caused by: java.io.IOException: Async IO operation failed (1), reason: RC: 10053  您的主机中的软件中止了一个已建立的连接。
[22-14-24 12:12:41:315 GMT+08:00]     FFDC Exception:java.io.IOException SourceId:com.ibm.ws.webcontainer.channel.WCCByteBufferInputStream ProbeId:102 Reporter:com.ibm.ws.webcontainer.channel.WCCByteBufferInputStream@93528999
java.io.IOException: Async IO operation failed (1), reason: RC: 55  指定的网络资源或设备不再可用。

同时可以发现WAS的system.out中的报错

java 复制代码
[22-14-24 12:10:32:018 GMT+08:00] 000001a7 ECPCacheRemov I com.yonyou.ec.cache.command.ECPCacheRemoveCommand run ###UAPEC-ECPCacheRemoveCommand###移除SaleOrgName数据缓存对象,UserID:0001E310000000008FGZ
[22-14-24 12:10:33:097 GMT+08:00] 00001082 ActorClientAg E nc.web.es.uapecpub.server.support.ActorClientAgent$1 notifyStopped IP地址为127.0.0.1,端口为9011的远程机器失去连接.

有一个BOSS线程和大量worker。以16*2的速度增长。

经过和研发沟通定位,可以发现是EC那边采取了NETTY框架进行NIO的封装。

解决方案

正常来说,即使连接断开,NETTY也可以根据自己的心跳机制去断开连接。这里可以理解为一个BUG。

修改方案分为三种:

1.升级现有的NETTY框架。

2.修改默认线程数,时间上限等。

3.修改代码,增加判断。

java 复制代码
for (int i = 0; i < ports.length; ++i)
      if ((isLocal) || (isWebLocalDeploy(hosts[i], ports[i])))
        command.run();
      else
        try {
          new Socket(hosts[i], Integer.valueOf(ports[i]).intValue());
          getClientAgent(hosts[i], ports[i], comPorts[i]).sendCommandOneWay(command);
        } catch (Exception e) {
          Logger.error("网络ip或端口错误!ip:" + hosts[i] + ";port:" + ports[i]);

修改之后可以发现:

错误的端口配置下,NIO相关线程基本为0

正确的端口配置下,NIO的相关线程数为4-6个左右。

相关推荐
艾莉丝努力练剑4 分钟前
【Linux网络】Linux 网络编程:传输层协议TCP(三)
linux·运维·服务器·网络·tcp/ip·http
AI行业学习6 分钟前
CC-Switch 下载、安装与使用配置指南【2026.5.29】
java·开发语言·vscode·python·eclipse·laravel
朝阳5817 分钟前
MySQL 主从复制 — 双服务器灾备方案(原生安装)
服务器·数据库·mysql
keyipatience8 分钟前
21,22 (半)深入理解Linux重定向与缓冲区机制
linux·运维·服务器
闪电悠米8 分钟前
黑马点评-优惠券秒杀-04_one_user_one_order
服务器·网络·数据库
许彰午8 分钟前
03_Java流程控制详解
java·开发语言·python
1024小神9 分钟前
在阿里云买的域名和服务器配置cloudflare的DNS解析,并配置cloudflare生成ssl证书可以用15年
服务器·阿里云·ssl
霍格沃兹测试学院-小舟畅学12 分钟前
接口自动化测试的下一个十年:从脚本到Skills,让AI学会“如何测”
java·前端·人工智能
fengyehongWorld13 分钟前
Linux command 命令
linux
yyuuuzz13 分钟前
aws亚马逊云上运维常见问题梳理
运维·服务器·网络·云计算·aws