我們的應用程序(RHEL 5/C++)使用由gethostid
返回的hostid用於記錄目的。由於某些原因,本地網絡環境的主DNS服務器已脫機。這導致在gethostid
大量問題:函數調用掛起超過60s,這導致我們的應用程序內部超時。在命令行上撥打hostid
也幾分鐘後沒有返回。一旦DNS服務器重新啓動,應用程序和命令行工具中的超時/問題都會消失。如何防止gethostid在Linux上執行DNS查詢
我的問題是:如何防止gethostid
進行DNS查找?有一些邊界條件的答案:
- 該文件
/etc/hostid
一定不存在。 - 不允許撥打
sethostid
。 - 更改
/etc/hosts
是不可能的。
我很驚訝這發生在所有。據我瞭解gethostid
它的工作原理是這樣的:
- 返回最後
sethostid
,如果它已經手動設置的值。 - 如果文件存在,則返回hostid表單/ etc/hostid。
- 返回主機的主IP(如果設置)。
- 其他情況不合格。
我看不到需要DNS查詢。
要進行驗證,即gethostid
實際工作DNS服務器上dependend,試試這個:
- 以root的身份創建/更改/etc/reslov.conf所以它僅包含無效
nameserver
條目。在命令行上調用hostid
。
在我的debian/squeeze安裝中,這導致hostid 00000000
沒有任何掛起。我認爲hostid
的RedHat版本是不同/較舊的,並且結果是掛起的。
我忘了一些小細節:'/ etc/nsswitch.conf'包含'hosts:files dns'。系統主IP的主機名不在'/ etc/hosts'中。這是通過設計和客戶要求。 – briconaut 2012-02-13 12:54:56
是從'/ etc/nsswitch.conf'中刪除'dns'是否可接受的解決方案? – nickgrim 2012-02-13 14:45:09
我不這麼認爲。這會阻止所有的DNS查詢,對吧?肯定是不希望的副作用。 – briconaut 2012-02-13 16:05:29