লিনাক্সে, আমি কীভাবে বলতে পারি যে কতগুলি সাময়িক বন্দর উপলব্ধ রয়েছে?


17

লিনাক্সে কয়টি ক্ষুদ্রতর বন্দর উপলব্ধ রয়েছে তা যাচাই করার জন্য কি কোনও পদ্ধতি আছে? সাময়িক বন্দর বন্ধ হয়ে যাওয়ার ফলে আমি মাঝে মধ্যে "ইতিমধ্যে ব্যবহৃত ঠিকানা" ত্রুটিগুলি দেখতে পাচ্ছি। একটি মেশিন রিবুট এটি সমাধান করবে তবে এটি হওয়ার আগে এটি ধরা ভাল।


আপনি যদি এর মতো ত্রুটিগুলি আঘাত করে থাকেন তবে আমি প্রস্তাব দেব যে হয় আপনি কোনও কাজের জন্য সঠিক সফ্টওয়্যার বা আর্কিটেকচার ব্যবহার না করে সিস্টেমটিকে গালি দিচ্ছেন, বা আপনার সফ্টওয়্যারটি খারাপ ব্যবহার করছে বা ভুল কনফিগার করেছে। সম্ভবত আপনার আবেদনের জন্য আপনার সময়সীমা দীর্ঘ হয়েছে বা কোনও কিছু ব্যবহার না করেই সংযোগগুলি খোলা রাখছে?
কালেব

1
এমন অনেকগুলি বৈধ অ্যাপ্লিকেশন রয়েছে যার জন্য ওএস ডিফল্টের বাইরে অতিরিক্ত ক্ষুদ্রতর পোর্ট প্রয়োজন।
গ্রেগবি

উত্তর:


26

এফার্মাল পোর্ট পরিসরটি নির্দিষ্ট করা আছে /proc/sys/net/ipv4/ip_local_port_range। আপনি সম্ভবত এটি 16 কে থেকে 64 কে পর্যন্ত চালাতে প্রসারিত করতে পারেন।

আপনি ব্যবহার করে মুক্ত সংযোগের সংখ্যা দেখতে পাবেন netstat -an। আপনি প্রচুর সংযোগ খোলার এবং বন্ধ করতে থাকলে সকেটগুলি TIME_WAIT অবস্থায় আটকে যেতে পারে। কিছু জায়গায় এটি অপরিহার্য, তবে আপনার যদি সংযোগের পুল প্রয়োজন হয় তা বিবেচনা করার প্রয়োজন হতে পারে যদি এটি হয়।

যদি TIME_WAIT সমস্যা হয় তবে আপনি সংযোগ টার্নওভার দ্রুত করতে net.ipv4.tcp_tw_reuse/ সেট করতে পারেন net.ipv4.tcp_tw_recycle


+1, এই লোকটিকে সঠিক বিশদ দেওয়ার জন্য সময় দেওয়ার জন্য ধন্যবাদ।
কালেব

আমাদের 32800 থেকে 61000 এর ব্যাপ্তি রয়েছে We আমরা কেবল দেখতে পেয়েছি যে এগুলি একবার ব্যবহার করা গেলে ওএস আবার সেগুলি ব্যবহার করবে না। এটি প্রত্যাশিত আচরণ, তবে আমি আশা করব যে ওএসটি সর্বশেষ উপলব্ধ বন্দরে পৌঁছে আবার শুরুতে আবার শুরু হবে। যদিও এটি ঘটবে বলে মনে হচ্ছে না। এছাড়াও, কেবল লক্ষণীয়, এটি কোনও বিশাল নিয়মিত ঘটনা নয়। এটি মাঝে মাঝে হয় তবে আমাদের কাছে প্রচুর সার্ভার রয়েছে।
জেএমসি


1
আরএফসি /proc/sys/net/ipv4/ip_local_port_range 63৩৩৫ মেনে চলার জন্য 49152-65535 এর উপসেট হওয়া দরকার। সুতরাং সীমার নীচের প্রান্তটি 49152 এর চেয়ে কম কিছুতে হ্রাস করা একটি নির্দিষ্ট ঝুঁকিতে আসে।
ক্যাস্পার্ড

আপনি মরিয়া হয়ে থাকেন এবং আপনি ঠিক কী করছেন তা জেনেও নেট নেট.আইপিভি ৪.টিসিপি_টিউইসিরিয়াল এবং নেট.ipv4.tcp_tw_reuse ব্যবহার করবেন না। আপনি আপনার পরিষেবাটি সম্ভাব্য চূড়ান্ত ইস্যুতে প্রকাশ করছেন।
কিউই

3

মনে রাখবেন যে এই সীমাটি অনন্য (উত্স আইপি, পিয়ার আইপি, পিয়ার পোর্ট) টিপল প্রতি প্রযোজ্য। অতএব আপনাকে এই প্রতিটি টিউপলসের netstat/ ssদ্বারা আউটপুট গোষ্ঠীবদ্ধ করতে হবে এবং প্রতিটি গ্রুপ সংযোগের সীমাতে কতটা কাছাকাছি রয়েছে তা পরীক্ষা করতে হবে।

এই পোস্টটি আপনাকে আরও বিস্তারিতভাবে এই গ্রুপিংটি কীভাবে করতে পারে তা ব্যাখ্যা করে। রুবিতে প্রতিটি গ্রুপ কতটা সীমাবদ্ধ রয়েছে তা যাচাই করতে আপনি ssআউটপুট প্রক্রিয়া করতে পারেন:

#!/usr/bin/ruby

first_port, last_port = IO.read('/proc/sys/net/ipv4/ip_local_port_range').split.map(&:to_i)
ephemeral_port_max = last_port - first_port + 1
ephemeral_port_warning = ephemeral_port_max / 3 * 2

conns = `ss --numeric --tcp state connected "( sport >= :#{first_port} and sport <= :#{last_port} )"`

groups = Hash.new(0)
conns.lines.each do |conn|
  state, recvq, sendq, local, peer = conn.split
  local_ip, local_port = local.split(':')
  group = [local_ip, peer]
  groups[group] += 1
end

groups_requiring_warning =
  groups.select { |k, v| v > ephemeral_port_warning }
  .to_a
  .sort_by { |v1, v2| v1[1] <=> v2[1] } # Sort groups in descending order of number of connections

groups_requiring_warning.each do |group, used_port_count|
  puts "Connections from #{group[0]} to #{group[1]} "\
    "have used #{used_port_count} ephemeral ports out of #{ephemeral_port_max} max"\
    "(#{((used_port_count.to_f / ephemeral_port_max) * 100).round(2)}% used)"
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.