首页 新闻 会员 周边 捐助

netcore 4核CPU8G内存,异步并发请求超过100就会请求等待。

0
悬赏园豆:100 [待解决问题]

用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/>

zyz1的主页 zyz1 | 初学一级 | 园豆:16
提问于:2020-04-03 07:57

建议看看是不是网路带宽的问题。

Shendu.CC 4年前
< >
分享
所有回答(3)
0
dudu | 园豆:29622 (高人七级) | 2020-04-03 10:12

谢谢 我试试~

支持(0) 反对(0) zyz1 | 园豆:16 (初学一级) | 2020-04-03 14:17

之前这么加过,但是我在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();
    }

支持(0) 反对(0) zyz1 | 园豆:16 (初学一级) | 2020-04-03 14:23

@zyz1: 10几个线程可以处理100个并发

支持(0) 反对(0) dudu | 园豆:29622 (高人七级) | 2020-04-03 14:27

@dudu: 但是那个速度惨不忍睹。现在就是感觉可能是反序列化问题。。从数据库表里取那条数据将近1M

支持(0) 反对(0) zyz1 | 园豆:16 (初学一级) | 2020-04-03 14:42

@zyz1: 提议提供更多相关代码

支持(0) 反对(0) dudu | 园豆:29622 (高人七级) | 2020-04-03 14:58

@dudu:
这是请求的代码。。

这个是repository里的。

这个是redis。

支持(0) 反对(0) zyz1 | 园豆:16 (初学一级) | 2020-04-03 20:58

@zyz1: 反序列化的代码是怎么实现的?

支持(0) 反对(0) dudu | 园豆:29622 (高人七级) | 2020-04-03 21:15

@dudu:

支持(0) 反对(0) zyz1 | 园豆:16 (初学一级) | 2020-04-04 17:05

@dudu: 您好,我大概看了下,我监控我这个进程的线程数,最小线程数我设置了10个,当我设置100个请求的时候,发现进程里在一直创建线程。应该是线程不够用。是不是创建线程耗时。。我现在也有点懵。。第一次测试线程在创建,请求会阻塞在那里一直创建线程,而且速度很慢。

这是线程创建完成之后,再次点击运行,进程里大概有1~200个线程:

支持(0) 反对(0) zyz1 | 园豆:16 (初学一级) | 2020-04-10 11:36
0

数据量如果大的话,序列化会比较慢。建议分段加日志,记录处理时间看看。

保镖 | 园豆:759 (小虾三级) | 2020-04-03 16:24

好的 谢谢提议。我试试。主要是单个请求没问题,速度很快,但是线程数超过50.就特别慢。所以不知道是哪里的原因。想搞明白这块

支持(0) 反对(0) zyz1 | 园豆:16 (初学一级) | 2020-04-03 20:59
0

你的宽带是不是已经成了瓶颈,1M的数据,100个并发就需要100M的带宽

大志若愚 | 园豆:2138 (老鸟四级) | 2020-04-08 11:13

应该也有这方面的原因,我大概看了下,我监控我这个进程的线程数,最小线程数我设置了10个,当我设置100个请求的时候,发现进程里在一直创建线程。应该是线程不够用。是不是创建线程耗时。。我现在也有点懵。。

支持(0) 反对(0) zyz1 | 园豆:16 (初学一级) | 2020-04-10 11:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册