情况是这样,监控看到https://www.nimail.cn这个临时邮箱项目挂了,内存占满。
现象就是链接请求超时报错 500,所有的请求都失败。

分析发现在晚上 3 点出现流量波峰,之后就一直有问题。

分析发现 卡在数据库请求上,一般的查询耗时打到几十秒。

然后问题是为什么内存暴涨?

为了研究和复现问题。直接上压测。之前发布过一次 jmeter 压测教程:https://testerhome.com/topics/43010,现在直接使用并改改。
压测发现确实能出现,当接口请求量上来后,内存会呈现持续增长,并打到最后的 100%。然后所有的请求就失败。

具体分析后发现确实是链接数据库问题。然后去看了下数据库,又发现数据库并没有慢查询和资源告警。这就见鬼了。。。

然后 AI 了一下,发现该问题很典型。

标准答案就是:服务的数据库连接池无法支撑大流量,导致链接占满导致新链接无法查库直接等待,所以现象才是 sql 查询很慢,但是 db 没有慢查询和压力;时间长流量大导致数据都压在服务的内存中导致内存积压没有 GC。

别看现在写的没几个字,但是整个排查的过程是很长的,开始只看到内存暴涨,但是暴涨内存原因无法分析,看来看去最后才发现 sql 执行很长这条关键的线索。整个过程下来,感觉自己又变强了。

解决办法就是增加连接池大小,扩容。

不过我这个站现在都是免费的,扩容不起,而且观察也只是偶发的暴涨,懒得搞了。


↙↙↙阅读原文可查看相关链接,并与作者交流