用jmeter测试的设置100个并发,请求的时候就会等待时间特别长,正常单个请求postman也就几百毫秒。但是用jmeter的话 平均响应时间40多秒。不知道是自己那块没处理好。接口返回的数据大概有1M左右不知道是否跟这个有关?或者是反序列化的时候有性能影响<br/>
1.测试的时候监控数据库cpu和内存 都很正常。
2.有怀疑过是不是docker的原因排查下来也未发现docker有限制
3.docker在并发时cpu占用才20%
string str = null;
try
{
//动态调用
str = await redisHelper.StringGetAsyncFun(RedisKeyConst.EXAM_TYPE_PAPER + paperId);
}
catch (Exception ex)
{
str = (await paperJsonResitory.GetPaperJsonByPaperId(paperId)).PapersJson;
_logger.LogError($"redis:异常,试卷id:{paperId},异常信息:{ex.Message}");
return str;
}
代码就是上述这些,还请大佬给指点
最大连接数也设置了。<br/>
<br/>
这里测试qps才1.5.。<br/>
<br/>
建议试试 如何让 ASP.NET Core 应用启动时线程池满血 中的方法。
谢谢 我试试~
之前这么加过,但是我在docker里监控的时候发现,大约只有10几个线程在执行~
public static void Main(string[] args)
{
var logger =
NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
CresteHost(args).Build().Run();
System.Threading.ThreadPool.SetMaxThreads(200, 200);
System.Threading.ThreadPool.SetMinThreads(10, 10);
NLog.LogManager.Shutdown();
}
@zyz1: 10几个线程可以处理100个并发
@dudu: 但是那个速度惨不忍睹。现在就是感觉可能是反序列化问题。。从数据库表里取那条数据将近1M
@zyz1: 提议提供更多相关代码
@dudu:
这是请求的代码。。
这个是repository里的。
这个是redis。
@zyz1: 反序列化的代码是怎么实现的?
@dudu:
@dudu: 您好,我大概看了下,我监控我这个进程的线程数,最小线程数我设置了10个,当我设置100个请求的时候,发现进程里在一直创建线程。应该是线程不够用。是不是创建线程耗时。。我现在也有点懵。。第一次测试线程在创建,请求会阻塞在那里一直创建线程,而且速度很慢。
这是线程创建完成之后,再次点击运行,进程里大概有1~200个线程:
数据量如果大的话,序列化会比较慢。建议分段加日志,记录处理时间看看。
好的 谢谢提议。我试试。主要是单个请求没问题,速度很快,但是线程数超过50.就特别慢。所以不知道是哪里的原因。想搞明白这块
你的宽带是不是已经成了瓶颈,1M的数据,100个并发就需要100M的带宽
应该也有这方面的原因,我大概看了下,我监控我这个进程的线程数,最小线程数我设置了10个,当我设置100个请求的时候,发现进程里在一直创建线程。应该是线程不够用。是不是创建线程耗时。。我现在也有点懵。。
建议看看是不是网路带宽的问题。
– Shendu.CC 4年前