系统性能优化- 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年开始出来独立创业,搞电子产品零部件的开发,期间的经历也很心酸,现在已经有基础,最近生意也不错。他不会开发程序,会搞硬件设计。他把软件的开发工作委托一个小公司开发完成,也一直是这家公司做维护。最近他受不了,找到我,想今后不再这家公司帮他维护了,让我帮他搞搞。据他描述,他提的修改问题给开发人员,改后就出现另外的问题。很多问题没法解决,看着这些开发人员很头疼。没有版本控制,开发人员水平差也许是导致他的抱怨的原因。
系统性能优化- Session丢失的更多相关文章
- Linux下Session丢失原因
最近碰到一个问题,把代码迁移到linux系统下,重新搭建php环境,运行代码, 在登录页面时,不能访问后台,会返回到登录页面,对代码测试,没有报任何错误, 最后检查到是跳转时,session丢失的问题 ...
- 解决nginx中proxy_pass到tomcat的session丢失问题
之前在配置tomcat的时候都是一个项目对应一个tomcat,也就是一个端口.最近需要把两个项目整合到同一个tomcat中,通过配置nginx让两个域名指向同一tomcat的不同项目.整合完毕后发现其 ...
- Windows下Apache + PHP SESSION丢失的惨痛经历
今天的工作是迁移一个PHP站点至新服务器. 创建一台Windows Server 2008虚拟机,并在其上停掉net stop http服务(避免争抢80端口),安装配置 Apache + PHP,迁 ...
- ASP.NET 状态服务 及 session丢失问题解决方案总结
ASP.NET2.0系统时,在程序中做删除或创建文件操作时,出现session丢失问题.采用了如下方法:1.asp.net Session的实现:asp.net的Session是基于HttpModul ...
- web跨域访问,session丢失的问题
web跨域访问,session丢失的问题25 http://www.iteye.com/problems/71265 http://www.iteye.com/topic/264079 具体情况如下: ...
- session 丢失和解决方案
在ASP.NET的开发中,总遇到Session丢失.最常见的情况是当用户登录后将用户信息保存在Session中例如Session["user"]=user;在其后的页面中检查Ses ...
- Spring Boot+AngularJS中因为跨域导致Session丢失
http://blog.csdn.net/dalangzhonghangxing/article/details/52446821 如果还在为跨域问题烦恼,请查看博主的 解决angular+sprin ...
- asp.net 修改/删除站内目录操作后会导致Session丢失
http://www.jb51.net/article/21770.htm http://blog.chinaunix.net/uid-7425507-id-134216.html 在Web项目中使用 ...
- Linux文件系统性能优化 (转)
http://blog.chinaunix.net/uid-7530389-id-2050116.html 由于各种的I/O负载情形各异,Linux系统中文件系统的缺省配置一般来说都比较中庸,强调普遍 ...
随机推荐
- Spring4 Web开发新特性
基于Servlet3开发. 针对RESTful开发,提供了@RestController,加在Controller上面,免除了每个@RequestMapping method上面的@ResponseB ...
- e553. 作为浏览器访问URL
// See also e551 精简的Applet try { URL url = new URL(getDocumentBase(), "http://hostname.com/page ...
- H.264:FFMpeg 实现简单的播放器
H.264:FFMpeg 实现简单的播放器 FFMPEG工程浩大,可以参考的书籍又不是很多,因此很多刚学习FFMPEG的人常常感觉到无从下手.我刚接触FFMPEG的时候也感觉不知从何学起. 因此我 ...
- android项目中的拍照和本地图片截图
1,得到保存截图文件的地址 private static final String IMAGE_FILE_LOCATION = Environment.getExternalStorageDirect ...
- 【Java面试题】1 Java中使用switch-case的用法及注意事项超全总结
今天在用到switch的时候,这种设计到最基本的内容,可能忘记它的一些基本语法,出现了一些错误,所以即兴从各种资料查询总结了下面的内容,希望可以帮助那些正在困扰switch错误和各种细节问题的朋友! ...
- OpenGL模板缓冲区与模板测试
原文地址:http://www.blogjava.net/qileilove/archive/2014/01/23/409269.html 帧缓冲区有许多缓冲区构成,这些缓冲区大致分为: 颜色缓冲区: ...
- 经常使用的CSS Hack技术集锦
来源:http://www.ido321.com/938.html 一.什么是CSS Hack? 不同的浏览器对CSS的解析结果是不同的,因此会导致同样的CSS输出的页面效果不同,这就须要CSS Ha ...
- js判断用户关闭页面或浏览器
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- ios开发之--新手引导页的添加
以往在写启动页面的时候,有时候会直接在启动页里面写,或者自带的vc里面直接写,但是那样并不是很方便,启动页里面往往会添加很多的东西,所以封装成一个单独的类,可以直接使用,即便是后期的更换,或者是其他的 ...
- react实现的点击拖拽元素效果
之前用vue做日程管理组件的时候,用到了点击拖拽的效果,即点击元素,鼠标移动到哪里,元素移动到哪里,鼠标松开,拖拽停止,现在在弄react,于是也在想实现这个效果,经过一番折腾,效果出来了,代码如下: ...