服务器网络带宽太小,导致性能差问题的处理
场景描述:
上周末,一直在开发的网页突然加载很慢,连接远程服务器也很慢,很多接口直接超时报错(NewWork Error)。
解决方案:
1.最初以为是后端接口太耗时,对mysql的操作太频繁,所以优化了两个版本的后端接口,结果为:
测试条件 | 测试结果 |
本地数据库+本地代码 | 复杂查询的接口平均耗时300ms、400ms |
远程数据库+本地代码 | 复杂查询的接口平均耗时1000ms左右 |
2.还可以接受,就没有再优化了。过段时间,接口返回又变慢了,这时开始考虑是不是服务器性能的问题,原先的配置是1核2G的测试服务器,于是就升级了服务器配置,为2核4G,此时结果为:
测试条件 | 测试结果 |
原先服务器配置(1核2G) | 页面加载超时 |
升级后服务器配置(2核4G) | 页面加载超时 |
3.我以为升级服务器就能解决问题,没想到第二天过来一看还是没有改变。晕~~然后由于本地程序连远程数据库,耗时就增加了,怀疑是网络带宽问题。当时用Navicat查询远程服务器测试了一下,一张表里就3条数据,加载到本地也要4-6s。此时在本地跑程序,连接远程数据库,报错为Usemql的问题,同时查看mysql的连接数,有很多sleeping的连接,而且默认最大连接数150,已经用的差不多了。怀疑是程序异常后没有关闭业务连接,测试了一下,产生异常后用save()关闭连接,用show full processlist比较数量,结果没有变化。。还是觉得是带宽问题。
4.和老师,师兄一起研究了一下,用nload工具查看网络情况,同时把进程一一关闭(由于服务器上有多个程序)。确认是我的后台程序占用带宽,一直在进行数据的上传和下载。同时查看服务器的网关,只有一个网关eth0,限制带宽为5M。此时老师建议我,把数据库连接语句中的IP地址设置为127.0.0.1,由于数据库和程序是在同一个服务器上,但一开始我是用数据库的外网地址去连接的。数据传输时可能走的是外网的网关,受到带宽的限制,本地IP则用本地网关,没有带宽限制。一改,好了!这。。。确实学习到了。
放一下结果:
测试条件 | 测试结果 |
Postman测试查询接口 | total耗时78ms,Transfer 耗时62ms |
总结:
程序连接数据库时,如果是在同一内网或同一服务器,尽量用内网IP去连接。毕竟受带宽限制。