একটি সকেট লিনাক্সের অধীনে কত স্মৃতি গ্রহণ করে তা নির্ধারণের সূত্রটি কী?


11

আমি কিছু দক্ষতা পরিকল্পনা করছি এবং আমি ভাবছিলাম যে এমন কোনও সূত্র আছে যা আমি ভবিষ্যদ্বাণী করতে ব্যবহার করতে পারি (মেমরির দিক থেকে) আমি আমার সার্ভারে কত টিসিপি সংযোগগুলি পরিচালনা করতে পারি। এই মুহুর্তে, আমি কেবল মেমরির প্রয়োজনীয়তা নিয়েই উদ্বিগ্ন।

সূত্রটিতে প্রদর্শিত হবে এমন কিছু ভেরিয়েবলগুলি হ'ল:

  • sysctl এর net.ipv4.tcp_wmem(মিনিট বা ডিফল্ট মান)
  • sysctl এর net.ipv4.tcp_rmem(মিনিট বা ডিফল্ট মান)
  • মোজা, সক_কমোন, প্রোটো এবং অন্যান্য প্রতি সকেট ডেটা স্ট্রাকচারের আকার।

আমি নিশ্চিত না যে tcp_wmem এবং tcp_rmem আসলে কতটুকু বরাদ্দ করা হয় এবং কখন সেই মেমরি বরাদ্দ করা হয়। সকেট তৈরির সময়? চাহিদা সাপেক্ষে?

উত্তর:


2

আপনি যদি সোর্স কোডটি সংশোধন করতে পারেন তবে আরএসএস পরিমাপ করতে রুস ডেটা ব্যবহার করুন এবং পরিমাপের সময় কতটি টিসিপি সংযোগ চালু রয়েছে তা রেকর্ড করুন।

যদি সোর্স কোডটি পরিবর্তন করা যায় না, তবে শীর্ষ বা পিএস হিসাবে উল্লিখিত নেটওয়ার্ক অ্যাপ্লিকেশনটির আরএসএস ব্যবহার করুন এবং পরিমাপের সময় নেটওয়ার্ক সংযোগের সংখ্যা পান lsof -i

আপনার অ্যাপ্লিকেশন পিক লোডের মধ্য দিয়ে চলে যাওয়ার সময় প্রতি মিনিটে এই ডেটা সংগ্রহ করুন এবং সেই ডেটা থেকে আপনি এমন একটি সূত্র নিয়ে আসতে পারেন যা র‌্যাম ব্যবহারের সাথে সংযোগের সংখ্যা সম্পর্কিত করে।

অবশ্যই আরও অনেকগুলি জিনিস রয়েছে যা আপনি পরিমাপ করতে পারেন, বিশেষত আপনি কার্নেল র‍্যামের ব্যবহারটি পরিমাপ করতে চাইতে পারেন, যদিও টিসিপি ডেটা স্ট্রাকচারগুলি আগে থেকেই অনুমানযোগ্য এবং গণনীয়। যে কোনও ক্ষেত্রে, টিসিপি টিউনিং সম্পর্কিত আরও তথ্যের জন্য এই প্রশ্নটি দেখুন /server/10852/ কি-limits-tx-maximum-number-of-connections-on- a- linux-server নেটওয়ার্ক স্ট্যাকের মধ্যে কী ঘটছে তার একটি পরিষ্কার ভিউ কীভাবে পাবেন।


পরিমাপকে জোর দেওয়ার জন্য এবং লিঙ্কগুলিতে আমাকে ইশারা করার জন্য ধন্যবাদ যা এই মেট্রিকগুলি কীভাবে সংগ্রহ করবেন তা দেখায়!
টিম স্টুয়ার্ট

8

tcp_mem আরও গুরুত্বপূর্ণ কারণ এটি মেমরির ব্যবহারের ক্ষেত্রে টিসিপি স্ট্যাকটি কী আচরণ করা উচিত তা নির্ধারণ করে। আইএমও প্রেরণ এবং গ্রহণ বাফারটি tcp_mem এর একাধিক হওয়া উচিত। বাফার গ্রহণের জন্য সূত্রের লিঙ্কটি এখানে: http://www.acc.umu.se/~maswan/linux-netperf.txt । সংক্ষেপে:

ওভারহেডটি হ'ল: উইন্ডো / 2 ^ টিসিপি_এডিভি_উইন_স্কেল (টিসিপি_এডিভি_উইন_স্কেল ডিফল্ট 2) সুতরাং রিসিভ উইন্ডোটির জন্য লিনাক্স ডিফল্ট পরামিতিগুলির জন্য (tcp_rmem): 87380 - (87380/2) 2) = 65536 সর্বাধিক পারফরম্যান্সটি এখানে শেষ হয়: 65536 / 0.150 = 436906 বাইট / গুলি বা প্রায় 400 কেবিটায় / এস, যা আজ সত্যিই ধীর। বর্ধিত ডিফল্ট আকারের সাথে: (873800 - 873800/2 ^ 2) /0.150 = 4369000 বাইট / গুলি, বা প্রায় 4Mbytes / s, যা একটি আধুনিক নেটওয়ার্কের জন্য অনুরণনযোগ্য। এবং নোট করুন যে এটি ডিফল্ট, প্রেরক যদি একটি বৃহত উইন্ডো আকারের সাথে কনফিগার করা থাকে তবে এটি আনন্দের সাথে 10 বার পর্যন্ত এটি স্কেল করা হবে (8738000 * 0.75 / 0.150 = ~ 40Mbytes / s), আধুনিক নেটওয়ার্কের জন্য বেশ ভাল।

Tcp_mem সম্পর্কে নিবন্ধটি যা বলেছে তা এখানে:

আপনি যা অপসারণ করবেন এটি টিসিপি পারফরম্যান্সের একটি কৃত্রিম সীমা, সেই সীমা ছাড়াই আপনি উপলভ্য শেষ থেকে শেষ ব্যান্ডউইথ এবং ক্ষতির দ্বারা আবদ্ধ। সুতরাং আপনি আপনার আপলিংকটিকে আরও কার্যকরভাবে স্যাচুরেট করে শেষ করতে পারেন, তবে টিসিপি এটি পরিচালনা করতে ভাল।

আইএমও একটি বড় মাঝারি tcp_mem মান কম সুরক্ষার ক্ষতি হওয়ায় সংযোগ গতি বাড়ায় এবং মেমোরি ইউজুয়েজকে কিছুটা বাড়ায়।

আপনি এর সাথে নেটওয়ার্ক স্ট্যাকটি নিরীক্ষণ করতে পারেন:

grep skbuff /proc/slabinfo

1
তথ্যপূর্ণ প্রতিক্রিয়া জন্য ধন্যবাদ। এটি নেটওয়ার্কিং সম্পর্কে আমার কতটুকু শিখতে হবে তা দেখায়।
টিম স্টুয়ার্ট

1

ডেভিড জিজ্ঞাসা করা প্রশ্নটির খুব ভাল উত্তর সরবরাহ করেছে, তবে আপনি যদি একচেটিয়াভাবে LFN ব্যবহার করেন না , তবে এমনকি ইভেন্ট-ভিত্তিক সার্ভারেও, টিসিপি বাফারগুলি প্রতি সংযোগের পদচিহ্নের সামান্য অংশ হতে পারে।

ক্ষমতা পরিকল্পনার জন্য সার্ভারটি পরীক্ষা করার এবং লোড দ্বারা মেমরির ব্যবহারের রিগ্রেশন গণনা করার বিকল্প নেই।


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