NetCore WebApi Centos Jmeter 压力测试问题

wroger 2020-08-07 10:26:37
我使用NetCore开发一个WebApi服务,直接部署到Centos服务器上,为了验证服务抗压能力,单独写了一个测试接口:
        [HttpGet]
public string ClientSleep(string secend)
{
try
{
string start = System.DateTime.Now.ToString();
if (!string.IsNullOrEmpty(secend))
Thread.Sleep(int.Parse(secend));
return start + "==" + System.DateTime.Now.ToString();
}
catch (Exception e)
{
SysDbLog.Error(this, "ClientDataBase", e.Message, e);
return e.Message;
}
}


模拟业务处理,线程等待10秒返回结果。

采用Jmeter进行压力测试:
模拟200users,循环10次,secend设置为10000(10秒),访问ClientSleep接口。

问题:
Jmeter 启动之后,WebApi服务基本就不能访问了,查询系统状态,CPU、内存也不是很高,TCP连接比较多

运行结果大概有30%Error:
Response code: Non HTTP response code: java.net.SocketException
Response message: Non HTTP response message: Unexpected end of file from server

应该是服务宕机了

请教一下大师们:
1、我这种测试方法是不是有问题(只是想摸你业务处理,极端情况下,10秒之后才能返回的状态)?

2、服务宕机到底是因为什么呢?如果服务为每个请求都开一个单独的线程,理论上每个线程等待10秒都可以正常返回,为什么会有30%的访问报异常呢?

3、部署Web服务时,Web服务怎么配置呢?Lunix系统需要调整什么呢?
...全文
8880 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
github_36000833 2020-08-08
  • 打赏
  • 举报
回复
优化方法,套用微软的一句话,就是一路异步到底。 访问数据库,访问文件,访问其他远程服务,属于IO(输入输出)密集的,都应该用异步。比如数据库访问,SqlCommand要使用异步的ExecuteReaderAsync。 "计算",则属于CPU密集,就不要用异步,因为本地异步计算也是本机计算,不能减轻本机的负荷。 最后,也是最重要的一点,一台机器有它所能承载的负荷。而垂直上扩,即提升高机器本身的配置,总有碰到极限的时候。 因此,如果高通服务是设计目的,现在就要考虑是否能够水平外扩,即增加更多的服务器来应对更高的负荷,一台服务器不够,就扔两台进去。当然编程设计上也要有相应的调整,比如不能假设什么本机都有。
github_36000833 2020-08-07
  • 打赏
  • 举报
回复
Thread.Sleep(int.Parse(secend));会阻塞当前线程。 ”200users,循环10次“可能导致2000个线程处于阻塞状态。每个线程需要预留默认1兆的堆栈,2000个线程就要消耗2个G的内存。 因此,高通的服务器会尽量不阻塞而是使用异步。比如 [HttpGet] public async Task<string> ClientSleep(string secend) { await Task.Delay(10*1000); return "hello"; }
wroger 2020-08-07
  • 打赏
  • 举报
回复
多谢指导!改用Task.Delay,的确不阻塞Api线程。 但如果不是主动地Delay,而是一点执行业务的代码呢?这段代码可能需要访问数据库、进行计算,执行时间为5秒的话,是不是也会阻塞线程? 针对具体的业务处理编程上,有没有什么好方法呢?
wroger 2020-08-07
  • 打赏
  • 举报
回复
await Task.Delay(10*1000); 这样也是不行的,只要等待10秒返回,压力的线程就会有异常出现。可能我压测的方案不对吧。我就是想知道一个服务的最大承受力。

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧