问题背景
前两天有个同事询问了一个分库分表的问题,我记得之前自己博客上记录了一些文章就我的文章链接发给了他,他在随后访问本站其他的文章的时候,告诉我点击没有反应,很慢,我第一反应是本站技术博客是自己采购服务器部署的,可能部署的东西过多,内存,cpu等问题的原因吧,自己业以穷的方式调侃了下,就过去了。今天刚好有点时间,就研究研究。
问题重现
上面截图可以看出,页面响应都已经2-3s时间了,这个时间确实有点长了,因为数据量还是很少的,所以感觉还是有点问题的。
问题研究解决
服务器配置:
2H4G,数据库自建的mysql
1、猜测可能是我的服务器装的东西太多,导致内存和cpu过大。
尝试将其他不重要的服务全部停了,但是我测试了下,没有太大的作用。
所以应该不是这个原因。
2、服务长时间没有重启,内存等连接没有释放等问题
尝试将nginx、mysql、博客服务等重新启动,效果也没有很大改变。
3、查看nginx日志
日志显示,后台响应请求时间很长,排除是前端页面渲染的问题。
4、后台接口层面
我找到相关的接口,采用postman的方式调用了,发现,接口响应很慢,
但是我的博客的数据量才200多,对于数据库而言应该是不存在什么问题的。
我还是将数据库备份后,删除到仅剩下一篇文章,但是依然很慢。
到这一步,我就怀疑是数据库链接问题。
继续排查服务端连接数据库的地方。我的服务方式都采用docker部署的,
mysql也是我采用docker自建的服务。但是我连接信息的地方还是采用可公网的ip作为链接。
当这一步,我就有理由怀疑是这个公网ip每次连接数据库的时候很慢造成的。
问题解决
这就有牵扯到一个问题,同一主机之间的容器互连?
容器间要能相互通信,需要同在一个网络中。
docker容器在创建时若不指定网络驱动时会默认归属到bridge网络。
1、首先创建一个网络:
docker network create networkName
2、将容器连到创建的网络中(每个容器都要连到这个网络里):
docker network connect networkName dockerName
3、查看网络内的容器信息:
docker network inspect networkName
或者在使用docker-compose
networks:
mynet:
external:
name: networkName
4、在数据库连接的地方我们就可以采用容器的名称
url: jdbc:mysql://mysql:3306/db
测试效果
可以看出,已经降到300ms了,快了好多。
评论区