কিছুটা আলাদাভাবে হলেও, সংযোগের সর্বাধিক সংখ্যা ক্লায়েন্ট এবং সার্ভার উভয় পক্ষেই নির্দিষ্ট সীমা দ্বারা প্রভাবিত হয়।
ক্লায়েন্টের পক্ষে:
এফেরমাল পোর্টের পরিধি বাড়ান, এবং কমিয়ে দিনtcp_fin_timeout
ডিফল্ট মানগুলি খুঁজে পেতে:
sysctl net.ipv4.ip_local_port_range
sysctl net.ipv4.tcp_fin_timeout
এফেরমাল পোর্ট পরিসীমা একটি হোস্ট একটি নির্দিষ্ট আইপি ঠিকানা থেকে সর্বাধিক সংখ্যক আউটবাউন্ড সকেট তৈরি করতে পারে def fin_timeout
ন্যূনতম সময় এই সকেট থাকবে সংজ্ঞায়িত TIME_WAIT
রাজ্য (একবার ব্যবহার হওয়ার পর অব্যবহারযোগ্য)। সাধারণ সিস্টেমের ডিফল্টগুলি হ'ল:
net.ipv4.ip_local_port_range = 32768 61000
net.ipv4.tcp_fin_timeout = 60
এর মূল অর্থ হল আপনার সিস্টেমটি (61000 - 32768) / 60 = 470
প্রতি সেকেন্ডে সকেটের চেয়ে ধারাবাহিকভাবে গ্যারান্টি দিতে পারে না । আপনি যদি এতে সন্তুষ্ট না হন তবে আপনি এটি বাড়িয়ে শুরু করতে পারেন port_range
। পরিসীমা নির্ধারণ করা 15000 61000
আজকাল বেশ সাধারণ। আপনি আরও কমিয়ে প্রাপ্যতা বৃদ্ধি করতে পারেন fin_timeout
। ধরুন আপনি উভয়ই করেন, আপনার প্রতি সেকেন্ডে 1500 এর বেশি আউটবাউন্ড সংযোগগুলি আরও তাত্ক্ষণিকভাবে দেখা উচিত।
মান পরিবর্তন করতে :
sysctl net.ipv4.ip_local_port_range="15000 61000"
sysctl net.ipv4.tcp_fin_timeout=30
উপরেরগুলি প্রতি সেকেন্ডে আউটবাউন্ড সংযোগ তৈরির জন্য সিস্টেমের ক্ষমতাকে প্রভাবিতকারী কারণগুলি হিসাবে ব্যাখ্যা করা উচিত নয়। তবে এর পরিবর্তে এই উপাদানগুলি "ক্রিয়াকলাপ" এর বৃহত্তর সময়কালের জন্য একটি টেকসই উপায়ে সাম্প্রতিক সংযোগগুলি পরিচালনা করার সিস্টেমের ক্ষমতাকে প্রভাবিত করে।
জন্য একটি টিপিক্যাল লিনাক্স বক্স ডিফল্ট Sysctl মান tcp_tw_recycle
& tcp_tw_reuse
হবে
net.ipv4.tcp_tw_recycle=0
net.ipv4.tcp_tw_reuse=0
এগুলি "ব্যবহৃত" সকেট (ওয়েট স্টেটে) থেকে সংযোগের অনুমতি দেয় না এবং সকেটগুলিকে সম্পূর্ণ time_wait
চক্র স্থায়ী করতে বাধ্য করে । আমি সেট করার পরামর্শ দিচ্ছি:
sysctl net.ipv4.tcp_tw_recycle=1
sysctl net.ipv4.tcp_tw_reuse=1
এটি time_wait
রাজ্যে সকেটগুলির দ্রুত সাইক্লিং এবং সেগুলি পুনরায় ব্যবহারের অনুমতি দেয়। তবে আপনি এই পরিবর্তনটি করার আগে নিশ্চিত হয়ে নিন যে এই সকেটগুলির জন্য প্রয়োজনীয় অ্যাপ্লিকেশনটির জন্য আপনি যে প্রোটোকলগুলি ব্যবহার করবেন তা তার সাথে বিরোধ নয়। এর প্রভাবগুলি বোঝার জন্য ভিনসেন্ট বার্নাতের কাছ থেকে "টিসিপি টাইম-ওয়েটের সাথে মোকাবিলা" পোস্টটি অবশ্যই নিশ্চিত করুন । net.ipv4.tcp_tw_recycle
যেমন একই ন্যাট ডিভাইস পিছনে দুটি ভিন্ন কম্পিউটার থেকে সংযোগ হ্যান্ডেল করা হবে না বিকল্প পাবলিক ফেসিং সার্ভারের জন্য বেশ সমস্যাযুক্ত , যা কঠিন একটি সমস্যা সনাক্ত করতে এবং আপনি দান্ত দিয়া ফুটা করা অপেক্ষা করতে। নোট যে লিনাক্স 4.12 থেকে সরানোnet.ipv4.tcp_tw_recycle
হয়েছে ।
সার্ভার সাইড অন:net.core.somaxconn
মান একটি গুরুত্বপূর্ণ ভূমিকা আছে। এটি শ্রবণ সকেটে সারি সর্বাধিক সংখ্যক অনুরোধের সীমাবদ্ধ করে। আপনি যদি আপনার সার্ভার অ্যাপ্লিকেশনটির সক্ষমতা সম্পর্কে নিশ্চিত হন তবে এটি ডিফল্ট 128 থেকে 128 থেকে 1024 এর মতো কিছুতে ফাটিয়ে ফেলুন Now
sysctl net.core.somaxconn=1024
txqueuelen
আপনার ইথারনেট কার্ডের প্যারামিটারেও ভূমিকা রাখতে হবে। ডিফল্ট মানগুলি হ'ল 1000, সুতরাং আপনার সিস্টেম এটি পরিচালনা করতে পারলে 5000 বা আরও বেশি অবধি এগুলিকে ঘর্ষণ করুন।
ifconfig eth0 txqueuelen 5000
echo "/sbin/ifconfig eth0 txqueuelen 5000" >> /etc/rc.local
একইভাবে মান আচমকা net.core.netdev_max_backlog
এবং net.ipv4.tcp_max_syn_backlog
। তাদের ডিফল্ট মান যথাক্রমে 1000 এবং 1024।
sysctl net.core.netdev_max_backlog=2000
sysctl net.ipv4.tcp_max_syn_backlog=2048
এখন আপনার ক্লায়েন্ট এবং সার্ভারের উভয় অ্যাপ্লিকেশন শেলের মধ্যে এফডি উলিম্টগুলি বাড়িয়ে শুরু করতে ভুলবেন না।
উপরোক্ত প্রোগ্রামারগুলির দ্বারা ব্যবহৃত আরও একটি জনপ্রিয় কৌশল হ'ল টিসিপি রাইটিং কলগুলির সংখ্যা হ্রাস করা । আমার নিজের পছন্দটি হল একটি বাফার ব্যবহার করা যাতে আমি ক্লায়েন্টকে প্রেরণ করতে ইচ্ছুক ডেটাটি পুশ করি এবং তারপরে উপযুক্ত পয়েন্টগুলিতে আমি আসল সকেটে বাফার ডেটা লিখি। এই কৌশলটি আমাকে বড় ডেটা প্যাকেটগুলি ব্যবহার করতে, টুকরো টুকরো করতে হ্রাস করতে, ব্যবহারকারীর জমিতে এবং কার্নেল-স্তরে আমার সিপিইউ ব্যবহার হ্রাস করে।