JBoss 7.1.1.Final上传WAR文件遇Stream closed报错求助
我之前维护JBoss 7.1.1集群时,也碰到过类似的大WAR包控制台上传偶发失败的情况,结合你给出的java.io.IOException: Stream closed报错,整理了几个亲测有效的解决办法:
1. 调整管理控制台的上传超时与缓冲区配置
JBoss 7.1.1默认的管理控制台上传参数对大文件支持不够,你需要修改standalone.xml(域模式改domain.xml)里的http-interface节点:
<subsystem xmlns="urn:jboss:domain:management:1.1"> <http-interface security-realm="ManagementRealm"> <socket-binding http="management-http"/> <!-- 新增或修改以下配置,适配大文件上传 --> <connection-timeout>300000</connection-timeout> <!-- 设为5分钟,单位毫秒 --> <max-post-size>209715200</max-post-size> <!-- 设为200MB,足够覆盖你的135MB WAR --> </http-interface> </subsystem>
改完重启JBoss,这个配置能延长连接超时时间、放大允许的POST请求体积,避免因超时或缓冲区不足导致流被提前关闭。
2. 改用JBoss CLI命令上传(大文件部署更稳定)
控制台上传依赖HTTP会话,容易受网络波动影响,用CLI命令绕开HTTP上传限制,稳定性高很多:
- 启动JBoss CLI客户端:Linux下执行
jboss-cli.sh,Windows下执行jboss-cli.bat - 连接到服务器:输入
connect回车 - 执行部署命令:
deploy /absolute/path/to/your/war/file.war --force
--force参数会覆盖已存在的同名部署,不用手动先卸载旧版本。
3. 排查服务器的网络与系统资源限制
- 网络层面:确认客户端和JBoss服务器之间的防火墙、代理服务器没有设置大文件上传超时,有些代理会主动切断长时间的上传连接。
- 系统资源:上传时观察服务器的CPU、内存使用率,如果JBoss堆内存不足,可能会主动关闭输入流释放资源,可以临时调大堆内存(修改
standalone.conf里的JAVA_OPTS,比如把-Xmx1024m改成-Xmx2048m)。
4. 验证WAR文件的完整性
偶发成功的情况也可能和WAR文件本身的损坏有关,你可以先校验本地WAR文件的MD5或SHA1值,确保文件没有损坏后再尝试上传。
你提供的报错日志:
14:22:57,329 WARN [org.jboss.as.server] (HttpManagementService-threads - 24) JBAS015891: Caught exception closing input stream for uploaded deployment content: java.io.IOException: Stream closed at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:162) [rt.jar:...
这个报错的核心是上传过程中输入流被意外关闭,大概率是超时或缓冲区不足导致的,优先尝试前两个方法应该就能解决问题。
内容的提问来源于stack exchange,提问作者adamo89

