أداة قياس أداء DNS لسطر الأوامر مصممة لاختبار التحمل وقياس أداء خوادم DNS باستخدام الأجهزة السلعية. تستهلك هذه الأداة عادةً ما يقرب من 30 كيلو بايت لكل اتصال متزامن ويمكنها الحفاظ على ما يقرب من 30000 QPS لكل نواة حديثة إذا كان الخادم ونظام التشغيل والشبكة لديك يسمحان لك بالوصول إلى مستويات مناسبة من التزامن.
يتجاوز DNStrace محللات نظام التشغيل ويتم توفيره كثنائي ثابت معبأ مسبقًا في Docker. يتم دعم قياس الكمون الأساسي والتحقق من النتائج والرسوم البيانية. في الوقت الحالي، يتم دعم الأسئلة A
و AAAA
و TXT
فقط.
$ dnstrace --help usage: dnstrace [<flags>] <queries>... A DNS benchmark. Flags: --help Show context-sensitive help (also try --help-long and --help-man). -s, --server="127.0.0.1" DNS server IP:port to test. -t, --type=A Query type. -n, --number=1 Number of queries to issue. Note that the total number of queries issued = number*concurrency*len(queries). -c, --concurrency=1 Number of concurrent queries to issue. -l, --rate-limit=0 Apply a global questions / second rate limit. -e, --expect=EXPECT ... Expect a specific response. -r, --recurse Allow DNS recursion. --edns0=0 Enable EDNS0 with specified size. --tcp Use TCP fot DNS requests. --write=1s DNS write timeout. --read=4s DNS read timeout. --codes Enable counting DNS return codes. --min=400µs Minimum value for timing histogram. --max=4s Maximum value for histogram. --precision=[1-5] Significant figure for histogram precision. --distribution Display distribution histogram of timings to stdout. --csv=/path/to/file.csv Export distribution to CSV. --io-errors Log I/O errors to stderr. --silent Disable stdout. --color ANSI Color output. --version Show application version. Args: <queries> Queries to issue.
على الرغم من أن dnstrace
مفيد في اختبار زمن الوصول ذهابًا وإيابًا عبر الشبكات العامة، فقد تم إنشاء الكود في المقام الأول لتوفير أداة على طراز apachebench لاختبار البنية التحتية الخاصة بك.
ومن ثم، فمن السهل جدًا إنشاء تحميل DNS كبير بإعدادات غير افتراضية. لا تفعل هذا مع خدمات DNS العامة . من المرجح أن تقوم بوضع علامة على عنوان IP الخاص بك.
go get github.com/redsift/dnstrace
وسيقوم بتثبيت الملف الثنائي في $GOPATH/bin
. في نظام التشغيل OS-X، سيتفوق أداء الملف الثنائي الأصلي على حاوية Docker أدناه التي تعمل تحت HyperKit بشكل ملحوظ، على سبيل المثال زيادة الإنتاجية بنسبة 30% وزمن وصول أقل بنسبة 30% وانخفاض في انتشار التوقيت بمقدار 4x
هذه الأداة متاحة في صورة تم إنشاؤها مسبقًا.
docker run redsift/dnstrace --help
إذا كان إعداد الاختبار المحلي الخاص بك يسمح لك بالوصول إلى 50 ألف QPS وما فوق، فيمكنك توقع أن تضيف شبكة عامل الإرساء ~2% من الحمل الزائد إلى الإنتاجية و~8% لمتوسط زمن الاستجابة (تم اختباره على Linux Docker 1.12.3). إذا كان هذا مهمًا لأغراضك، فقد ترغب في تشغيله باستخدام --net=host
./dnstrace --completion-script-bash
و ./dnstrace --completion-script-zsh
سيقومان بإنشاء نصوص برمجية لإكمال الصدفة.
على سبيل المثال
$ eval "$(./dnstrace --completion-script-zsh)" $ ./dnstrace --concurrency --codes --distribution --io-errors --precision --server --version --color --edns0 --max --rate-limit --silent --write --concurrency --expect --min --read --tcp --csv --help --number --recurse --type
عندما تقترب من آلاف الاتصالات المتزامنة على OS-X، قد تواجه أخطاء في الاتصال بسبب عدم كفاية مؤشرات الملفات أو مؤشرات الترابط. من المحتمل أن يكون هذا بسبب حدود العملية، لذا تذكر تعديل هذه الحدود إذا كنت تنوي زيادة مستويات التزامن إلى ما بعد 1000.
لاحظ أن استخدام sudo ulimit
سيؤدي إلى إنشاء غلاف جذر، وضبط حدوده، ثم الخروج دون إحداث أي تأثير حقيقي. بدلاً من ذلك، استخدم launchctl
أولاً على OS-X.
$ sudo launchctl limit maxfiles 1000000 1000000 $ ulimit -n 12288
على المدى الطويل، يمكن للمستخدم إرسال SIGHUP عبر kill -1 pid
للحصول على عدد التقدم الحالي.
$ docker run redsift/dnstrace -n 10 -c 10 --server 8.8.8.8 --recurse redsift.io Benchmarking 8.8.8.8:53 via udp with 10 conncurrent requests Total requests: 100 of 100 (100.0%) DNS success codes: 100 DNS response codes NOERROR: 100 Time taken for tests: 107.091332ms Questions per second: 933.8 DNS timings, 100 datapoints min: 3.145728ms mean: 9.484369ms [+/-sd]: 5.527339ms max: 27.262975ms DNS distribution, 100 datapoints LATENCY | | COUNT +-------------+---------------------------------------------+-------+ 3.276799ms | ▄▄▄▄▄▄▄▄ | 2 3.538943ms | ▄▄▄▄▄▄▄▄▄▄▄▄ | 3 3.801087ms | ▄▄▄▄▄▄▄▄▄▄▄▄ | 3 4.063231ms | ▄▄▄▄▄▄▄▄▄▄▄▄ | 3 4.325375ms | ▄▄▄▄▄▄▄▄ | 2 4.587519ms | | 0 4.849663ms | | 0 5.111807ms | ▄▄▄▄ | 1 5.373951ms | ▄▄▄▄ | 1 5.636095ms | ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ | 4 5.898239ms | ▄▄▄▄▄▄▄▄▄▄▄▄ | 3 6.160383ms | ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ | 5 6.422527ms | ▄▄▄▄▄▄▄▄▄▄▄▄ | 3 6.684671ms | ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ | 5 6.946815ms | ▄▄▄▄▄▄▄▄ | 2 7.208959ms | ▄▄▄▄ | 1 7.471103ms | ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ | 9 7.733247ms | ▄▄▄▄▄▄▄▄ | 2 7.995391ms | ▄▄▄▄▄▄▄▄ | 2 8.257535ms | ▄▄▄▄▄▄▄▄▄▄▄▄ | 3 8.650751ms | ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ | 5 9.175039ms | ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ | 11 9.699327ms | ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ | 6 10.223615ms | ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ | 4 10.747903ms | ▄▄▄▄ | 1 11.272191ms | ▄▄▄▄ | 1 11.796479ms | | 0 12.320767ms | | 0 12.845055ms | | 0 13.369343ms | | 0 13.893631ms | ▄▄▄▄ | 1 14.417919ms | ▄▄▄▄ | 1 14.942207ms | ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ | 5 15.466495ms | | 0 15.990783ms | ▄▄▄▄ | 1 16.515071ms | | 0 17.301503ms | | 0 18.350079ms | | 0 19.398655ms | ▄▄▄▄ | 1 20.447231ms | ▄▄▄▄▄▄▄▄ | 2 21.495807ms | ▄▄▄▄ | 1 22.544383ms | | 0 23.592959ms | | 0 24.641535ms | ▄▄▄▄ | 1 25.690111ms | ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ | 4 26.738687ms | ▄▄▄▄ | 1