首页 新闻 会员 周边

c# webapi 性能问题

0
[待解决问题]

软件环境 :负载均衡器Nginx +IISweb服务器,c# 用写的webapi接口,后台逻辑主要是与缓存打交道,不涉及数据库,单个请求响应20ms内,当并发到1000的时候,响应接近3秒,2000并发6秒,想问下为什么会出现这种情况。接口响应的时候CPU占用率很低,不到10%。
硬件环境:windowserver 2012 4核机器2台做负载均衡

近墨者黑,近我者甜的主页 近墨者黑,近我者甜 | 初学一级 | 园豆:184
提问于:2019-11-26 18:34
< >
分享
所有回答(2)
0

可能是因为线程池中的线程不够用,CLR 1秒只能创建1-2个线程,当并发突增且线程池中的线程不够用时,CLR根本来不及创建线程。

dudu | 园豆:31007 (高人七级) | 2019-11-26 18:48

原来我也认为是这样,后来更改了工作进程数为5个,并更改了machine配置,配置 iis最小线程数为50*机器核数,队列长度,工作线程数都设置很大的值,并发测试发现2000并发比1000并发时多了快2倍

@唐琳222: 读取缓存的代码有没有使用异步?

支持(0) 反对(0) dudu | 园豆:31007 (高人七级) | 2019-11-26 19:20

@dudu: 没有。缓存读取不超过5ms

@唐琳222: 有没有试过不走 nginx

支持(0) 反对(0) dudu | 园豆:31007 (高人七级) | 2019-11-26 20:02

@dudu: 试了,不走nginx也是一样的。

@唐琳222: 建议改为异步试试

支持(0) 反对(0) dudu | 园豆:31007 (高人七级) | 2019-11-27 11:01
0
  1. 设置最小线程数量 ThreadPool.SetMinThreads。
  2. 检查你们用的缓存访问组件,时候启用了连接池&设置了最小/最大数量等配置。例如 StackExchange.Redis组件就最好自己做一个连接池来管理,单个connection并发高不到哪里去。
  3. IIS最大worker数量配置。
    建议单台服务器做压力测试先。iis宿主,self-host排除问题点。
czd890 | 园豆:14412 (专家六级) | 2019-11-27 10:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册