负载测试使我的api超时并重新启动崩溃

时间:2017-07-21 14:22:29

标签: c# sql entity-framework load-testing

我正在对我的数据库进行负载测试,我正在测试的主要实体上有1000万条记录,在子网站上有6000万条记录(与foreigh key链接),使用非常简单的快速应用程序并对API端点GET进行简单调用。我不断得到一行具有相同ID的行。实际上代码中没有任何特定内容,只需使用repo调用SELECT:

    public async Task<Package> GetSingleAsync(int id)
    {
        return await _repository.GetByIdAsync<Package>(id);
    }

现在问题是,我经常收到这个错误:

  

System.Data.Entity.Core.EntityCommandExecutionException:错误   执行命令定义时发生。看到内心   细节例外。 ---&GT; System.Data.SqlClient.SqlException:   执行超时已过期。超时时间过去之前   完成操作或服务器没有响应。 ---&GT;   System.ComponentModel.Win32Exception:等待操作超时
  ---内部异常堆栈跟踪结束---在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,   Boolean breakConnection,Action 1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource 1完成,Int32超时,Task&amp;任务,   布尔和放大器; usedCache,Boolean asyncWrite,Boolean inRetry)at   System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior   cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String   方法)at   System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior   行为,String方法)at   System.Data.Entity.Infrastructure.Interception.InternalDispatcher 1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func 3操作,TInterceptionContext interceptionContext,   行动3 executing, Action 3已执行)   System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(的DbCommand   命令,DbCommandInterceptionContext interceptionContext)at   System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand   entityCommand,CommandBehavior行为)---内部异常结束   堆栈跟踪--- at   System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand   entityCommand,CommandBehavior behavior)at   System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute [TResultType](ObjectContext的   context,ObjectParameterCollection parameterValues)at   System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction [T](Func键1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) at System.Data.Entity.Core.Objects.ObjectQuery 1&LT;&GT; c__DisplayClass7.b__5()   在   System.Data.Entity.Infrastructure.DbExecutionStrategy.Execute [TResult](Func键1 operation) at System.Data.Entity.Core.Objects.ObjectQuery 1.GetResults(可空1 forMergeOption) at System.Data.Entity.Core.Objects.ObjectQuery 1..GetEnumerator&GT; b__0()   在System.Data.Entity.Internal.LazyEnumerator 1.MoveNext() at System.Collections.Generic.List 1..ctor(IEnumerable 1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable
1来源)

我尝试扩展我的数据库和我的网络服务应用程序,没有任何变化。我正在进行5分钟的长时间负载测试,有30个用户恒定负载,平均每秒30个请求。

另一件事是,我的应用程序执行查询是每20秒崩溃并重新启动:

  

11:46:50 19-Jul DataPlatform RD00155D622BC3 [Application_Start]   在机器RD00155D622BC3上启动的实例
  11:46:28 19-Jul DataPlatform RD00155D622BC3 [Application_End]实例结束   在机器RD00155D622BC3上。原因是:InitializationError

我该如何解决这个问题?我的想法是增加实例并进一步计划,还有什么呢?

0 个答案:

没有答案