বেশ কয়েক মাস আগে আমি লক্ষ্য করেছি যে আমার পাঠ্য সম্পাদক (ইমাস) এবং আইডিই (ইন্টেলিজ) শুরু করতে সত্যিই দীর্ঘ সময় নিচ্ছে। সময়টি ডিএনএস সার্ভারের ওএস এক্সের ব্যবহারের ভিত্তিতে পরিবর্তিত হয়েছিল।
যখন কোনও প্রকল্পের পরীক্ষার স্যুটটি ধীরে ধীরে চলছিল তখন আমি বিষয়টি আলাদা করতে সক্ষম হয়েছি। আমি (উচ্চ স্তরের) অপরাধীকে কল হতে দেখেছি socket.getfqdn()
।
ওএস এক্স 10.10.2 এ টার্মিনালে নিম্নলিখিত কমান্ডটি চালনা করে সমস্যাটি দেখায়:
$ time python -c 'import socket; socket.getfqdn()'
python -c 'import socket; socket.getfqdn()' 0.02s user 0.00s system 0% cpu 5.122 total
আমি কোডটি খুঁজে পেয়েছি যা কল করার পরে চলে socket.getfqdn()
এবং দেরী দ্বারা সৃষ্ট হয় getaddrinfo(3)
। আমি একটি ছোট প্রোগ্রাম লিখেছি যা সমস্যাটি পৃথক করে এবং gai_strerror(3)
এই বার্তাটি সরবরাহ করে:
$ time ./hostinfo
Hostname: MacBook-Pro.local
getaddrinfo: nodename nor servname provided, or not known
./hostinfo 0.00s user 0.00s system 0% cpu 5.101 total
দেখে মনে হচ্ছে বিলম্বটি সময় শেষ হওয়ার জন্য ডিএনএস ক্যোয়ারীর জন্য অপেক্ষা করছে। উপরের ফলাফলগুলি গুগলের সর্বজনীন ডিএনএস সার্ভার ব্যবহার করছিল। আমি যদি আমার আইএসপির ডিএনএস সার্ভার ব্যবহার করি তবে সময়টি 30 সেকেন্ডে বেড়ে যায়:
$ time python -c 'import socket; socket.getfqdn()'
python -c 'import socket; socket.getfqdn()' 0.01s user 0.01s system 0% cpu 30.114 total
(কৌতূহলভাবে সি প্রোগ্রাম hostinfo
এখনও মাত্র 5 সেকেন্ডের উপরে নেয়)
কী কারণে এই সমস্যা সৃষ্টি হচ্ছে? আমার হোস্টনামটি কী অবৈধ বা সমস্যা সৃষ্টি করছে?
$ hostname
MacBook-Pro.local
এই সমস্যাটি একই নেটওয়ার্কে কোনও ম্যাকবুক এয়ারে ঘটে না।
আমি যে বড় পার্থক্যটি দেখতে পাচ্ছি তা হ'ল সমস্যাযুক্ত মেশিনে, নিম্নলিখিত ডিএনএস সংযোগটি তালিকাভুক্ত করা হয়:
$ scutil --dns
DNS configuration
resolver #1
search domain[0] : Home
nameserver[0] : 8.8.8.8
nameserver[1] : 8.8.4.4
flags : Request A records
reach : Reachable
DNS configuration (for scoped queries)
resolver #1
search domain[0] : Home
nameserver[0] : 8.8.8.8
nameserver[1] : 8.8.4.4
if_index : 4 (en0)
flags : Scoped, Request A records
reach : Reachable
ম্যাকবুক এয়ারে, বেশ কয়েকটি অতিরিক্ত এন্ট্রি এমডিএনএস সম্পর্কিত অন্তর্ভুক্ত রয়েছে। উদাহরণ স্বরূপ:
resolver #2
domain : local
options : mdns
timeout : 5
flags : Request A records
order : 300000
এটি উল্লেখযোগ্য বলে মনে হচ্ছে। মজার বিষয় হল, উপরে উল্লিখিত সময়সীমাটি উপরের রানটাইমগুলির সমান।
আমার নোট করা উচিত যে আমি ওয়াইফাই ব্যবহার করে ইন্টারনেটে সংযুক্ত এবং আমার কম্পিউটারের হোস্টের নামটি সমাধান করার চেষ্টা করার সময়ই সমস্যাটি বিদ্যমান।
ping my_ISP_DNS_server
&ping Google_DNS_server
?