সম্প্রতি আমাদের একটি অ্যাপাচি সার্ভার রয়েছে যা এসওয়াইএন বন্যার কারণে খুব ধীরে ধীরে সাড়া দিচ্ছিল। এর জন্য কাজটি ছিল tcp_syncookies ( net.ipv4.tcp_syncookies=1 in /etc/sysctl.conf
) সক্ষম করা ।
আপনি যদি আরও পটভূমি চান তবে আমি এই সম্পর্কে এখানে একটি প্রশ্ন পোস্ট করেছি ।
সিঙ্কুকি সক্ষম করার পরে আমরা প্রায় 60 সেকেন্ডে নীচের বার্তাটি / ভার / লগ / বার্তাগুলিতে দেখতে শুরু করি:
[84440.731929] possible SYN flooding on port 80. Sending cookies.
Vinko Vrsalovic আমাকে অবহিত যে, এই উপায়ে SYN ব্যাকলগ পূর্ণ হচ্ছে, তাই আমি 4096. করার tcp_max_syn_backlog উত্থাপিত কিছু পয়েন্ট (5 ডিফল্ট থেকে নেমে) আমিও 3 tcp_synack_retries নত এ জারি করে sysctl -w net.ipv4.tcp_synack_retries=3
। এটি করার পরে, বার্তাটি প্রায় 60 এবং 180 সেকেন্ডের মধ্যে ব্যবধানের ব্যবধান সহ ফ্রিকোয়েন্সিটি হ্রাস পেয়েছিল।
পরবর্তী আমি জারি করলাম sysctl -w net.ipv4.tcp_max_syn_backlog=65536
, তবে লগের মধ্যে এখনও বার্তাটি পাচ্ছি।
এই সমস্তটি জুড়ে আমি SYN_RECV রাজ্যে সংযোগের সংখ্যাটি দেখছি (চালিয়ে watch --interval=5 'netstat -tuna |grep "SYN_RECV"|wc -l'
) এবং এটি কখনই প্রায় 240 এর চেয়ে বেশি যায় না, ব্যাকলগের আকারের চেয়ে অনেক কম। তবুও আমার কাছে একটি রেড হ্যাট সার্ভার রয়েছে যা প্রায় 512 ঘোরাফেরা করে (এই সার্ভারটির সীমা 1024 এর ডিফল্ট)।
অন্য কোনও টিসিপি সেটিংস আছে যা ব্যাকলোগের আকার সীমাবদ্ধ করবে বা আমি ভুল গাছটি ছাঁটাই করছি? SYN_RECV সংযোগের সংখ্যাটি কি ব্যাকলগের netstat -tuna
আকারের সাথে সম্পর্কিত হতে হবে?
হালনাগাদ
সর্বোত্তম হিসাবে আমি বলতে পারি যে আমি এখানে বৈধ সংযোগগুলি নিয়ে কাজ করছি, netstat -tuna|wc -l
প্রায় 5000 এর কাছাকাছি ঘুরে বেড়াচ্ছি research আমি আজ এটি নিয়ে গবেষণা করে চলেছি এবং গত পোস্ট.এফএম কর্মচারীর কাছ থেকে এই পোস্টটি পেয়েছি যা বরং দরকারী।
আমি এটিও আবিষ্কার করেছি যে সিঙ্কুকি সক্ষম করা থাকলে tcp_max_syn_backlog এর কোনও প্রভাব নেই ( এই লিঙ্ক অনুসারে )
সুতরাং পরবর্তী পদক্ষেপ হিসাবে আমি নিম্নলিখিতটি সিস্টেস্টল কনফনে সেট করে রেখেছি:
net.ipv4.tcp_syn_retries = 3
# default=5
net.ipv4.tcp_synack_retries = 3
# default=5
net.ipv4.tcp_max_syn_backlog = 65536
# default=1024
net.core.wmem_max = 8388608
# default=124928
net.core.rmem_max = 8388608
# default=131071
net.core.somaxconn = 512
# default = 128
net.core.optmem_max = 81920
# default = 20480
আমি তখন আমার প্রতিক্রিয়া সময় পরীক্ষা সেটআপ করেছি, দৌড়েছি sysctl -p
এবং এর মাধ্যমে সিঙ্কুকিকে অক্ষম করেছি sysctl -w net.ipv4.tcp_syncookies=0
।
এটি করার পরে SYN_RECV রাজ্যে সংযোগের সংখ্যা এখনও 220-250 এর কাছাকাছি থেকে যায় তবে সংযোগগুলি আবার বিলম্ব হতে শুরু করে। একবার আমি এই বিলম্বগুলি লক্ষ্য করেছিলাম আমি পুনরায় সক্ষম সিঙ্ককিগুলি এবং বিলম্বগুলি বন্ধ হয়ে যায়।
আমি বিশ্বাস করি যে আমি যা দেখছিলাম তা প্রাথমিক অবস্থা থেকে এখনও একটি উন্নতি ছিল, তবে কিছু অনুরোধগুলি এখনও বিলম্বিত হয়েছিল যা সিঙ্কুকি সক্ষম করার চেয়ে আরও খারাপ। সুতরাং দেখে মনে হচ্ছে আমি লোড সামলাতে অনলাইনে আরও কিছু সার্ভার না পাওয়া পর্যন্ত আমি তাদের সাথে সক্ষম হয়েছি enabled তারপরেও, আমি নিশ্চিত নই যে সার্ভারের বাফারগুলি পূর্ণ হয়ে গেলে তারা কেবলমাত্র প্রেরণ করা হয়েছে (স্পষ্টতই) এগুলি আবার নিষ্ক্রিয় করার জন্য আমি একটি বৈধ কারণ দেখছি।
তবে সাইন ব্যাকলগটি কেবলমাত্র SYN_RECV অবস্থায় 250 ডলার সংযোগের সাথে পূর্ণ বলে মনে হচ্ছে না! এটি কি সম্ভব যে এসওয়াইএন বন্যার বার্তাটি একটি লাল রঙের উত্তোলক এবং এটি সিএন_ব্লগ ছাড়াও অন্য কিছু যা পূর্ণ করছে?
কারও কাছে যদি অন্য কোনও টিউনিং বিকল্প থাকে তবে আমি এখনও চেষ্টা করি নি আমি তাদের চেষ্টা করে দেখতে আরও বেশি খুশি হব, তবে সিন্ন_ব্লগ সেটিংটি কোনও কারণে সঠিকভাবে প্রয়োগ হচ্ছে না কিনা তা নিয়ে আমি ভাবতে শুরু করি।