mina-http之坑

  TCP是流式协议,不保证一次通信传输完整的包,当这种情况发生在mina-http时会产生严重的bug,图中红框部分只是将前后收到的数据拼在一起,但下面处理的还是最近收到的不完整的msg;此为大坑!

  轻则不能正常处理http请求,重则由于mina-http内部使用状态机解析http请求,会导致内部状态异常,而调用decode的上层又是while (buff.hasRemain()) { decoder.decode(); }某些极端情况下会对这个buf重复decode,会导致收到大量的http请求,产生大量HttpRequest对象,Full GC,OOM, JVM Crash……

  看了mina-http这段代码,不知道作者是否真正测试过,对mina很失望……

mina-http之坑

时间: 2024-10-16 07:22:49

mina-http之坑的相关文章

Mina的ProtocolEncoderOutput之坑

这个问题是之前测试上万个连接的pingpong发现的,调了很久,但当时急着做其他事,就没有详细记录下来,现在回想起来也有点记不清具体哪儿了. 表现是在测试上万个连接的pingpong时会出现服务器挂起的现象,服务端无法收到任何消息,由于服务器用了OrderedThreadPoolExecutor,debug时发现OrderedThreadPoolExecutor的idleWorkers显示有15个空闲线程,但workers里一个Worker线程都没有,所以NioProcessor提交的任务都无法

dubbo中的那些“坑”(1) - 关于MINA传输协议的bug定位及修复

同事刘阳使用dubbo服务器中配置mina作为网络传输层,发现大并发情况下,解码发生如下异常 014-12-01 18:00:44,652 [DubboServerHandler-10.1.19.13:20880-thread-164] WARN  alibaba.dubbo.remoting.exchange.codec.ExchangeCodec (ExchangeCodec.java:596) -  [DUBBO] Fail to encode response: Response [id

python学习中的一些“坑”

一.交互列表元素时,需要注意的坑. 例如: array=[4,5,9,8,10,8,4,0,3,4]  最大的值与第一个元素交换,最小的值与最后一个元素交换 # -*- coding: UTF-8 -*- array=[4,5,9,8,10,8,4,0,3,4] maxa = max(array) #列表最大值mina = min(array) #列表最小值len_array = len(array) - 1max_index = array.index(maxa) #列表最大值的位置if ma

NIO的一坑一惑小记

前言 不知不觉,已那么长时间没有更新东西了,说来真是汗颜啊.(主要是最近在技术上豁然开朗的感觉越来越少了-_-|||) 最近一直在学习Linux相关的东西.又一次接触到了I/O复用模型(select/poll/epoll),由于好久没在用NIO写过代码了,今天就小试写个例子,以巩固下对I/O复用模型的理解.这不,遇到了一个坑,也产生了一点疑惑.^_^. 一坑 简单描述:Selector的select方法返回的key集合中有一个SelectionKey是可读的,但是调用与此SelectionKey

移动端点击事件全攻略,有你知道与不知道的各种坑

看标题的时候你可能会想,点击事件有什么好说的,还写一篇攻略?哈哈,如果你这么想,只能说明你too young to simple. 接触过移动端开发的同学可能都会面临点击事件的第一个问题:click事件的300ms延迟响应.不能立即响应给体验造成了很大的困扰,因此解决这个问题就成为了必然. 这个问题的解决方案就是: zepto.js的tap事件.tap事件可以理解为在移动端的click事件,而zepto.js因为几乎完全复制jQuery的api,因此常常被用在h5的开发上用来取代jquery.

[原创] 关于免费VPN我踩过的那些坑

关于免费VPN我踩过的那些坑 因为工作的关系,笔者经常需要用到VPN, 访问国外国网站,你懂的. 我曾经试着自己购买VPS搭建过VPN, 被封了后就没心情再维护了,毕竟直接买VPN比VPS便宜太多.时间一长,也就有了一些经验. 这里总结成表格的形式,分享给大家: [NydusVPN] 知乎推荐的香港VPN, 比直通车好,线路稳定性好,办公游戏适合.注册前7天内可以无条件退款哦.  官方网站  [Astrill] 老牌VPN,但近两年被封底得太厉害,现在已经不太给力了. 注册第一个月能免费使用(付

Linux下GDB调试与对拍(先挖个坑)

应为NOIP要复赛在NOI-Linux下编写程序,所以被迫选择Vim+Gdb(主要是Guide太丑了). 虽然GUIDE的调试功能已经对付大多数的调试,反正学一学GDB的使用也没什么坏处. 1 生成调试信息 要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中.使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点.如: gcc -g hello.c -o hello g++ -g hello.cpp -o hello 如果没有-g,你将看不见程序的函数名.变量名,

Spring Cloud ZooKeeper集成Feign的坑2,服务调用了一次后第二次调用就变成了500,错误:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.n

错误如下: 2017-09-19 15:05:24.659 INFO 9986 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.spring[email protected]56528192: startup date [Tue Sep 19 15:05:24 CST 2017]; root of context hierarchy 2017-09-19 15:05:24.858 INFO 9986 --

小心掉入旧墙刷漆的五大“坑”

一些朋友的旧墙刷漆都是由自己一手包办,但墙面重新刷漆有好几个误区需要多加注意的.前期材料的选择.施工的准备以及施工的方法,这都是墙面重新刷漆的重要环节.在这些环节中,一不小心就会掉入误区,现在让我们看看有哪些是需要我们注意的. 第一点:过分在意墙面涂料的品牌 一些朋友认为购买墙面涂料一定要买知名品牌使用才好,当然知名品牌的涂料产品确实有一定的质量保障,但是并不是说我们要一味地追求品牌油漆.其实,市场上许多普通品牌的油漆与知名品牌的质量和粉刷效果相差无几,但是在价格上却有很大的差异.所以家装时,需