很奇怪的事情..。为课文墙事先道歉。
我们有一套运行在EC2实例上的应用程序,它们都连接到一个RDS实例。
我们在同一台EC2服务器上托管暂存和生产应用程序。
在其中一个应用程序中,一旦将暂存应用程序移动到prod,就会打开超过250个到DB的连接,从而导致RDS实例最大限度地占用CPU,并使整个套件的速度减慢。暂存应用程序本身没有此问题。
通过通过我们的八达通安装程序部署应用程序,以及物理复制粘贴BIN/Views文件夹,可以复制此问题。
连接是即时的,在不到一分钟的时间内将CPU使用率提高到99%。
需要注意的事情..。
运行how to see active SQL Server connections?将显示大容量连接,其中没有一个具有LoginName。
FE服务器上的资源监视器将列出连接,所有连接都来自IIS,似乎扫描所有出站端口,试图连接到其端口上的DB服务器。FE服务器地址和DB服务器地址分别被关闭。只有所有连接的片段。
该应用程序需要用户登录来执行99.9%的任务。有一个公开的“忘记您的密码”方法,该方法被更新为接受用户名或密码。不更改表单结构或表单操作URL,只需在后面进行额外检查。
其他的变化是关于在某些条件下如何显示数据和付款限制。两者都需要登录。
我试过的东西..。
真的不知道发生了什么。这是我第一次看到这样的事情。特别奇怪的是,暂存很好,但是在另一个URL/连接字符串上的同一个应用程序失败得非常严重。
我唯一能想到的可能是某种刮板,它是对公共形式进行轮询,但这是没有意义的,因为为什么它没有发生在当前的应用程序.
AWS中有什么东西可以监视正在发出的呼叫吗?我隐约记得NewRelic中的一些东西能够做到这一点。
欢迎任何建议和/或类似的经验。
编辑。
更新...
我们在大多数查询中使用ADO。更新了一个查询以从不同的表中获取数据。方法名称和参数没有更改,只是查询的主体。如果我使用sys.dm_exec_sql_text查看发送到DB的内容,我可以看到这是在数百个连接中每个都发送的更新查询。不过,他们都被停职了.在如何将查询发送到服务器方面,没有什么变化,只是查询本身的主体.
发布于 2017-03-15 07:08:55
因此,在更新中发布的其他查询之一破坏了它。我们只恢复了这个查询并部署了一个新版本,这是很好的。
奇怪的是,它是以一种或另一种形式运行在整个套房。但只是死于任何类型的负荷,没有分期,这就是为什么我认为这将是最后一个地方看。
https://stackoverflow.com/questions/42798964
复制相似问题