记一次asp.net 8 服务器爆满的解决过程
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 服务器爆满的解决过程的更多相关文章
- 再记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)
在此之前项目有发生过两次类似的状况,都得以解决,但最近又会发现偶尔CPU会跑满,虽然之前使用过WinDbg解决过两次问题但人的记忆是不可靠的,今天处理同样问题的时候还是遇到了一些障碍,这一次希望可以记 ...
- 可道云kodexplorer网盘未清理造成linux服务器爆满的解决方法
今天登陆宝塔面板的时候发现硬盘占用37GB,已经变红提示我空间不足了,惊呆了, 还以为是宝塔抽风了,去远程连接服务器看了一下,懵逼了. df -h 查看挂载目录使用情况 还是不相信现实的我又重启了一下 ...
- 记一次asp.net core 线上崩溃解决总结
1.首先要先准备好环境,安装lldb 工具 要安装3.9版本的,因为每个版本对应dnc版本不一样,3.9的支持2.2 版本,然后确定分析的机器里dnc 版本和线上的生产环境是否一致,自己安装比较费劲, ...
- 记一次线上频繁fullGc的排查解决过程
发生背景 最近上线的一个项目几乎全是查询业务,并且都是大表的慢查询,sql优化是做了一轮又一轮,前几天用户反馈页面加载过慢还时不时的会timeout,但是我们把对应的sql都优化一遍过后,前台响应还是 ...
- 记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)
项目上线以来一直存在一个比较揪心的问题,和一个没有信心处理的BUG,那就是在应用程序启动时有可能会导致cpu跑满99%或持续在一个值如50%左右,这样一来对服务器的压力是非常大的,经常出现服务器无法远 ...
- 记一次排查log4net 不输出日志的解决过程
最近发现log4net 不输出日志了,重点排查几个地方,发现都没有问题. 1.[assembly: log4net.Config.XmlConfigurator(ConfigFile = " ...
- MQ服务器奔溃解决过程
1.MQ服务器崩溃调节: 今天具安卓前端反应, 从昨天下午开始线上服务器使用 电话号码登陆和 使用电话号码注册功能不能使用, 经过前端仔细排查怀疑是后端问题,之后经过与ios前端 确认, 定位为后端服 ...
- 日常工作问题解决:记一次centos7上的lvm表错误解决过程
问题描述: 公司大数据hadoop2服务器采用电信云服务器,后来故障,电信恢复该服务器,需要重新部署程序,需要扩展lvm分区,但是使用pvsan命令发现有报错信息,需要解决以防重启后,因挂载问题,无法 ...
- 记一次数据库主从导致严重的bug解决过程
1.事情起始: 我们每个月要给商家进行出账,所以有定时任务去跑商家的订单和售后进行出账,这个功能已经上线很久了,代码执行多次都没问题,突然有一天,产品找我说出现bug了: 这时,去生产库查询重复的订单 ...
- ASP.NET Core服务器综述
原文地址:Servers overview for ASP.NET Core By Tom Dykstra, Steve Smith, Stephen Halter, and Chris Ross A ...
随机推荐
- java延迟队列DelayQueue及底层优先队列PriorityQueue实现原理源码详解
DelayQueue是基于java中一个非常牛逼的队列PriorityQueue(优先队列),PriorityQueue是java1.5新加入的,当我看到Doug Lea大神的署名之后,我就知道这个队 ...
- 应用缺少POI数据,如何开发地点深度信息?
用户在App里搜索某个地点时,并不满足单一的地点信息,希望得到更多可以帮助其做决策的深度信息.例如有打车出行需求的用户,在打车App里搜索地点时可以显示周边的地点,精确到某个路口,让用户可以自由选择合 ...
- mysql迁移sqlServer和mybatisPlus下查询语句转换为SqlServer2008
mysql数据迁移sqlServer2008 mybatisPlus下查询语句转换 一.mysql数据迁移到sqlServer2008中(包括数据结构和数据) 最近公司项目需要使用sqlServer以 ...
- HarmonyOS音频开发指导:使用AVPlayer开发音频播放功能
如何选择音频播放开发方式 在HarmonyOS系统中,多种API都提供了音频播放开发的支持,不同的API适用于不同音频数据格式.音频资源来源.音频使用场景,甚至是不同开发语言.因此,选择合适的音频 ...
- mysql 必知必会整理—sql 计算函数[六]
前言 简单整理一下sql的计算函数. 正文 函数没有SQL的可移植性强 能运行在多个系统上的代码称为可移植的(portable).相对来说,多数SQL语句是可移植的,在SQL实现之间有差异时,这些差异 ...
- Canvas图形编辑器-数据结构与History(undo/redo)
Canvas图形编辑器-数据结构与History(undo/redo) 这是作为 社区老给我推Canvas,于是我也学习Canvas做了个简历编辑器 的后续内容,主要是介绍了对数据结构的设计以及His ...
- Sarsa模型和Q_learning模型简记
1. Sarsa模型 1.1 Sarsa类代码: class SarsaAgent(object): def __init__(self,state_n,action_n,learning_rate= ...
- Tkinter常用功能示例(一)
技术背景 Tkinter是一个Python自带的GUI框架,虽然现在主流的还是用pyqt的多一些,但是Tkinter在环境配置上可以节省很多工作,可以用来做一些小项目.如果是大型项目,用pyqt或者Q ...
- k8s架构与原理介绍
K8s概述 目录 K8s概述 1.什么是K8s 2.K8s 设计架构 3. k8s重要节点描述 4. 过程原理: 5. k8s的核心功能 6. k8s的历史 7. k8s的安装方式 8. k8s的应用 ...
- 力扣1107(MySQL)-每日新用户统计(中等)
题目: Traffic 表: 该表没有主键,它可能有重复的行.activity 列是 ENUM 类型,可能取 ('login', 'logout', 'jobs', 'groups', 'homepa ...