我目前正在編寫自己的HTTP代理。我有代碼工作,但我試圖用ApacheBench進行壓力測試,發現我現在每隔一段時間就會收到一條消息,如下所示:getaddrinfo問題
「getaddrinfo:節點名或服務器名已提供,或者未知主機en.wikipedia。組織服務80「
我不能找出爲什麼這個函數調用會失敗的主機名和端口傳遞。
我已經在網上尋找不同的方法來解決這個問題,並沒有發現任何有用的東西。
有沒有人有任何想法?
編輯 通過在我的應用程序中實現DNS緩存系統解決了此問題。
我目前正在編寫自己的HTTP代理。我有代碼工作,但我試圖用ApacheBench進行壓力測試,發現我現在每隔一段時間就會收到一條消息,如下所示:getaddrinfo問題
「getaddrinfo:節點名或服務器名已提供,或者未知主機en.wikipedia。組織服務80「
我不能找出爲什麼這個函數調用會失敗的主機名和端口傳遞。
我已經在網上尋找不同的方法來解決這個問題,並沒有發現任何有用的東西。
有沒有人有任何想法?
編輯 通過在我的應用程序中實現DNS緩存系統解決了此問題。
也許你的分辨率堆棧中的某些東西不能處理你正在查詢的數量?
您必須以開頭,然後查看您的系統上的查詢是如何解決的。在某些時候,你最終會到達你的本地DNS緩存,如果它一次查詢太多,也可能會超時。
您可能會發現需要在代理(例如Squid)中運行DNS緩存,或者使用例如lwresd在本地運行DNS緩存。
我建議使用像C-ares這樣的異步DNS解析庫。否則,您會很快發現標準解決方案將如何殺死您的性能,因爲它會阻止。
+1:超負荷DNS服務器或UDP堆棧是相當容易的。最重要的是,爲了防止拒絕服務攻擊,許多DNS服務器每個IP都有一個速率限制器,以便一個IP不會使系統過載。 –