`
womendu
  • 浏览: 1513366 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

系统性能优化一例

 
阅读更多

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

1
0
分享到:
评论

相关推荐

    Linux文件系统性能优化

    文件系统的性能优化是保证Linux系统高效运行的关键环节之一。文件系统的性能优化可以从磁盘参数调优、文件系统自身参数调优以及文件系统挂载参数调优等三个方面来进行。 首先,磁盘相关参数的调优是性能优化的基础...

    以字节跳动内部 Data Catalog 架构升级为例聊业务系统的性能优化.doc

    总的来说,业务系统性能优化是一个系统工程,需要结合业务需求、系统架构和实际运行情况,通过科学的方法论和技术手段,逐步提升系统的稳定性和效率。字节跳动的 Data Catalog 优化实践为其他业务系统的性能改进提供...

    Oracle数据库性能优化实践应用分析——以某城市商业银行财务系统为例.pdf

    Oracle 数据库性能优化实践应用分析 —— 以某城市商业银行财务系统为例 概述: Oracle 数据库是目前最常用的数据库之一,其运行性能对应用系统有重要影响。本文介绍 Oracle 数据库性能优化的目标、方法和实践应用...

    基于WEB的大型Oracle应用系统性能优化方法研究.pdf

    本文以福建省全员绩效管理系统为例,深入研究了基于WEB的Oracle应用系统性能优化的策略,旨在为类似系统提供优化指导。 1. SQL优化:SQL查询是Oracle数据库处理的核心,优化SQL语句能显著提高系统性能。通过对复杂...

    CPU-GPU系统中基于剖分的全局性能优化方法.pdf

    综上所述,基于剖分的全局性能优化方法是对传统优化策略的一次创新与整合,它不仅提升了CPU-GPU异构系统的性能,也为异构系统性能优化提供了一种新的理论框架和实践指南。随着技术的不断进步,该方法有望在更广泛的...

    SQL性能优化解决方案

    下面将详细介绍如何进行SQL性能优化,并以DMV(动态管理视图)脚本为例,阐述如何利用这些工具进行性能监控。 1. **性能瓶颈识别**: - SQL查询分析:通过执行计划查看SQL语句的执行过程,分析慢查询的原因,如全...

    基于Linux平台的DSP编程性能优化.pdf

    总结来说,基于Linux平台的DSP编程性能优化是一个涉及多方面技术的过程,包括性能分析、编译器优化、算法改进和存储管理等。通过合理运用这些技术,开发者可以显著提升DSP程序的性能,满足日益增长的系统需求。对于...

    sql server的性能优化x

    本文将以SQL Server自带的Northwind数据库为例,详细介绍SQL Server内部数据结构的相关知识,包括聚集索引、非聚集索引和堆等数据结构,以及如何利用这些知识进行性能优化。 #### 二、硬件优化 在硬件优化方面,...

    TongWeb5.0 性能优化配置.pdf

    性能优化是TongWeb应用部署和管理中不可或缺的一环,它直接关系到整个应用服务的响应速度和稳定性。 首先,文档中提到的JNDI配置是性能优化的重要组成部分。JNDI(Java Naming and Directory Interface)是Java命名...

    web系统性能优化[参照].pdf

    Web系统性能优化是软件开发领域不可或缺的一环,尤其是在当今互联网应用日益复杂的背景下,提升用户体验,降低系统响应时间至关重要。本文将深入探讨如何优化Web站点性能,通过理解客户端与服务器之间的交互过程,...

    航空结算系统基于oracle数据库的性能优化.pdf

    Oracle数据库作为一款功能强大的关系型数据库管理系统,其性能优化对于保障航空结算系统的稳定运行至关重要。 1. Oracle数据库概述 Oracle数据库,起源于1970年代的关系型数据库技术,它通过理解数据间的关联,...

    JavaScript代码优化一例.pdf

    "JavaScript代码优化一例" 本文主要讨论JavaScript代码的优化,着重于介绍JavaScript代码在企业开发中的重要性及其优化方法。 一、JavaScript代码的重要性 随着Web 2.0和Ajax概念的提出,JavaScript代码得到了...

    触摸屏性能优化方案.pdf

    本文详细介绍了一个针对触摸屏性能优化的方案,从硬件选择到软件优化,全方位地提升了触摸屏的性能表现。通过具体案例分析展示了优化后的显著效果,为中低端手机提供了一条提升用户体验的有效途径。

    Linux部署高并发WEB服务器性能优化策略.pdf

    Linux 操作系统作为当前最流行的开源操作系统之一,其稳定性、安全性、可扩展性等特点使其在高并发 WEB 服务器性能优化中扮演着重要角色。本文对 Linux 部署高并发 WEB 服务器性能优化策略进行了详细的分析和研究,...

    端到端的应用性能优化实践

    端到端的应用性能优化是一项系统工程,需要跨部门的合作和全方位的考量。通过建立完善的优化流程、选择合适的工具和技术、建立合理的性能指标体系等手段,可以有效提升应用系统的性能,从而为企业带来更大的商业价值...

    利用statspack对“军卫一号”进行数据库性能诊断一例.pdf

    标题中的“利用statspack对“军卫一号”进行数据库性能诊断一例”指的是在军事卫生领域的一个信息系统——“军卫一号”中,遇到性能问题,使用Oracle数据库自带的性能分析工具statspack进行诊断和优化的过程。...

    Java秒杀系统方案优化-高性能高并发实战应用

    Java秒杀系统方案优化 高性能高并发实战 以“秒杀”这一Java高性能高并发的试金石场景为例,带你通过一系列系统级优化,学会应对高并发。

Global site tag (gtag.js) - Google Analytics