tcpdump ইউডিপি কর্মক্ষমতা বৃদ্ধি করে


13

আমি নিম্নলিখিত সেটআপটির কার্যকারিতা নির্ধারণ করতে লোড পরীক্ষার একটি সেট চালাচ্ছি:

Node.js test suite (client) --> StatsD (server) --> Graphite (server)

সংক্ষেপে, নোড.জেএস পরীক্ষার স্যুট প্রতি x সেকেন্ডে মেট্রিকের একটি সেট পরিমাণ স্ট্যাটসডি উদাহরণে প্রেরণ করে যা অন্য সার্ভারে অবস্থিত। স্ট্যাটসডি এর পরিবর্তে প্রতি সেকেন্ডে একই সার্ভারে অবস্থিত গ্রাফাইট উদাহরণে মেট্রিকগুলি ফ্লাশ করে। তারপরে আমি দেখছি যে পরীক্ষার স্যুট এবং গ্রাফাইটের মধ্যে প্যাকেট ক্ষতি নির্ধারণ করতে গ্রাফাইট কতটি মেট্রিক আসলে প্রেরণ করেছিল এবং কতজন গ্রাফাইট পেয়েছিল।

তবে আমি লক্ষ্য করেছি যে মাঝে মাঝে আমি খুব বড় প্যাকেট ড্রপ রেট পেয়েছি (নোট করুন এটি ইউডিপি প্রোটোকলের সাথে প্রেরণ করা হচ্ছে), 20-50% থেকে শুরু করে। সুতরাং যখন আমি এই প্যাকেটগুলি কোথায় ফেলে দেওয়া হচ্ছে তা সন্ধান করতে শুরু করেছিলাম, কারণ এটি স্ট্যাটসডি-র সাথে কিছু কার্য সম্পাদনের সমস্যা হতে পারে seeing এই ড্রপটি কোথায় ঘটেছে তা ট্র্যাক করার জন্য আমি সিস্টেমের প্রতিটি অংশে মেট্রিকগুলি লগ করা শুরু করি। এবং এখানেই জিনিসগুলি অদ্ভুত হয়ে যায়।

আমি ক্যাপচার ফাইল তৈরি করতে tcpdump ব্যবহার করছি যা পরীক্ষা চালানোর পরে আমি পরিদর্শন করি। কিন্তু যখনই আমি tcpdump চালিয়ে পরীক্ষা চালাই, প্যাকেটের ক্ষতি প্রায় অস্তিত্বহীন! দেখে মনে হচ্ছে tcpdump একরকমভাবে আমার পরীক্ষাগুলির পারফরম্যান্স বৃদ্ধি করছে এবং কেন এবং কীভাবে এটি ঘটে তা আমি বুঝতে পারি না। Tcpdump বার্তা সার্ভার এবং ক্লায়েন্ট উভয় লগ করতে আমি নিম্নলিখিত কমান্ডটি চালাচ্ছি:

tcpdump -i any -n port 8125 -w test.cap

একটি নির্দিষ্ট পরীক্ষার ক্ষেত্রে আমি 40000 মেট্রিক / গুলি পাঠাচ্ছি। Tcpdump চালানোর সময় পরীক্ষায় প্রায় 4% প্যাকেট ক্ষতি হয় এবং একটি ছাড়া প্যাকেটের প্রায় 20% ক্ষতি হয়

উভয় সিস্টেমই নিম্নলিখিত সেটআপ সহ জেন ভিএম হিসাবে চলছে:

  • ইন্টেল শিওন ই 5-2630 ভি 2 @ 2.60GHz
  • 2 জিবি র‌্যাম
  • উবুন্টু 14.04 x86_64

আমি ইতিমধ্যে সম্ভাব্য কারণগুলির জন্য যা যা পরীক্ষা করেছি:

  • ইউডিপি বাফার গ্রহণ / প্রেরণের আকার বাড়ানো।
  • সিপিইউ লোড পরীক্ষাটি প্রভাবিত করছে। (ক্লায়েন্ট এবং সার্ভার উভয় দিকের সর্বোচ্চ 40-50% লোড)
  • 'যে কোনও' এর পরিবর্তে নির্দিষ্ট ইন্টারফেসে tcpdump চলছে।
  • প্রিসিসিউস মোডটি অক্ষম করতে '-p' দিয়ে টিসিপিডম্প চালানো হচ্ছে।
  • কেবল সার্ভারে tcpdump চলছে। এর ফলে 20% প্যাকেট নষ্ট হয়ে গেছে এবং এটি পরীক্ষাগুলিতে কোনও প্রভাব ফেলবে না বলে মনে হচ্ছে।
  • কেবল ক্লায়েন্টের উপর tcpdump চলছে। এর ফলে কর্মক্ষমতা বৃদ্ধি পেয়েছে।
  • নেটদেব_ম্যাক্স_ব্লগ এবং নেটদেব_বাজেট 2 ^ 32-1 এ বাড়ানো হচ্ছে। এটি কোন পার্থক্য তৈরি।
  • প্রতিটি নিকের উপর প্রমিসিউস মোডের প্রতিটি সম্ভাব্য সেটিং চেষ্টা করে (সার্ভার চালু এবং ক্লায়েন্ট বন্ধ, সার্ভার বন্ধ এবং ক্লায়েন্ট চালু, উভয় বন্ধ)। এটি কোন পার্থক্য তৈরি।

3
একটি জিনিস যা tcpdump ডিফল্টরূপে করে তা হ'ল আপনার নেটওয়ার্ক ইন্টারফেসটি প্রমিসিউস মোডে রাখে। এটি -pকরতে পারার বিকল্পটি আপনি পাস করতে চাইতে পারেন এটি কোনও পার্থক্য করে কিনা to
জোরডাচি

সুতরাং আপনি উভয় ক্লায়েন্ট এবং সার্ভারে tcpdump চালাচ্ছেন, এবং প্যাকেট ক্ষতি হার কমছে? আপনি যদি এটি কেবল ক্লায়েন্টে চালান তবে কী হবে এবং আপনি কেবল এটি সার্ভারে চালালে কি হবে? (এবং, হ্যাঁ, প্রমিসিউস মোডটি বন্ধ করার চেষ্টা করুন এবং "কোনও" ডিভাইসের পরিবর্তে পরীক্ষার জন্য ব্যবহৃত নির্দিষ্ট নেটওয়ার্ক ইন্টারফেসের উপর নজর রাখার চেষ্টাও করুন, এটি কোনও

তোমার মন্তব্যের জন্য ধন্যবাদ. আমি আপনার উভয় সুপারিশ চেষ্টা করেছিলাম এবং আমার চেষ্টাটি যা চেষ্টা করেছি তা প্রতিফলিত করতে আমার প্রশ্ন সম্পাদনা করেছি, তবে এটি সমস্যার প্রভাব ফেলেনি।
রুবেন হোমস

উভয় মেশিনে প্রিকসিউসু মোডে নিকগুলি রেখে দেওয়ার জন্য কি টিসিপিডম্প চালানোর মতো প্রভাব রয়েছে? এথ0-তে প্রমিশু মোড ifconfig eth0 promiscসক্ষম ও ifconfig eth0 -promiscঅক্ষম করে। যদি এটি পার্থক্য করে, উভয় মেশিনে প্রম্পিস চালু / বন্ধের 4 টি সম্ভাব্য সংমিশ্রণের সাথে তুলনা করার চেষ্টা করুন। এটি সমস্যার উত্স চিহ্নিত করতে সহায়তা করতে পারে।
ফক্স

@ ফক্স উত্তরের জন্য ধন্যবাদ! আমি সমস্ত নিকের জন্য সমস্ত সম্ভাব্য সংমিশ্রণ চেষ্টা করেছি, তবে ফলাফলের কোনও পার্থক্য নেই। এটি প্রতিফলিত করতে আমি আমার প্রশ্ন আপডেট করেছি।
রুবেন হোমস

উত্তর:


10

যখন tcpdump চলমান থাকে, আগত ফ্রেমগুলিতে এটি পড়ার জন্য মোটামুটি প্রম্পট হবে। আমার হাইপোথিসিসটি হ'ল এনআইসির প্যাকেটের রিং বাফার সেটিংস ছোট আকারে কিছুটা হতে পারে; যখন tcpdump চলছে তখন এটি আরও সময়োপযোগে খালি হয়ে চলেছে।

আপনি যদি কোনও রেড হ্যাট গ্রাহক হন তবে এই সমর্থন নিবন্ধটি প্যাকেট অভ্যর্থনা সম্পর্কে ওভারভিউ অত্যন্ত কার্যকর । সেখানে কিছু জিনিস রয়েছে যা আমি মনে করি না আপনি এখনও বিবেচনা করেছেন।

আপনার সিস্টেম আইআরকিউগুলির সাথে কীভাবে আচরণ করছে তা বিবেচনা করুন; নেটওয়ার্ক ইন্টারফেসের 'ডিভাইটওয়েট' বাড়ানোর কথা বিবেচনা করুন (এনআইসি থেকে ব্যবহারকারী-স্পেসে আরও প্যাকেট পড়ার অর্থ); অ্যাপ্লিকেশনটি কতবার সকেটটি পড়ে তা দেখুন (এটি কী ডেডিকেটেড থ্রেড ব্যবহার করতে পারে, স্কেলিবিলিটি সম্পর্কিত কোনও জ্ঞাত সমস্যা / ওয়ার্কআরাউন্ড রয়েছে)।

এনআইসি ফ্রেম বাফার বাড়ান ( ethtoolকমান্ডটি ব্যবহার করে - --set-ringইত্যাদি যুক্তিগুলি দেখুন)।

'রিভাইড সাইড স্কেলিং' দেখুন এবং কমপক্ষে ব্যবহার করুন যে ট্র্যাডিতে পড়ার জন্য অনেকে থ্রেড পান।

আমি অবাক হই যে tcpdump কিছু দুর্দান্ত কাজ করছে যেমন প্যাকেটের রিং বাফারগুলির জন্য কার্নেল সমর্থন ব্যবহার করা । এটি আপনি যে আচরণটি দেখছেন তা ব্যাখ্যা করতে সহায়তা করবে।


যেহেতু এটি একটি জেন ​​পরিবেশ, আপনার সম্ভবত জেন হোস্টে এটি করা উচিত (কমপক্ষে কিছু)।
ক্যামেরন কের

এটি এমন কিছু যা আমি আগে ভাবিনি, খুব আকর্ষণীয় জিনিস, ধন্যবাদ! জেন হোস্টের অ্যাক্সেস পাওয়ার পরে আমি এটি চেষ্টা করব এবং কীভাবে যায় তা আপনাকে জানাব।
রুবেন হোমস

2

আপনি কোন ক্ষমতার গভর্নর ব্যবহার করছেন? আমি "অনডেম্যান্ড" বা "রক্ষণশীল" গভর্নরের সাথে একই রকম আচরণ দেখেছি।

"পারফরম্যান্স" গভর্নর ব্যবহার করার চেষ্টা করুন এবং সার্ভার BIOS- এ কোনও পাওয়ার সাশ্রয়কারী বৈশিষ্ট্য অক্ষম করতে।

এটি কিছু পরিবর্তন করে?


আমি কোন পাওয়ার গভর্নর ব্যবহার করছি তা খুঁজে পেতে আমার সমস্যা হচ্ছে। আমি দৌড়ে চেষ্টা করেছি cpufreq-infoতবে একটি বার্তা পেয়েছি no or unknown cpufreq driver is active on this CPUcpupower frequency-infoএটি ব্যবহার করার সময়ও ফিরে আসে no or unknown cpufreq driver is active on this CPU। যদিও আমি এই মুহুর্তে এটি নিশ্চিত করতে পারছি না, ভিএম প্রস্তুতকারকের ওয়েবসাইট আমাকে বিশ্বাস করতে পরিচালিত করে যে এটি "পারফরম্যান্স" মোডে চলেছে যেহেতু আমার একটি ইন্টেল সিপিইউ আছে ..
রুবেন হোমস

আপনি কি নিম্নলিখিত কমান্ডগুলির আউটপুট প্রদর্শন করতে পারেন? 1) cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor2) cat /proc/cpuinfo3)lsmod | grep cpu
shodanshok


1

আরেকটি উপায় ip_conntarckমডিউল, আপনি কি নিশ্চিত যে আপনার লিনাক্স-বাক্স নতুন সংযোগ গ্রহণ করতে পারে? মাধ্যমে পরীক্ষা:

root@debian:/home/mohsen# sysctl net.ipv4.netfilter.ip_conntrack_max
net.ipv4.netfilter.ip_conntrack_max = 65536
root@debian:/home/mohsen# sysctl  net.ipv4.netfilter.ip_conntrack_count
net.ipv4.netfilter.ip_conntrack_count = 29

আপনাকে পরীক্ষা করতে হবে

net.ipv4.netfilter.ip_conntrack_max >  net.ipv4.netfilter.ip_conntrack_count

যদি সর্বোচ্চ == গণনা হয় তবে আপনার সর্বাধিক সংযোগ পূর্ণ এবং আপনার লিনাক্স-বাক্স নতুন সংযোগ গ্রহণ করতে পারে না।
আপনার কাছে ip_conntrack না থাকলে আপনি এর মাধ্যমে সহজে লোড করতে পারেনmodprobe ip_conntrack


2
এবং যদি এটি হয়, তবে আপনার এটির জন্য সংযোগ ট্র্যাকিং রোধ করতে 'কাঁচা' টেবিলের নটরাক লক্ষ্য লক্ষ্য করা উচিত। আমি সম্প্রতি একটি ব্যস্ত ডিএনএস সার্ভারের জন্য এটি করেছি এবং এটি আইপিটিবেলগুলিকে বাধা হয়ে যাওয়ার কারণে এবং ডিএনএস রেজোলিউশন সময়সীমা তৈরির কারণ থেকে সরিয়ে নিয়েছে।
ক্যামেরন কের

এবং আইপিটিবেলগুলি ইউডিপি ডিএনএসের জন্য কোনও সংযোগ ট্র্যাকিং না করার জন্য আমি কীভাবে নোট্রাক বিধি ব্যবহার করেছি তার একটি উদাহরণ এখানে। বিভ্রান্ত-it.blogspot.co.nz/2015/05/…
ক্যামেরন কের

1

আমি সন্দেহ করি যে প্রাপ্তি পক্ষটি প্যাকেটের হারটি পরিচালনা করতে কেবল সক্ষম নয় এবং কেন এটি এখানে:

  1. ক্লায়েন্টে tcpdump ব্যবহার করে ফেলে দেওয়া প্যাকেটগুলি হ্রাস করে: tcpdump ক্লায়েন্টকে ধীর করে দিচ্ছে এবং তাই সার্ভারটি অনেক কম প্যাকারের হার দেখছে যা এটি এখনও আংশিকভাবে পরিচালনা করতে পারে। আপনার ক্লায়েন্ট এবং সার্ভার উভয়ই আরএক্স / টিএক্স প্যাকেট কাউন্টার পরীক্ষা করে এই অনুমানটি নিশ্চিত করতে সক্ষম হওয়া উচিত

  2. আপনি উল্লেখ করেছেন যে আপনি ইউডিপি বাফার গ্রহণ / প্রেরণের আকার বাড়িয়েছেন, আপনি কীভাবে বিশদটি জানাতে পারেন? এটি গুরুত্বপূর্ণ যে সার্ভারে আপনি rmem_max এবং rmem_default উভয়ই পরিবর্তন করেন , উদাহরণস্বরূপ: sysctl -w net.core.rmem_max=524287 sysctl -w net.core.wmem_max=524287 sysctl -w net.core.rmem_default=524287 sysctl -w net.core.wmem_default=524287

আপনার সেটিংস পরীক্ষা করা হচ্ছে

স্ট্যাটসডিড এবং নোড অ্যাপ্লিকেশনটি বন্ধ করুন, তারপরে সিস্টেমগুলি নিষ্ক্রিয়ভাবে নেটওয়াল / কার্নেল পরিচালনা করতে পারে এমন প্যাকেট হারটি পরীক্ষা করতে আইপিএফ ব্যবহার করুন । আপনি যদি 40 ই প্যাকেট / গুলি আইপিআরফ দিয়ে স্ট্রিম করতে পারেন তবে স্ট্যাটসডি দিয়ে না পারেন তবে স্ট্যাটাসডি টিউনিংয়ের জন্য আপনার প্রচেষ্টা মনোনিবেশ করা উচিত।

অন্যান্য টিউনেবল

নেট.core.netdev_max_backlog টিউন করতেও মনে রাখবেন : কার্নেলের প্রক্রিয়াজাতকরণের চেয়ে কোনও নির্দিষ্ট ইন্টারফেস প্যাকেট দ্রুত পেলে সর্বাধিক সংখ্যক প্যাকেট সারি করার অনুমতি দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.