问题产生
公司目前是前后端分离开发,我用的Mac本。前端在调用我的接口时基本都是5秒以上才能响应,前端超时时有发生,但是代码提给Windows的同事跑,接口响应都是几十毫秒就完事了。
更恶心的是后端还会报错java.io.IOException: Broken pipe,大致就是前端超时就关闭通道了,超时的通道过多就会引发管道崩溃,崩溃了就要重启服务,总会打断思路,而且前端看我的接口等的心急,于是着手解决这个问题。
问题溯源
后台Java用了Dubbo的服务调用,DEBUG级日志显示每次Dubbo在获取host的时候会卡很久
NetUtils.isInvalidLocalHost(host)
那就看看自己的主机名吧
# hostname
HuskydeMacBook-Pro.local
????原来Mac在更新系统的时候会修改主机名,我的主机名不再是localhost了
那修改主机名就好啦
问题解决
先查询自己的主机名
# hostname
HuskydeMacBook-Pro.local
编辑hosts文件
# sudo vim /etc/hosts
Password:
输入开机密码
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
# 这里配置本机的host映射
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
# 下面的是PD虚拟机的hosts配置,不用看
# Parallels Desktop
# 127.0.0.1 download.parallels.com
# 127.0.0.1 toolbox.parallels.com
# 127.0.0.1 desktop.parallels.com
# 127.0.0.1 update.parallels.com
# 127.0.0.1 account.parallels.com
加两行自己的host映射
127.0.0.1 HuskydeMacBook-Pro.local
::1 HuskydeMacBook-Pro.local
然后 !wq 保存
问题解决
再次调用,前台响应时间跟同事一样只有几十毫秒了,后台日志也不会卡在获取host上了