系统性能优化- Session丢失

最近在做项目的过程中,客户经常反馈在操作的时候进场会突然跳转到登录页面。

先描述下系统情况:

  操作系统:WindowsServer 2008

  .NET版本:.NET 4.0/ASP.NET 4.0/ASP.NET MVC 3.0

  数据库:  SQL Server  2008

从前面描述的问题,初步可以判定:

  1、系统不稳定,估计是系统大量使用了Session ,Session丢失导致不稳定

查出原因况就开始动手啦,首先登陆到他的的服务器去看了下,上述判断成立:

  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年开始出来独立创业,搞电子产品零部件的开发,期间的经历也很心酸,现在已经有基础,最近生意也不错。他不会开发程序,会搞硬件设计。他把软件的开发工作委托一个小公司开发完成,也一直是这家公司做维护。最近他受不了,找到我,想今后不再这家公司帮他维护了,让我帮他搞搞。据他描述,他提的修改问题给开发人员,改后就出现另外的问题。很多问题没法解决,看着这些开发人员很头疼。没有版本控制,开发人员水平差也许是导致他的抱怨的原因。

时间: 2024-10-10 07:02:24

系统性能优化- Session丢失的相关文章

Spring Boot+AngularJS中因为跨域导致Session丢失

http://blog.csdn.net/dalangzhonghangxing/article/details/52446821 如果还在为跨域问题烦恼,请查看博主的 解决angular+spring boot的跨域问题 那篇文章. 博主在项目开发过程中,遇到了由于跨域而导致的Session丢失问题,非常的恶心,但是经过在网上查阅各种资料,发现解决方法十分简单. 在我们每一次的数据请求中,浏览器都会向后台发送一个JSession,后台会根据这个值自动查找Id为JSession的那个sessio

Iframe跨域Session丢失的问题(大家是怎么解决的)

很久之前做的一个使用插件实现了图片批量上传,是通过IFrame加载上传面板的,使用google上传成功了就没怎么理了,最近同事测试时(使用的是360安全浏览器)老是出现上传不了图片的问题,然后换个浏览器上传就成功了. 于是, 今天就下载360安全浏览器测试一下,一调试,坑爹啊,我的session丢失了,网上查了一下,没解决, 最后只想到通过url传递参数的方法解决了.不知道大伙有没遇到过这样的问题,还有怎么解决的 Iframe跨域Session丢失的问题(大家是怎么解决的),布布扣,bubuko

asp.net session丢失的解决方法小结

现在我就把原因和解决办法写出来. ASP.NET Session丢失原因: 由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下: < sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes' cookieless='true' time

Linux下Session丢失原因

最近碰到一个问题,把代码迁移到linux系统下,重新搭建php环境,运行代码, 在登录页面时,不能访问后台,会返回到登录页面,对代码测试,没有报任何错误, 最后检查到是跳转时,session丢失的问题,如何会丢失呢?带着这个问题,查了大量资料, 发现造成这个原因有这几种: 1.session存储路径(目录)不存在,自然就无法生成session临时文件 2.session存储路径下有没有权限,如果没有,也就不可能存储session数据 3.能正常存session数据,但session存入后被清空

解决网站在负载均衡环境下SESSION丢失的问题

在WEB场中,动态网页往往会因为几台主机做了负载而产生SESSION丢失的问题,网上也有很多的介绍,我这里只将我经历的过程给大家分享一下: 系统要运行在负载平衡的 Web 场环境中,而系统配置文件web.config中的Session状态却设置为InProc(即在本地存储会话状态),导至在用户访问量大时,Session常经超时的情况.引起这个现象的原因主要是因为用户通过负载平衡IP来访问WEB应用系统,某段时候在某台服务器保存了Session 的会话状态,但在其它的WEB前端服务器中却没有保存S

完全解决asp.net MVC中的session丢失问题

http://user.qzone.qq.com/136234428/blog/1410260445 完全解决asp.net MVC中的session丢失问题 http://user.qzone.qq.com/136234428/blog/1410260445 完全解决asp.net MVC中的session丢失问题 http://user.qzone.qq.com/136234428/blog/1410260445 完全解决asp.net MVC中的session丢失问题 http://use

防止Session丢失的方法

由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下:<sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes' cookieless='true' timeout='60'/> 我们会发现sessionState标签中有个属性mode

后端系统性能优化(第一季:改掉那些坏代码)

我们核心业务系统的中心服务每天承载着上千万金额.几十万笔的订单量,在数据量高速增长,公司业务节节攀升的客观因素下,以及面对即将到来的6月份世界杯的流量\交易 高峰的压力,核心业务系统性能优化以及重构显得越发重要而又迫在眉睫. 时刻准备着 在进行性能优化之前,我们做了很多的准备工作,包括 压力测试,数据库sql提取,性能监控日志数据,请求量等数据的收集,分析整体的性能瓶颈,请求量的波动特点,数据库负载波动情况. 压力测试,几个部门通力的合作,把系统在极端并发的情况下所表现出来的性能瓶颈收集出来,分

C#Session丢失问题的解决办法

关于c# SESSION丢失问题解决办法 我们在用C#开发程序的时候经常会遇到Session很不稳定,老是数据丢失.下面就是Session数据丢失的解决办法希望对您有好处. 1.在WEB.CONFIG文件中修改SESSION状态保存模式,如:<sessionState mode='StateServer' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted