প্রশ্ন লিনাক্স সার্ভারে সর্বাধিক সংযোগ সীমাবদ্ধ কি?


কোন কার্নেল প্যারামিটার বা অন্যান্য সেটিংস সর্বোচ্চ সংখ্যক টিসিপি সকেটগুলিকে নিয়ন্ত্রণ করে যা একটি লিনাক্স সার্ভারে খোলা যেতে পারে? আরো সংযোগ অনুমতি বাণিজ্য tradeoffs কি কি?

আমি অপেরা সার্ভার পরীক্ষা লোড যখন লক্ষ্য AB এটি সার্ভারে খোলা সংযোগগুলি সর্বাধিক সহজ করে তুলতে বেশ সহজ। যদি আপনি ab এর -k বিকল্পটি ছেড়ে দেন তবে এটি সংযোগ পুনঃব্যবহারের অনুমতি দেয় এবং এটি 10,000 এরও বেশি অনুরোধ পাঠায় তবে আপ্যাচটি প্রথম 11,000 বা তাই অনুরোধগুলি সরবরাহ করে এবং 60 সেকেন্ডের জন্য স্থগিত করে। নেটস্ট্যাট আউটপুট একটি চেহারা TIME_WAIT রাষ্ট্রে 11,000 সংযোগ দেখায়। দৃশ্যত, এই স্বাভাবিক। ক্লায়েন্ট তাদের জন্য সম্পন্ন করা হয় এমনকি পরে সংযোগ 60 সেকেন্ড ডিফল্ট খোলা রাখা হয় টিসিপি নির্ভরযোগ্যতার কারণ

মনে হচ্ছে এটি একটি সার্ভারের একটি সহজ উপায় হবে এবং আমি এটির জন্য স্বাভাবিক টিউনিং এবং সতর্কতাগুলি নিয়ে ভাবছি।

এখানে আমার পরীক্ষা আউটপুট:

# ab -c 5 -n 50000 http://localhost/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 5000 requests
Completed 10000 requests
apr_poll: The timeout specified has expired (70007)
Total of 11655 requests completed

এখানে netstat কমান্ড আমি পরীক্ষার সময় চালানো:

 # netstat --inet -p | grep "localhost:www" | sed -e 's/ \+/ /g' | cut -d' ' -f 1-4,6-7 | sort | uniq -c 
  11651 tcp 0 0 localhost:www TIME_WAIT -
      1 tcp 0 1 localhost:44423 SYN_SENT 7831/ab
      1 tcp 0 1 localhost:44424 SYN_SENT 7831/ab
      1 tcp 0 1 localhost:44425 SYN_SENT 7831/ab
      1 tcp 0 1 localhost:44426 SYN_SENT 7831/ab
      1 tcp 0 1 localhost:44428 SYN_SENT 7831/ab

85
2018-05-21 16:18


উত্স




উত্তর:


আমি অবশেষে সংযোগের সংখ্যার সীমিত ছিল এমন সেটিংটি খুঁজে পেয়েছি: net.ipv4.netfilter.ip_conntrack_max। এটি 11,776 সেট করা হয়েছিল এবং আমি যা সেট করেছি তা হল অপেক্ষা করার আগে আমার পরীক্ষায় পরিবেশন করা অনুরোধগুলির সংখ্যা tcp_fin_timeout আরো সংযোগের জন্য উপলব্ধ সেকেন্ড। দ্য conntrack কার্নেলটি সংযোগের অবস্থাটি ট্র্যাক করার জন্য টেবিলটি ব্যবহার করে, যাতে একবার এটি পূর্ণ হয়, কার্নেল ড্রপ প্যাকেটগুলি শুরু করে এবং লগে এটি মুদ্রণ করে:

Jun  2 20:39:14 XXXX-XXX kernel: ip_conntrack: table full, dropping packet.

পরবর্তী ধাপে কার্নেলগুলি যে সকল সংযোগগুলি পুনঃসাইকেল করতে যাচ্ছে তা পেয়েছে TIME_WAIT প্যাকেট ড্রপ চেয়ে রাষ্ট্র। আমি বাঁক দ্বারা হয় ঘটতে পেতে পারে tcp_tw_recycle বা বৃদ্ধি ip_conntrack_max দ্বারা সংযোগের জন্য উপলব্ধ স্থানীয় পোর্ট সংখ্যা তুলনায় বড় হতে ip_local_port_range। আমি একবার কার্নেল স্থানীয় পোর্ট আউট হয় একবার এটি পুনর্ব্যবহারযোগ্য সংযোগ শুরু হয়। এটি আরও মেমরি ট্র্যাকিং সংযোগ ব্যবহার করে কিন্তু এটি চালু করার চেয়ে ভাল সমাধান মত মনে হচ্ছে tcp_tw_recycle যেহেতু ডক্সগুলি বোঝায় যে এটি বিপজ্জনক।

এই কনফিগারেশনের সাথে আমি সারা দিন ধরে চলতে পারি এবং সংযোগগুলি শেষ করতে পারি না:

net.ipv4.netfilter.ip_conntrack_max = 32768
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_orphan_retries = 1
net.ipv4.tcp_fin_timeout = 25
net.ipv4.tcp_max_orphans = 8192
net.ipv4.ip_local_port_range = 32768    61000

দ্য tcp_max_orphans সেটিং আমার পরীক্ষায় কোন প্রভাব ছিল না এবং আমি কেন জানি না। আমি এটা সংযোগ বন্ধ হবে মনে হবে TIME_WAIT একবার তাদের মধ্যে 819২ জন ছিল কিন্তু তারা আমার জন্য তা করেনি।


62
2018-06-03 16:02



কোথায় আমরা এই প্যারামিটার কনফিগার করবেন? - Codevalley
@Codevalley এটি সিস্টেম-নির্ভরশীল হতে পারে তবে উবুন্টু সার্ভারে তারা /etc/sysctl.conf এ যেতে পারে - Ben Williams


আপনি এই বিষয়ে / proc ফাইল ফাইল সিস্টেমটি কী দিতে চান তা আপনি দেখতে চান।

সেই শেষ পৃষ্ঠায়, আপনার আগ্রহের জন্য নিম্নলিখিতগুলি খুঁজে পেতে পারেন:

  • / Proc / sys / নেট / IPv4 / tcp_max_orphans, যা সিস্টেমের দ্বারা সর্বাধিক সকেট নিয়ন্ত্রণ করে না কিছু সংযুক্ত। এই উত্থাপন অ-swappable মেমরির 64kbyte যতটা গ্রাস করতে পারেন অনাথ সকেট প্রতি
  • / Proc / sys / নেট / IPv4 / tcp_orphan_retries, একটি সকেট অনাথ এবং বন্ধ করা হয় আগে retries পরিমাণ নিয়ন্ত্রণ করে যা। ওয়েব সার্ভার সম্পর্কে যে পৃষ্ঠায় আপনার সরাসরি আগ্রহ রয়েছে সে বিষয়ে একটি নির্দিষ্ট নোট রয়েছে ...

23
2018-05-21 18:15



tcp_max_orphans আকর্ষণীয় কিন্তু মনে হচ্ছে এটি কাজ করছে না। যখন আমি আমার পরীক্ষার সময় অনাথ সকেটগুলি পরিমাপ করার চেষ্টা করি তখন আমি তাদের মধ্যে 11,651 টি দেখি এবং tcp_max_orphans 8,092। # নেটস্ট্যাট --inet -p | grep "স্থানীয় হোস্ট: www" | sed-e এর / \ + / / g '| কাট-ডি '-ফ 1-4,6-7 সাজান | uniq -c 11651 টিসিপি 0 স্থানীয়হস্ত: www TIME_WAIT - - Ben Williams
Tcp_orphan_retries সেটিংটি দেখুন - ধারণা হচ্ছে, সকেটগুলি দ্রুত "কুলড" হয় ... - Avery Payne
@ জাউদার হোয়ের পরামর্শ + tcp_orphan_retries আপনার পরিস্থিতির জন্য সম্ভাব্য জয় হিসাবে শব্দ। - Avery Payne


আমি সরাসরি সেট করতে একটি tunable আছে মনে হয় না। এটি টিসিপি / আইপি টিউনিং বিভাগের অধীনে আসে। আপনি কি সুর করতে পারেন তা খুঁজে বের করতে 'ম্যান 7 টিসিপি' চেষ্টা করুন। Sysctl ('man 8 sysctl') সেট করার জন্য ব্যবহার করা হয়। 'sysctl-aa | grep tcp 'আপনি যা সুরক্ষিত করতে পারেন তার বেশিরভাগই আপনাকে দেখাবে, তবে আমি নিশ্চিত নই যে এটি সবগুলি দেখাবে কিনা। এছাড়াও, যদি না এটি পরিবর্তিত হয়, টিসিপি / আইপি সকেট খুলুন ফাইল বর্ণনাকারীর মত চেহারা। সুতরাং এই এবং যে লিঙ্কের পরবর্তী অংশটি আপনি খুঁজছেন তা হতে পারে।


3
2018-05-21 17:31





Tcp_fin_timeout সেটিং হিসাবে নিম্নলিখিত সেটিং করার চেষ্টা করুন। এই আরো দ্রুত TIME_WAIT বন্ধ করা উচিত।

net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

2
2018-05-21 19:38



এখানে সাবধান! হার্ড উপায় অভিজ্ঞতা। "এটি লোড-ভারসাম্য এবং NATs সহ ফ্রেমগুলি হ্রাস করতে পারে, শুধুমাত্র এমন একটি সার্ভারের জন্য এটি ব্যবহার করুন যা কেবল আপনার স্থানীয় নেটওয়ার্কে যোগাযোগ করে।" - wiki.archlinux.org/index.php/Sysctl - Henk
@ হেনক আমি এটা অনুমান tcp_tw_recycle যে সম্ভাব্য বিপজ্জনক। tcp_tw_reuse নিরাপদ এবং আমি একই সাথে তাদের ব্যবহার করার কোনো কারণ দেখি না। - Vladislav Rastrusny


স্টক অ্যাপ্যাচ (1) শুধুমাত্র ২50 সমবায় সংযোগগুলি সমর্থন করার জন্য পূর্বনির্ধারিত ব্যবহার করতে ব্যবহৃত হয়েছিল - যদি আপনি আরো চেয়েছিলেন তবে আরো একযোগে সেশনের অনুমতি দেওয়ার জন্য একটি শিরোনাম ফাইল সংশোধন করতে হয়েছিল। Apache 2 এর সাথে এটি এখনও সত্য কিনা তা আমি জানি না।

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

আপনার কর্মীর সেটিংস এবং আপনার আপ্যাপের মধ্যে থাকা কোনও সময়সীমা থাকা সময়সীমার দিকে মনোযোগ দিন, আপনি একবার কতগুলি অতিরিক্ত চালক সার্ভার চালাচ্ছেন এবং এই অতিরিক্ত প্রক্রিয়াগুলি কত দ্রুত দ্রুত মারা যাচ্ছে।


2
2018-05-21 21:21





আপনি TIME_WAIT অবস্থানে ব্যয় করা সময়টি হ্রাস করতে পারেন (net.ipv4.tcp_fin_timeout সেট করুন)। আপনি Apache প্রতি YAWS বা nginx বা অনুরূপ কিছু প্রতিস্থাপন করতে পারে।

আরও সংযোগের ট্রেডঅফগুলি সাধারণত মেমরির ব্যবহার জড়িত থাকে, এবং যদি আপনার ফর্কিং প্রক্রিয়া থাকে, তবে আপনার CPU গুলিকে প্রচুর পরিমাণে প্রসেস করা হয়।


1
2018-05-21 16:26



tcp_fin_timeout টাইম-ওয়েট মেয়াদ শেষ করার জন্য নয়, যা কার্নেল পুনঃনির্মাণের বাইরে পরিবর্তনযোগ্য নয়, তবে FIN- এর জন্য যেমন নাম নির্দেশ করে। - Alexandr Kurilin


একক আইপি ঠিকানার উপর খোলা সকেটগুলি সম্পূর্ণ সংখ্যা 2 ^ 16 এবং টিসিপি / ইউডিপি দ্বারা নির্ধারিত হয়, কার্নেল নয়।


0
2018-05-30 16:42



না এটা না। আপনি আরও খুলতে পারেন, কারণ স্থানীয় পোর্ট যতক্ষণ দূরবর্তী ঠিকানাগুলি ভিন্ন তা হতে পারে না। তাছাড়া, সার্ভার প্রতি OP বলেছেন, এবং আপনি সার্ভার প্রতি> 1 ঠিকানা থাকতে পারে। - MarkR


অ্যাপাচি HTTP সার্ভার বেঞ্চমার্কিং টুল, AB, 2.4 সংস্করণে আছে সময়সীমা বিকল্প। আরো দেখুন ab (Apache Bench) ত্রুটি: apr_poll: নির্দিষ্ট সময়সীমার মেয়াদ শেষ হয়ে গেছে (70007) উইন্ডোজ

এই বিকল্পটি আপনার সমস্যার সমাধান করে।


0
2018-02-08 17:56