安装 Centos 7 后,我注意到 DNS 查找 /etc/hosts 中保存的地址需要很长时间,示例如下:
time curl -X get http://localhost
real 0m0.159s
user 0m0.004s
sys 0m0.005s
但
time curl -X get http://127.0.0.1
real 0m0.005s
user 0m0.001s
sys 0m0.003s
每个请求解析“localhost”大约需要 0.15 秒。
我在 Centos 6.5 同一网络中的另一台服务器上进行了相同的测试,但“localhost”与“127.0.0.1”一样快
答案1
这是红帽Bug 1130239 - RHEL6 和 RHEL7 之间的卷曲性能差异:
该
libcurl
库对没有活动文件描述符的操作(即使是短操作)使用了不必要的长阻塞延迟。这意味着某些操作(例如使用 解析主机名/etc/hosts
)会人为地花费很长时间才能完成。中的阻塞代码libcurl
现在已被修改,使得初始延迟很短,并逐渐增加,直到事件发生。快速libcurl
操作现在可以更快地完成。
从源安装新版本的curl:
git clone https://github.com/bagder/curl.git
cd curl
yum install libtool
./buildconf
./configure
make
make install