上周接到一位从事电子产品生产的大学同学的QQ说他的一个ERP系统有问题,帮他看看,周末他过来详细的了解了一下情况:周一到周五使用的用户数是10-20个人,系统慢起来就是大家一起慢,人数少的时候不慢,另外一个揪心的问题就是大家同时使用的使用经常无故的退出,而且他还强调了他买的是一个强大的服务器了,系统运行了2年时间,数据量也不大。
先描述下系统情况:
操作系统:WindowsServer 2003
.NET版本:.NET 2.0/ASP.NET 2.0
数据库: SQL Server
从前面描述的问题,初步可以判定:
1、系统不稳定,估计是系统大量使用了Session ,Session丢失导致不稳定
2、10-20个用户访问就很慢,可以判断使用的是SQL Server Express 版本,SQL Server Express 最大的并发用户数小于等于12个,只能支持一个CPU,最大的内存量是1G等.
了解完情况就开始动手啦,首先登陆到他的的服务器去看了下,上述判断成立:
1、SQL Server Express 是2005的,SQL Server Express 2005的介绍可以看这里 http://msdn.microsoft.com/zh-cn/library/ms345154(v=SQL.90).aspx ,他的服务器有4核,只能有效使用到一个核,不支持执行诸如并行查询这样的功能,这个就可以很好的解释他的用户量碰到的场景。解决方案就是帮他装一个SQL Server 2008 R2 标准版的吧。
2、看到他的Session 模式是InProc,由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下:
<sessionState mode='InProc' cookieless='true' timeout='1200'/>
我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer?SQLServer(大小写敏感) 。默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。 开发这系统的程序员吧timeout时间设置为了1200,这里可看出在不正确的使用Session,程序代码必然在大量的应用Session,这个应该是导致系统不稳定的根源。
哪些情况下该进程会重起呢?微软的一篇文章《PRB: 会话变量是间歇性地丢失在 ASP.NET 应用程序中》告诉了我们:
1、配置文件中processModel标签的memoryLimit属性
2、Global.asax或者Web.config文件被更改
3、Bin文件夹中的Web程序(DLL)被修改
4、杀毒软件扫描了一些.config文件。
解决方案:
前面说到的sessionState标签中mode属性可以有三个取值,除了InProc之外,还可以为StateServer、SQLServer。这两种存Session的方法都是进程外的,所以当aspnet_wp.exe重起的时候,不会影响到Session。
现在请将mode设定为StateServer。StateServer是本机的一个服务,可以在系统服务里看到服务名为ASP.NET State Service的服务,默认情况是不启动的。当我们设定mode为StateServer之后,请手工将该服务启动。
这样,我们就能利用本机的StateService来存储Session了,除非电脑重启或者StateService崩掉,否则Session是不会丢的(因Session超时被丢弃是正常的)。
除此之外,我们还可以将Session通过其他电脑的StateService来保存。具体的修改是这样的。同样还在sessionState标签中,有个stateConnectionString='tcpip=127.0.0.1:42424'属性,其中有个ip地址,默认为本机(127.0.0.1),你可以将其改成你所知的运行了StateService服务的电脑IP,这样就可以实现位于不同电脑上的Asp.net程序互通Session了。
如果你有更高的要求,需要在服务期重启时Session也不丢失,可以考虑将mode设定成SQLServer,同样需要修改sqlConnectionString属性。
3、数据库的所有表除了主键外没有任何索引,这对于数据量不大的时候体现不出来,虽然这个问题不是这次的问题的重点,不过是将来这个系统的隐患。这个属于数据库优化部分,本次可以不做,需要拿到代码后分析都用到那些查询条件,好建立索引。
服务器上的调整完了,可以解决他的大问题了,然后让他向开发商要到了最新的代码,期间的很多事情让我无限感慨中国的软件业为什么做不好。虽然这只是一个小示例,基本上可以代表中国的微小软件开发商的状态。
1、代码没有源代码控制:要到的代码和运行环境不一致,这个是对他的当前这个系统最没把握的地方,这个项目使用的是ASP.NET Web Site 方式开发的,把他生产环境的运行的代码拷到本地来,这个可以解决当前运行的版本和代码部分一致性了,还有这个项目参照的微软的那个宠物商店模式搞的,PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。业界有许多.Net与J2EE之争,许多数据是从微软的PetShop和Sun的PetStore而来。这种争论不可避免带有浓厚的商业色彩,对于我们开发人员而言,没有必要过多关注。PetShop是一个小型的项目,系统架构与代码都比较简单,这也是这个项目看起来还可以的一个原因,不过Web Site 部分的代码看起来真是揪心,一眼扫过去,就可以看到大量的不安全、稳定的代码,随时可能报错。也许这是一个系统不稳定的原因。
2、系统的开发人员能力弱:这个项目的流程,包括页面怎么做都是我的这位同学定的,不得佩服这位兄弟,他是学物理的,大学毕业后工作了2年开始出来独立创业,搞电子产品零部件的开发,期间的经历也很心酸,现在已经有基础,最近生意也不错。他不会开发程序,会搞硬件设计。他把软件的开发工作委托一个小公司开发完成,也一直是这家公司做维护。最近他受不了,找到我,想今后不再这家公司帮他维护了,让我帮他搞搞。据他描述,他提的修改问题给开发人员,改后就出现另外的问题。很多问题没法解决,看着这些开发人员很头疼。没有版本控制,开发人员水平差也许是导致他的抱怨的原因。
分享到:
相关推荐
针对将应用移植到CPU-GPU异构并行系统上时优化策略各自分散、没有一个全局的指导思想的问题,提出了一种基于剖分的全局性能优化方法。该方法由优化策略库、剖分工具库和策略配置模块组成.优化策略库将应用移植到...
Java秒杀系统方案优化 高性能高并发实战 以“秒杀”这一Java高性能高并发的试金石场景为例,带你通过一系列系统级优化,学会应对高并发。
Java秒杀系统方案优化 高性能高并发实战 以“秒杀”这一Java高性能高并发的试金石场景为例,带你通过一系列系统级优化,学会应对高并发。 多种缓存 / 分布式session / RabbitMQ 异步下单 / 图形验证码 / 限流防刷
1 性能优化 1.1 避免频繁 commit,尤其是把 commit 写在循环体中每次循环都进行commit。 1.2 使用绑定变量,避免常量的直接引用。 示例:以下书写不符合本规范。 INSERT INTO sm_users (user_id, user_name, ...
本文提出了结合电池储能系统的光伏电站的经济性能优化策略。 考虑了留尼汪岛(La Reunion Island)的案例研究,这是一个具有高可再生能源(RES)水平的非互联区(NIZ)。 在过去的十年中,为了实现地方当局设定的到...
设计1个应用系统似乎并不难,但是要想使系统达到最优化的性能并不是一件容易的事。在开发工具、数据库设计、应用...本文以SQL Server为例,从后台数据库的角度讨论应用程序性能优化技巧,并且给出了一些有益的建议。
本文介绍了浅谈android性能优化之启动过程(冷启动和热启动) ,分享给大家,具体如下: 一、应用的启动方式 通常来说,启动方式分为两种:冷启动和热启动。 1、冷启动:当启动应用时,后台没有该应用的进程,这时系统...
论文研究-大规模过程系统优化的简约空间SQP算法.pdf, 提出了一种适用于大规模过程系统优化的简约空间SQP方法....优化算例说明了这一方法的有效性.
目录 2 摘要 3 关键词 3 第一章 绪论 4 1.1 研究背景 4 1.2 研究目的和意义 5 ...5.3 系统性能优化方案 39 第六章 总结与展望 42 6.1 研究工作总结 42 6.2 研究工作不足 43 6.3 研究工作展望 44 参考文献 46
提出一种基于遗传算法的PID控制参数优化方法,介绍了基于遗传算法优化的PID控制结构、参数优化方法及步骤,并以某矿井跳汰机排料系统为例,对基于该方法的PID控制器的控制性能进行了仿真研究。仿真结果表明,该方法能够...
以一台典型的主轴升降式数控龙门镗铣床主轴系统为例,研究了轴承和弹性联轴节两种结合面的有限元建模方法,仿真分析了主轴系统的模态和谐响应动力学特性,通过模态实验验证了动力学仿真分析的有效性,提出了提高主轴系统...
第三章无线网络规划 第一节 CDMA无线网络规划应以如下几个方面作为自己的设计目标一、达到服务区最大程度的时 间、地点的无线覆盖 二、减少干扰,达到系统最大可能容量 三、最优化设置无线参数,最大发挥系统服务...
采用LQG性能基准来估计过程方差,通过对过程变量设置置信度水平来处理系统不确定性对控制性能的影响,将经济性能评估问题转化为一系列随机优化问题.在求解优化问题获得经济性能评估结果的基础上对控制系统经济效益...
高性能模数转换器(ADC)之前的输入配置或者前端设计,对于实现所需的系统性能非常关键。通常重点在于捕获宽带频率,例如大于1 GHz的宽带频率。然而,在某些应用中,也需要直流或 近直流信号,并且受到最终用户的欢迎...
本文通过一系列关键技术的分析与研究,不仅完整提出了网络发票的设计与实现,更有效解决了网络发票应用系统高并发下的性能压力挑战,所采用技术包括:三库分离、消息队列、伪随机算法、执行资源隔离等性能优化技术。...
对励磁系统模型进行了研究,提出了一种新的励磁系统参数优化方法。为了使励磁系统满足性能指标的要求,实现最佳控制,采用了各种不同的控制目标准则。基于不同控制目标准则得出励磁系统参数优化模型,参数优化的目标函数...
系统用例图 2.用例描述 (1)航班查询 查看航班信息 基本查询,从下拉列表中选择航班或起点或终点信息 综合查询,手动输入航班基本信息 (2)订票 输入航班信息 显示航班信息,以及打折后票价信息,询问信息是否...
经过近两年的发展,ECShop网店系统无论在产品功能、稳定性、执行效率、负载能力、安全性和SEO支持(搜索引擎优化)等方面都居国内同类产品领先地位,成为国内最流行的购物系统之一。 服务: 灵活的模版机制 ...