erlang使用httpc:request報錯nxdomain

今天遇到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一番,發現這個博客:緩存

一次erlang 節點CPU嚴重波動排查服務器

發現下面有這個問題:併發

服務器沒有啓動 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

問題解決。測試

相關文章
相關標籤/搜索