今天遇到httpc:request()方法報錯:html
調用方法:linux
$ erl 1>inets:start(). 2>Url = "http://example.com". 3>httpc:request(get, {Url, []}, [], []).
出錯信息:shell
{error,{failed_connect,[{to_address,{"example.com", 80}}, {inet,[inet],nxdomain}]}}
首先考慮是防火牆和selinux的問題,把這些給關閉了:centos
$ /etc/init.d/iptables stop $ setenforce 0
可是仍是有問題,google一番,發現這個博客:緩存
發現下面有這個問題:併發
服務器沒有啓動 nscd 服務,沒有緩存 DNS 使用UDP 協議,即便時內網,偶爾也會丟失 erlang 對於併發查詢同一個DNS 會作合併,同時只會有一個DNS 請求 erlang 的系統調用超時時間太長(5s),沒有及時的重發查詢,形成期間請求堆積,等DNS返回,堆積的業務同時開始處理,形成CPU波動。 解決方案: 1. 啓動nscd 2. 配置inet 使用內存dns 模塊緩存
在centos測試:dom
$ yum install nscd -y $ service nscd start $ chkconfig nscd on
問題解決。測試