问题描述
向各位大侠求助。。现在正在维护一个系统,是为其他系统提供单点登录(SSO)的一个系统,没有业务,就是一个简单的画面。系统在2015年前,当时用的server操作系统是hpunix,web服务器是websphere,java的servlet开发,系统架构上稍微复杂一些,是有四台机器提供认证服务,其中没台机器都会定时向其他server提供情报(session)共有客户端对server的一次认证,当服务器忙或者无响应的时候,会得到返回时,由工作于客户端module(也是我们开发)自动转给第二台机器,二号不行,那就自动去三号,然后去四号。当时做过性能测试,最多能支持每分钟2000个访问。2015年4月以后做过一次升级,server操作系统变成了windows2012,web服务器改成了IIS,开发语言改成.net的MVC框架程序的结构和以前一样,只是做了代码转换,当然.net不能实现的部分也换了一些别的逻辑,包括锁处理,序列化什么的。在提供给用户正常使用6个月(没有发生过内存泄漏)以后,1月4号的那天因为大量访问,每分钟的访问次数只有1600个,第一台机器达到瓶颈(CPU达到100%)后,自动转发给2号机器,但2号机器在CPU未达到100%的情况下,将请求转换到了3号机器。现在负责解决这个问题,期限一周,说实话不知道怎么下手,想在这里请求各位大侠。是应该一行行读代码分析,还是应该去调查出这现在windows的瓶颈,还是说重新追加server.现在问题已经由升级cpu个数暂时解决,但不能无限升啊。求帮助,谢谢。
解决方案
解决方案二:
首先你要能方便的重现这个问题
解决方案三:
我用压力测试可以轻易再现这个问题,现在客户生气的是,我花了钱给你,你现在换了OS换了这些开发语言,结果性能不如以前了。这个是比较恼火的。这个当初做压力测试也没有正确取得访问数,是一个很大的问题。
解决方案四:
现在难道需要我把在高负荷发生问题时候的程序没一部分解来去看那个时间过长么,为什么不这么做的原因是在数量少得时候并没有产生缓慢,系统在6个月内并没有产生内存泄漏,我现在也没有办法把握在高负荷的时候程序多少是正常速度,我总不能把.net和JAVA的速度去比较吧,这样没有意义啊。
解决方案五:
你问客户,如果你改回原来的系统,他承担后果么?
解决方案六:
引用2楼breakMyLife的回复:
现在客户生气的是,我花了钱给你,你现在换了OS换了这些开发语言,结果性能不如以前了。这个是比较恼火的。
你这样跟客户说:你说的对,以前的系统你用着性能好。你换回去吗?
解决方案七:
至于说现在的.net系统,不论是测试、分析代码、重构,任何做法都是必要的。但是最重要地是找一个真懂的人,不要只剩下简单维护的人。
解决方案八:
我怎么可以跟甲方这么说,现在是我加了CPU暂时解决了我想验证的是,现在的开发,现在的架构就是只能承受这么大的负荷,希望她能追加CPU。但是我现在不知道该怎么说服。因为我不明白是我程序设计问题还是我架构问题,我拿不出来那个报告出来。
解决方案九:
引用6楼sp1234的回复:
至于说现在的.net系统,不论是测试、分析代码、重构,任何做法都是必要的。但是最重要地是找一个真懂的人,不要只剩下简单维护的人。
你说的很对,先不说我有没有这个人,即使有这么个人时间可能也是问题,因为这个系统是其他系统的入口,所以很多双眼睛看着,确实期限压得比较紧,另外测试,分析代码,应该以什么为主,以什么方式,这个能不能给点建议。前期的系统也是我们设计的,后期也是我们搞得,现在真有点没头绪,也许我们就是只能简单维护下。
解决方案十:
没搞懂,既然四台,为啥不考虑在客户端与服务端之间加个路由做负载呢?另外性能测试的2000并不能作为实际数据,只能作为参考数据
解决方案十一:
当服务器忙或者无响应的时候并不是只有CPU达到100%才会出这个,当请求数超出IIS设计的请求上限时,也会直接返回无响应,你可以查下IIS设置最大请求数,并发数什么的
解决方案十二:
数据库有没有做过优化?有没有活用缓存?程序的代码块有没有优化?譬如减少不必要的数据库访问