asp.net 8 服务器爆满的解决过程

 更新时间:2024年05月18日 10:19:43   作者:启天  
如果遇到"服务器爆满"的问题,通常是指服务器无法处理更多的请求,可能是因为资源限制、并发连接数太多或者服务器配置不当,检查服务器资源:确保服务器有足够的CPU、内存和带宽资源来处理请求,调整Kestrel配置,可以在Program.cs或Startup.cs中配置最大并发连接数

在ASP.NET Core应用中,如果遇到"服务器爆满"的问题,通常是指服务器无法处理更多的请求,可能是因为资源限制、并发连接数太多或者服务器配置不当。以下是一些解决这一问题的步骤:

检查服务器资源:确保服务器有足够的CPU、内存和带宽资源来处理请求。如果资源不足,需要升级服务器硬件或优化应用资源使用。

调整Kestrel配置:如果使用Kestrel作为服务器,可以在Program.csStartup.cs中配置最大并发连接数。

1.描述一下服务器配置:

一台2c4g的centos,做api接口反代

一台8c16g的windows 2019 作为实际服务器,跑了iis,sql server,mongodb,redis

2.业务描述

    2.0  服务器分为两个站点:importapi:用于处理数据导入,,,webapi:用于处理对用户端的数据查询

    2.1 从数据源采集数据后,经过一系列的操作之后,写入sql和mongodb,部分基础信息会缓存在redis中,根据数据量的大小,从处理到写入的整个流程时间在60ms-1200ms之间,平均每秒服务器需要处理到2-3条数据,同一类型的数据使用队列处理,避免并发写入导致数据回跳或者出现脏数据的问题.

    2.2 用户web端,每秒定时通过接口读取数据,并显示界面上

3.使用到技术/类库

    Asp.net core 8,easycaching,freesql,redis

4.问题表现

    当天晚上10点过后,突然mongodb,sqlserver和对外的webapi接口站点的进程突然cpu占用率暴涨,mongodb平均60-80%.webapi占用20%,sqlserver占用10%,内存占用了50%,,且远程桌面操作不卡,webapi数据接口处理时间跟平时一样200ms左右,但是数据不及时,通过日志检查的到,importapi站点原本处理时间上涨到6s-12s直接,导致了数据处理不及时,处理队列积压严重,从而导致了数据更新不及时.并且webapi接口项目不定时报"The wait queue for acquiring a connection to server 127.0.0.1:xxx is full".错误.从理论上说,我们的站点是小众站点,业内人士使用,并不会出现突然涌进几十倍的用户的情况出现的

5.解决方式以及思路

    从表现上看,是mongodb的压力突然暴涨,导致写入变慢,但是压力来源是哪里,由于还没安装监控面板,所以也没办法查看,因此只能按业务反向的思路去解决,总的解决用了一下几个点

   5.1 从导入的业务流程入手,尽量优化写入以及数据分析操作所需要用的时间(之前几天就想好的优化方案了,只是还没上而已)

   5.2 关掉mongodb client 的 关掉WithWriteConcern

   5.3 在webapi接口项目,action上加入加上ResponseCache,过期时间3秒,(这里的3秒主要是按业务上考虑的)

   5.4 关掉反代nginx的日志(减少点压力,本来反代的服务器性能就没多高)

   5.5  nginx开限流,10r/s/ip burst=20

   5.6 准备一把刀(作用看后面)

   以上处理后,importapi导入的时间降低到30ms-700ms,并且webapi输出时间降低到50-300ms(缓存内50ms,缓存外300ms),mongodb的cpu占用降低到10%内,webapi占用5%下,,

6.最终原因分析

    说起来,,问题其实很简单,本来是只有一个前端站点把数据接口指向过来服务器的,,前两天迁移了另外一个站点,把数据接口也指向到这台接口服务器,意思就是两个web站点,使用同一套数据接口,,新接过来的站点,前端写完代码后,没检查,导致了一个致命的问题,由于前端使用vue,切换页面的时候调用了暂停每秒一次的定时器,然后进入详情页后,开了一个新的定时器,也是每秒取一次另外一个接口的数据,,最大的问题就出现在,进入详情页后,列表页的定时器调用关闭的函数报错了,,实际定时器是没关的,,这tm就吐血了,进去一次,开一个新的,后退到列表页又开一个新的,,来回10次,意味着加了20个每秒请求一次的的定时器,,直接自己ddos自己.至于这个问题怎么发现的,,,是解决完问题后,不死心,,去两个站点里翻找问题,本来以为这个问题在很久之前测试的时候出现过一次,应该不会再出现的,,,结果,,,,

7. 总结

本次问题出现从晚上10点,一步一步优化,12点多1点的时候基本代码层面解决到1秒以内,剩下的一些nginx的优化扫尾工作再花个不到一个钟头(开限流,关日志之类的操作),顺便帮前端的两个站点的centos服务器上,把nginx的静态文件gzip跟缓存功能也打开了,清理了一下写入到mongodb的日志,至于那把刀是今天准备给前端的

到此这篇关于asp.net 8 服务器爆满的解决过程的文章就介绍到这了,更多相关解决服务器爆满内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vscode extension插件开发详解

    vscode extension插件开发详解

    这篇文章主要介绍了vscode extension插件开发,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • .NET Core配置TLS Cipher(套件)的详细过程

    .NET Core配置TLS Cipher(套件)的详细过程

    本文以.NET 5为例,只不过针对.NET Core 3或3.1通过工具扫描出的协议套件结果略有所差异,但不影响我们对安全套件的配置,我们使用OpenSSL生成自签名证书,对.NET Core配置TLS Cipher相关知识感兴趣的朋友一起看看吧
    2021-12-12
  • asp.net core配合vue实现后端验证码逻辑

    asp.net core配合vue实现后端验证码逻辑

    网上的前端验证码逻辑总感觉不安全,验证码建议还是使用后端配合验证。本文主要介绍了asp.net core配合vue实现后端验证码逻辑,感兴趣的可以了解一下
    2021-06-06
  • .NET中用ICSharpCode.TextEditor自定义代码折叠与高亮

    .NET中用ICSharpCode.TextEditor自定义代码折叠与高亮

    这篇文章主要给大家介绍了.NET中用ICSharpCode.TextEditor自定义代码折叠与高亮的相关资料,文中通过示例代码与图片介绍的很详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • ASP.NET MVC分页和排序功能实现

    ASP.NET MVC分页和排序功能实现

    这篇文章主要介绍了MVC学习系列之分页和排序功能实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • asp.net更新指定记录的方法

    asp.net更新指定记录的方法

    这篇文章主要介绍了asp.net更新指定记录的方法,涉及针对指定ID调用update语句的方法,是非常实用的技巧,需要的朋友可以参考下
    2014-11-11
  • asp.net 下载文件时输出文件内容

    asp.net 下载文件时输出文件内容

    asp.net下当下载文件时,读取路径,输出数据。
    2009-05-05
  • .NET使用结构体替代类提升性能优化的技巧

    .NET使用结构体替代类提升性能优化的技巧

    这篇文章主要介绍了.NET使用结构体替代类提升性能优化的技巧,使用结构体替代类有什么好处呢?在什么样的场景需要使用结构体来替代类呢?今天的文章为大家一一解答,需要的朋友可以参考下
    2022-05-05
  • ASP.NET中MVC从后台控制器传递数据到前台视图的方式

    ASP.NET中MVC从后台控制器传递数据到前台视图的方式

    这篇文章主要介绍了ASP.NET中MVC从后台控制器传递数据到前台视图的方式,以实例形式较为详细的分析了asp.net中MVC数据传递的具体实现方法,需要的朋友可以参考下
    2014-12-12
  • C# javaScript函数的相互调用

    C# javaScript函数的相互调用

    如何在JavaScript访问C#函数,如何在C#中访问JavaScript的已有变量等实现方法
    2008-12-12

最新评论