Wednesday, September 21, 2016

用 python 來測試 system call 的行為

在客戶的機器上,發現 curl 和 ping 的 DNS 解析行為不一樣。查了半天,才發現原來是底層呼叫的系統呼叫不同。 curl 使用 getaddrinfo() ,而 ping 使用 gethostbyname() 。於是,這時我發現了有一個問題,過去沒有仔細思考過,在 linux 的 shell 環境之下,要怎麼樣可以測試「系統呼叫」的行為呢? 查了一下,發現還是用 python 最省事。

另外,也是因為處理了這個問題,我才發現原來 DNS 也是有緩存的。Nscd caches libc-issued requests to the Name Service. If retrieving NSS data is fairly expensive, nscd is able to speed up consecutive access to the same data dramatically and increase overall system performance.  也因此,如果修改了 resolv.conf 的話,記得要叫 nscd 做一下重新載入。