Scut 上线后遇到的问题
1. 上线后的大并发问题:
var sem = new Semaphore(_accepts, _accepts);
while (true)
{
sem.WaitOne();
#pragma warning disable 4014
_listener.GetContextAsync().ContinueWith(async (t) =>
{
try
{
sem.Release();
var ctx = await t;
await ProcessListenerContext(ctx, this);
return;
}
catch (Exception ex)
{
TraceLog.WriteError("Http request unknow error:{0}", ex);
}
});
#pragma warning restore 4014
}
这段消息监听的代码在大并发时遇到了重大的问题,无论初始化多少信号量,都会进入等待消息的状态,只有完整地接受完一条消息,才会释放一个信号量出来。因此,特别是在单个协议较大,或者并发访问量较大的情况下,服务端很快会陷入大部分信号量被锁死在等待接收消息的情况。
解决方案则是在“建立连接-接收消息”上不做限制,而在消息处理阶段进行过滤;
2. .NET 嵌入 lua 虚拟机:
同事用 Lua 编写了一个静态的战斗逻辑处理器,可想而知,大量对这个处理器的使用,会导致各种各样的内存占用与GC问题。
因此对 Lua 虚拟机资源,还是要进行池化处理,进行资源管理。
3. Scut 对接受完整消息、逻辑处理、发送完整消息的超时控制缺失,这样会因为用户不稳定的消息传递、错误的逻辑代码导致资源被占用,一定要对各阶段进行超时控制,防止资源被超长时间占用。
4. Scut 的协议部分,在常规协议之外还支持追加更多消息,以其规定的分隔符进行分隔,但其采用的是“字符串匹配”的方式查找分隔符,而不是直接在包头中指定追加消息的起始索引,当常规协议的包身非常大时,字符串匹配会消耗较多的性能。
Scut 上线后遇到的问题的更多相关文章
- android app上线后bug的处理
app上线后,后期维护显得尤为重要,今天给大家分享一下app上线后出现bug后的解决方法 1.继承Application类,重写onCreate方法 import java.io.File; impo ...
- IT连创业系列:App产品上线后,运营怎么搞?(上)
又是一阵一阵的时光过去了,今夜,码的不是代码,是文字,继续和大伙分享创业的这一路历程. 话说,在突破技术的领域,IT连和IT恋上线后,慢慢走上运营这条路时,发现自己经常容易迷失. 毕竟,做为一名技术型 ...
- 160527、项目上线后session(远程session)
import java.io.Serializable;import java.util.HashMap;import java.util.Map;import java.util.UUID;impo ...
- 项目上线后出现Bug,该如何处理?
项目在上线之后又出现了Bug,这让很多测试人员和开发人员头痛.但很多时候线上Bug普遍地存在,不可避免. 任何项目都存在未发现 Bug 和 已发现 Bug 两种情况,不存在没有 Bug的情况. 即 ...
- 性能测试——记XX银行电票系统上线后宕机问题诊断优化
四月份我们公司负责的电票系统上线了,这个系统上线比客户方其他系统上线还特殊,是二期改造项目,旧系统数据还要整合抽取到新系统中继续使用,而且该系统不是增量型方式开发上线的,而且全部开发完后全国上线的,这 ...
- 如何保证前端项目上线后的安全?webfunny已总结前端最关键的12大指标
实时监控大屏 众所周知:实时流量大屏,是用来监控前端项目上线质量的. 如大家所知,监控系统会监控线上应用的各项指标,如:错误.白屏.耗时等等,但是仔细一想,即使有这些监控,我们也不一定能够保证线上 ...
- Android开发中上线后修改应用名称的若干问题
一.在Android Studio 1.3中修改app的包名: 需求来源: 之前开发的app已经在腾讯的应用宝上线,应客户要求,app需要改名字,这个就有点麻烦了.如果申请改名字,要求如下: 截图上图 ...
- 系统上线后WCF服务最近经常死掉的原因分析总结
前言 最近系统上线完修改完各种bug之后,功能上还算是比较稳定,由于最近用户数的增加,不知为何经常出现无法登录.页面出现错误等异常,后来发现是由于WCF服务时不时的就死掉了.后来就开始分析问题.得到的 ...
- 总结:Unity3D游戏上线后的流程回顾
原地址:http://unity3d.9tech.cn/news/2014/0127/39748.html 首先.unity 灯光烘焙 :Unity 3d FBX模型导入.选项Model 不导入资源球 ...
随机推荐
- Peterson算法与Dekker算法解析
进来Bear正在学习巩固并行的基础知识,所以写下这篇基础的有关并行算法的文章. 在讲述两个算法之前,需要明确一些概念性的问题, Race Condition(竞争条件),Situations lik ...
- android79 Fragment生命周期
切换成01时依次调用onCreate,onStart,onResume方法,切换到03的时候01依次onPause,onStop,onDestroy,03依次onCreate,onStart,onRe ...
- lambda与函数调用的转换
14.38 编写一个类令其检查某个给定的string对象的长度是否与一个阈值相等.使用该对象编写程序,统计并报告在输入的文件中长度为1的单词有多少个,长度为2的单词有多少个.......长度为10的单 ...
- Android(java)学习笔记174:SharedPreferences(轻量级存储类)
1.SharedPreferences是Android平台上一个轻量级的存储类,简单的说就是可以存储一些我们需要的变量信息.2个activity 之间的数据传递除了可以他通过intent来传递数据,还 ...
- 测试cnblogs是否存在链接引用的bug
如果来源页弹出了一个对话框,或者跳转到了本页面,说明来源页面存在链接引用的bug
- 文件权限和目录权限详解(rwx)
[文件] r:可读,可以使用cat命令查看文件内容: w:可写,可以编辑或删除文件: x:可执行,可以当作命令提交给内核 [目录] r:可以对此目录执行ls,列出内部所有文件 w:可以在此目录创建文件 ...
- css中判断IE版本的语句
css中判断IE版本的语句<!--[if gte IE 6]> Only IE 6/+ <![endif]-->: 1. <!--[if !IE]> 除IE外都可识 ...
- DATABASE LINK 的查看、创建与删除
1.查看dblink SELECT OWNER,OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_TYPE='DATABASE LINK'; 或者 SELECT * ...
- Android 设计随便说说之简单实践(合理组合)
上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示appl ...
- 用Filezilla往ubuntu虚拟机上传文件
也许不用这么复杂,但就这么干了 1.安卓ubuntu虚拟机 2.虚拟机安装ssh服务:sudo apt-get openssh-server 3.虚拟机新建目录test 4.修改test文件夹的访问权 ...