问题描述
ASP.NET程序,逻辑是这样的在网站开始运行的时候设置Timer,每隔十分钟进行数据计算、每次计算大概运行个10秒左右吧,期间会有一百次左右的查询和更新数据的操作。那么现在服务器因为业务需要,部署了四套这个程序,每个程序都有一个自己的主数据库,然后共用一个数据源数据库。现在问题来了,因为是相同的程序,每10分钟会同时进行计算数据,所以服务器CPU使用率100%持续一段时间,内存使用率倒是还可以,后来发现这些程序很不稳定,也许运行几个小时,也许运行几十分钟后就在代码任何处理查询数据库结果的地方都有可能报错。具体报错内容都和数据库返回DataTable后读取和操作DataTable时报错,如没有在DataTable中找到某某列的错误。后来我开始怀疑是数据库操作类相关的问题。但是我在程序里添加了网上找的另一个DBHelper类并写了几行代码进行测试发现结果让人迷惑测试代码如下:DataTabledt=DBHelper.Query("select*fromsys_config").Tables[0];foreach(DataColumndcindt.Columns){Response.Write(dc.ColumnName+",");}一般在程序没开始报错之前点击按钮运行上面这段代码,将会查询出大概100行数据,然后在页面上显示所有列名。但是一旦程序开始崩溃后我再点击该按钮,查询结果让我呆住了Query方法返回的DataTable并不是我查询的sys_config表。而有一定机率是其它地方用原来的数据库操作类执行的查询结果。也就是说本次查询结果返回的是本网站其它模块的数据库查询结果。而多次点击按钮查询结果并不是一样的。直到重启报错的网站应用池时才恢复正常。、测试了几天,始终不能理解是为什么。同时我装了一个虚拟机,只部署一套程序进行测试。运行了1天多,一切正常。
解决方案
本帖最后由 zzjj296 于 2016-06-18 13:12:25 编辑
解决方案二:
测试用的数据库类usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Linq;usingSystem.Text;publicabstractclassDbHelperSQL{//数据库连接字符串(web.config来配置),多数据库可使用DbHelperSQLP来实现.publicstaticstringconnectionString="";publicDbHelperSQL(){}///<summary>///执行查询语句,返回DataSet///</summary>///<paramname="SQLString">查询语句</param>///<returns>DataSet</returns>publicstaticDataSetQuery(stringSQLString){using(SqlConnectionconnection=newSqlConnection(connectionString)){DataSetds=newDataSet();try{connection.Open();SqlDataAdaptercommand=newSqlDataAdapter(SQLString,connection);command.Fill(ds,"ds");}catch(System.Data.SqlClient.SqlExceptionex){thrownewException(ex.Message);}returnds;}}}
解决方案三:
你还是说说怎么部署4套程序的?