erlang使用httpc:request报错nxdomain

今天遇到httpc:request()方法报错:

调用方法:

$ erl
1>inets:start().
2>Url = "http://example.com".
3>httpc:request(get, {Url, []}, [], []).

出错信息:

{error,{failed_connect,[{to_address,{"example.com",
                                     80}},
                        {inet,[inet],nxdomain}]}}

首先考虑是防火墙和selinux的问题,把这些给关闭了:

$ /etc/init.d/iptables stop
$ setenforce 0

但是还是有问题,google一番,发现这个博客:

一次erlang 节点CPU严重波动排查

发现下面有这个问题:

服务器没有启动 nscd 服务,没有缓存
DNS 使用UDP 协议,即使时内网,偶尔也会丢失
erlang 对于并发查询同一个DNS 会做合并,同时只会有一个DNS 请求
erlang 的系统调用超时时间太长(5s),没有及时的重发查询,造成期间请求堆积,等DNS返回,堆积的业务同时开始处理,造成CPU波动。
解决方案:
1. 启动nscd 2. 配置inet 使用内存dns 模块缓存

在centos测试:

$ yum install nscd -y
$ service nscd start
$ chkconfig nscd on

问题解决。

转载于:https://my.oschina.net/u/191928/blog/644731

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值