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 的协议部分,在常规协议之外还支持追加更多消息,以其规定的分隔符进行分隔,但其采用的是“字符串匹配”的方式查找分隔符,而不是直接在包头中指定追加消息的起始索引,当常规协议的包身非常大时,字符串匹配会消耗较多的性能。

时间: 2024-10-21 00:54:53

Scut 上线后遇到的问题的相关文章

系统上线后WCF服务最近经常死掉的原因分析总结

前言 最近系统上线完修改完各种bug之后,功能上还算是比较稳定,由于最近用户数的增加,不知为何经常出现无法登录.页面出现错误等异常,后来发现是由于WCF服务时不时的就死掉了.后来就开始分析问题.得到的初步解决方案如下: 1.在Web端调用WCF服务使用后,未释放未关闭导致新的链接无法访问 2.增加默认的连接数,系统默认的链接数比较小 3.提供同一个WCF服务的不同实例 1.在Web端调用WCF服务使用后,未释放未关闭导致新的链接无法访问 首先保证客户端每次建立的连接在使用完成后进行关闭.那么请不

App上线后,接下来要做什么?

随着移动互联网的发展,智能手机的逐渐普及.很多行业都想进军互联网的市场,所以他们都会找广州App开发公司品向科技开发,但是App上线后,应该怎么吸引第一批客户呢? 准备上线时一定保证上线资料的完整和统一性 应用名称.应用图标(icon).应用描述.市场截图.更新描述,这是用户从应用商店接触到产品的第一印象,视觉上的赏心悦目能够提供给用户第一次的微笑价值.市场截图与icon的视觉统一,应用描述简单但不无趣,都是加分项. 申请应用商店的免费推广资源 这里的免费推广包括首发.新品推荐.专题推荐.做首发

160527、项目上线后session(远程session)

import java.io.Serializable;import java.util.HashMap;import java.util.Map;import java.util.UUID;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.bea

免费建站系统上线后反响不错

网站上线后做了一些测试就想试试看看用户反应怎么样,于是在经常逛的几个社区发了几篇文章,没想到,一天竟然带来了300多ip网站注册了30多个用户,生成网站20多个,根据几个用户的调查反映还不错,看到这些心里有了许多安慰. 说到这个系统真可谓是一波三折,其实好几年前就有这么个想法,因为一直从事网站建设的业务,总想着有一天,网站不需要一个个的做,也能够批量化生产,注册个账号,点点鼠标就成了,不需要设计师设计好几天,程序员加班好几天,一切都将变得如此的轻松,就这样今年终于下定决心做了起来,总共花费三个月

总结:Unity3D游戏上线后的流程回顾

原地址:http://unity3d.9tech.cn/news/2014/0127/39748.html 首先.unity 灯光烘焙 :Unity 3d FBX模型导入.选项Model 不导入资源球.Rig 不导入骨骼.Animations 不导入动画.在Model选项勾选 Generate Linghtmap UVs .否则.灯光烘焙.会出现阴影错乱.灯光烘焙时FBX Shader 选项 Mobile/Unlit(Supports Lightmap). 动态随机地图:地图拼接的时候.注意地图

小程序之使用阿里字体图标 定义主题的颜色 控制首页标题的样式 如何使用组件 水平居中和垂直居中的方式 H5 关于上线后,

项目搭建 1==> 需要创建的文件夹 styles 存放公共的样式 components 存放组件 lib第三方库的 utils 自己的帮助库 reques 自己的接口 2==>如何快速创建页面 在app.json中 写好页面路径.直接保存,就会自动生成文件 "pages/good_lis/good_lis", "pages/cart/cart" 3==>如何使用阿里字体图标 将网址(生成的http://at.alicdn.com/t/font_1

项目上线后,谈一下感触比较深的一点:查询优化

前言 开心一刻 儿子有道题不会做,喊我过去教他.我推了推一旁的老公:我头疼,你去吧.老公不动,我:零花钱涨一千.话音刚落,老公就屁颠屁颠跑去儿子房间.进去不到几分钟,一声怒吼伴随着儿子的哭声传来的瞬间,老公从儿子房间出来,边走边说:“朽木不可雕也.”儿子从房间探出半个身子,一脸委屈:“爸爸也不会做,他说给我一块钱,让我明天早点去学校抄同学的.还让我不要告诉你,我不肯,他就吼我.” 问题背景 前段时间,被紧急调到一个新项目,支撑新项目的开发.跌跌撞撞之下,项目也正常上线了,期间收获颇多,无论是业务

[软件工程]软件上线后出现了重大bug是谁的责任

这个问题是个老问题了,但是一直没有很详细的回答过,这次看到知乎上有人提到,就回复了一下,原帖如下: https://www.zhihu.com/question/42151352/answer/99683378 我的回答: 首先,发现了问题,第一时间应该考虑的是如何解决问题,其次才是查找问题的来源避免问题的发生. 对于企业来说,问题不解决,只是纠缠问题是谁的责任,公司会被这些人直接拖垮,这时候对于企业来说最重要的就是解决问题!其次,问题解决后,再查找问题的来源,这时候才需要分类:1,需求覆盖不到

MySQL 数据库上线后根据 status 状态优化

网上有很多的文章教怎么配置mysql服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一段时间后运行,根据服务器的"状态"进行优化. 查看MySQL服务器配置信息: show variables; 查看MySQL服务器运行的各种状态值: show global status; 1. 慢查询 show variables like '%slow%'; show global s