mongodb connect slow

在實際mongoose連線時,發現使用mongodb://localhost/db連線常常要好幾十秒才會建起來,而mongodb://127.0.0.1/db就馬上可以連上,追蹤了底層發現原因主要是mongodb-core 3.x他預設是使用tcp family 6的參數建連線,如果在系統內沒有正確設定localhost對應的ipv6 dns lookup
(/etc/hosts ::1 或是 external dns的ipv6 dnslookup)就會等到查詢timeout,這時候mongodb nodejs driver才改用family 4的參數連線

node_modules/mongodb-core/lib/connection/connection.js

而127.0.0.1連線時,也是會帶family 6去連,但是在nodejs net.createConnection會進行dns.lookup 而 dns.lookup會再檢查一次字串是否為ip以及解出對應的family

https://github.com/nodejs/node/blob/master/lib/dns.js

這類的問題比較麻煩的是在不同的機器上不一定能reproduce,有可能ipv6 localhost設定正確或是對外查詢dns可以正常查到,所以在追問題的時候仍需從經過的source code著手

This entry was posted in nodejs. Bookmark the permalink.

Leave a Reply