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 服务器爆满的解决过程的更多相关文章

  1. 再记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)

    在此之前项目有发生过两次类似的状况,都得以解决,但最近又会发现偶尔CPU会跑满,虽然之前使用过WinDbg解决过两次问题但人的记忆是不可靠的,今天处理同样问题的时候还是遇到了一些障碍,这一次希望可以记 ...

  2. 可道云kodexplorer网盘未清理造成linux服务器爆满的解决方法

    今天登陆宝塔面板的时候发现硬盘占用37GB,已经变红提示我空间不足了,惊呆了, 还以为是宝塔抽风了,去远程连接服务器看了一下,懵逼了. df -h 查看挂载目录使用情况 还是不相信现实的我又重启了一下 ...

  3. 记一次asp.net core 线上崩溃解决总结

    1.首先要先准备好环境,安装lldb 工具 要安装3.9版本的,因为每个版本对应dnc版本不一样,3.9的支持2.2 版本,然后确定分析的机器里dnc 版本和线上的生产环境是否一致,自己安装比较费劲, ...

  4. 记一次线上频繁fullGc的排查解决过程

    发生背景 最近上线的一个项目几乎全是查询业务,并且都是大表的慢查询,sql优化是做了一轮又一轮,前几天用户反馈页面加载过慢还时不时的会timeout,但是我们把对应的sql都优化一遍过后,前台响应还是 ...

  5. 记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)

    项目上线以来一直存在一个比较揪心的问题,和一个没有信心处理的BUG,那就是在应用程序启动时有可能会导致cpu跑满99%或持续在一个值如50%左右,这样一来对服务器的压力是非常大的,经常出现服务器无法远 ...

  6. 记一次排查log4net 不输出日志的解决过程

    最近发现log4net 不输出日志了,重点排查几个地方,发现都没有问题. 1.[assembly: log4net.Config.XmlConfigurator(ConfigFile = " ...

  7. MQ服务器奔溃解决过程

    1.MQ服务器崩溃调节: 今天具安卓前端反应, 从昨天下午开始线上服务器使用 电话号码登陆和 使用电话号码注册功能不能使用, 经过前端仔细排查怀疑是后端问题,之后经过与ios前端 确认, 定位为后端服 ...

  8. 日常工作问题解决:记一次centos7上的lvm表错误解决过程

    问题描述: 公司大数据hadoop2服务器采用电信云服务器,后来故障,电信恢复该服务器,需要重新部署程序,需要扩展lvm分区,但是使用pvsan命令发现有报错信息,需要解决以防重启后,因挂载问题,无法 ...

  9. 记一次数据库主从导致严重的bug解决过程

    1.事情起始: 我们每个月要给商家进行出账,所以有定时任务去跑商家的订单和售后进行出账,这个功能已经上线很久了,代码执行多次都没问题,突然有一天,产品找我说出现bug了: 这时,去生产库查询重复的订单 ...

  10. ASP.NET Core服务器综述

    原文地址:Servers overview for ASP.NET Core By Tom Dykstra, Steve Smith, Stephen Halter, and Chris Ross A ...

随机推荐

  1. 基于分级安全的OpenHarmony架构设计

      本文转载自 OpenHarmony TSC 官方微信公众号<峰会回顾第1期 | 基于分级安全的OpenHarmony架构设计> 演讲嘉宾 | 付天福 回顾整理 | 廖   涛 排版校对 ...

  2. Matplotlib绘图设置---颜色条设置

    设置颜色条 对于图形中由彩色的点.线.面构成的连续标签,用颜色条来表示的效果比较好,在Matplotlib中,颜色条是一个独立的坐标轴. 可视图形的颜色选择可参考matplotlib配色方案. Cho ...

  3. 从零开始写 Docker(十)---实现 mydocker logs 查看容器日志

    本文为从零开始写 Docker 系列第十篇,实现类似 docker logs 的功能,使得我们能够查查看容器日志. 完整代码见:https://github.com/lixd/mydocker 欢迎 ...

  4. 支持API 9的Sample已上新,速来拿走

    原文:https://mp.weixin.qq.com/s/sPDG5sG5F_gTp0cE1VV3gQ,点击链接查看更多技术内容.   今年的华为开发者大会上我们发布了HarmonyOS 3.1 D ...

  5. Linux 用户名显示为sh-

    前言 本来我们使用bash的时候一直显示是: 后来我操作linux的时候因为有一个新的需求,我使用: useradd -d /home/testuser -m testuser 去创建一个用户名,名字 ...

  6. VScode 使用emmet

    背景 在很多的编辑场合,很多时候回出现很多逻辑性的问题.可能觉得html是一门没有逻辑的语言,实际上,它是有一定的思想编辑的.后来出现了emmet,这个不仅仅是一种快捷方式,同时也是一种思考方式. 解 ...

  7. Detectron2环境配置+Ubantu+CUDA10.1+pytorch1.7.0

    Detectron2环境配置 1.创建detectron2 conda环境 conda create -n detectron2 python=3.7 2.激活detectron2 conda环境 c ...

  8. Kubernetes 部署集群1.28.2版本(无坑)

    初步搭建一个一个主节点和两个从节点Kubernetes 1.28.2 集群.先准备好机器 | host | hostname | os | role | hardware | | --- | --- ...

  9. 如何将传统 Web 框架迁移部署到 Serverless 架构?

    简介: 与其说 Serverless 架构是一个新的概念,不如说它是一种全新的思路,一种新的编程范式. 与其说 Serverless 架构是一个新的概念,不如说它是一种全新的思路,一种新的编程范式. ...

  10. ACK One 构建应用系统的两地三中心容灾方案

    ​简介:本文侧重介绍了通过 ACK One 的多集群应用分发功能,可以帮助企业管理多集群环境,通过多集群主控示例提供的统一的应用下发入口,实现应用的多集群分发,差异化配置,工作流管理等分发策略.结合 ...