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

先描述下系统情况:

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

转载于:https://www.cnblogs.com/xiangzhong/p/4988819.html

系统性能优化- Session丢失相关推荐

  1. 关于asp.net Session丢失问题的总结

    asp中Session的工作原理: asp的Session是具有进程依赖性的.ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序.所以当inetinfo.exe进程崩 ...

  2. 模式窗口window.open造成Session丢失的解决方法

    从 HTML 模式或无模式对话框可能没有打开同一进程中 InternetExplorer 窗口中打开,因此模式窗口中调用 window.open()方法打开具体页面,可能造成session 丢失.例如 ...

  3. 解决nginx使用proxy_pass反向代理时,session丢失的问题

    这2天在测试Nginx作为反向代理到Tomcat应用时,session丢失的问题.经过一系列查看官方文档和测试,发现如下: 1.如果只是host.端口转换,则session不会丢失.例如:      ...

  4. 用P3P header解决IE下iframe跨域访问时候session丢失的问题

    用P3P header解决IE下iframe跨域访问时候session丢失的问题 整合客户的登录时,或者其他一个网站通过iframe时,特别是一个http页面,访问一个https页面时,常常会sess ...

  5. 解决 Iframe跨域session 丢失问题

    解决 Iframe跨域session 丢失问题 参考文章: (1)解决 Iframe跨域session 丢失问题 (2)https://www.cnblogs.com/xumingxiang/arch ...

  6. 系统性能优化的常见八大误区

    转载:http://www.cnblogs.com/yunman/articles/5482129.html 一.吞吐量与响应时间 系统的吞吐量反映了一个系统的容量,可承受的负载,很多系统都以这样一个 ...

  7. 解决nginx proxy_pass反向代理cookie,session丢失的问题

    开发了一个web项目,直接通过url访问,可以正常访问.但是通过nginx就访问不到css,js等文件. nginx.conf文件配置如下: 访问web报错. 但是直接访问web就正常 整了很长时间, ...

  8. Session丢失的解决办法小结

    最近在做ASP.NET项目时,测试网站老是取不出Session中的值,在网上搜索了一下,找到一些解决方法,记录在这里.最后使用存储在StateServer中的办法解决了问题 SessionState ...

  9. iis php session丢失,Session丢失的解决办法小结

    原标题:Session丢失的解决办法小结 对于ASP.PHP网站且使用我司虚拟主机的用户,如果超时太短,可提交工单申请更换应用程序池(该应用程序池设置为只按时间回收,回收时间30分钟). 如果更换程序 ...

  10. 关于feign调用时,session丢失的解决方案

    最近在做公司微服务项目的时候发现,微服务使用feign相互之间调用时,存在session丢失的问题. 例如,使用feign调用某个远程API,这个远程API需要传递一个鉴权信息,我们可以把cookie ...

最新文章

  1. MySQL流程控制if、case、循环结构while的使用语法
  2. django orm 操作符
  3. CryEngine新引擎正式开放源代码,但仅限开发游戏
  4. 《DSP using MATLAB》Problem 7.26
  5. BZOJ5212: [Zjoi2018]历史
  6. 【Java】编程思想汇总ing
  7. python有道批量单词音标整理-使用有道API在线批量翻译单词
  8. python 局域网传文件_Python+pyftpdlib实现局域网文件互传代码示例
  9. c++ 求N个数的最大公约数和最小公倍数
  10. MyEclipse2014全黑色主题
  11. 在BIOS中修改IMM的方法
  12. 中华云盒M1刷Linux教程,N1 盒子刷最新版 armbian 及软件安装
  13. 甲方乙方——如何协调设计师与客户之间的矛盾
  14. 齐博x1用户登录接口
  15. 针式怎么修改打印机服务器属性,针式打印机设置,小编教你针式打印机怎么设置纸张大小...
  16. 微信小程序实现一个简单的表格
  17. C#类似仪表盘数据显示的制作
  18. Tesseract OCR 训练字库
  19. bios 刷 灵耀14_华硕灵耀Deluxe14笔记本如何装win7|重装前设置Bios(图文)
  20. C#,最长公共扩展(LCE,Longest Common Extention)的算法与源代码

热门文章

  1. SoundSource 5 for Mac(音频控制工具)
  2. 在BetterZip的收藏夹中如何添加经常使用的文件夹?
  3. 使用Movavi Video Editor如何做局部的影片放大特效
  4. Netflix的zuul使用
  5. ASP.NET MVC:WebViewPage.cs
  6. 删除CentOS系统自带的jdk
  7. 设为首页 添加到收藏夹 (share)
  8. 浅谈Spark几种不同的任务提交相关脚本(以Spark 1.5.0为例)
  9. Mac安装和配置Tomcat的教程
  10. 厉害了!3分钟搞定开发部署,这个霸榜的AI开源项目大公司都在用