Netty高并发上传文件问题

SumeriZhanYg 2018-03-26 05:25:55
Client在通过main方法for循环执行上传到Server(main方法启动),文件量不会出现丢失,比如上传1000个,服务端会获取到1000个,也不会出现连接超时等问题;
但是将Client集成到Web(spring+springmvc)服务中,高并发测试上传会出现有时文件丢失,比如Client上传1000个文件,可能Server(main方法启动)就只获得了900多个,当我关闭Server,Client日志就会出现“远程服务器关闭了连接....”的报错信息。

请问一下这是什么原因导致的?
...全文
862 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SumeriZhanYg 2018-03-30
  • 打赏
  • 举报
回复
引用 2 楼 tianfang 的回复:
怎么集成的?建议是自启动servlet+单例+netty服务 什么服务器操作系统?操作系统做优化了吗?很可能是服务器最大文件数/线程数限制导致 参考: https://blog.csdn.net/gatieme/article/details/51058797
谢谢您的回复!服务器是JBOSS4,只是把netty客户端代码放到了web项目中,前台页面触发上传文件,测试时模拟高并发,会出现一些上传超时,服务器没有得到一些文件。但是用main方法启动不会出现问题。您说的“自启动servlet+单例+netty服务”,是指访问一个servlet让他触发客户端对服务器的请求吗?具体是怎么做呢?
tianfang 2018-03-30
  • 打赏
  • 举报
回复
服务器同时做客户端经常会出现的问题是,没有tcp可用。一个IP最多可以有65536个客户端TCP连接,而通过异步IO接入的服务器连接可能趋势上10w 先在服务器上直接跑main方法,是否有问题?并发要求会不会超过5w/ip(65536是理论值,5w是实际可用的) 如果并发只是1000这个数量级,那就查文件传输的客户端一侧。一个web请求,一个client上传请求,最大的问题是线程限制导致客户端连接阻塞,看看web请求的最大值是多少,检查jboss4中的最大请求数,启动脚本的jvm参数的线程栈大小(限制了线程数量) 最好的解决办法是异步+线程池。 异步最简单的实现是使用jms,mdb中做上传处理 自启动servlet就是增加了属性<load-on-startup>1</load-on-startup> 可以用它在应用包(war中)写一个线程池。
tianfang 2018-03-29
  • 打赏
  • 举报
回复
怎么集成的?建议是自启动servlet+单例+netty服务 什么服务器操作系统?操作系统做优化了吗?很可能是服务器最大文件数/线程数限制导致 参考: https://blog.csdn.net/gatieme/article/details/51058797

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧