এলএসফ-এর নন-সিপিইউ-নিবিড় বিকল্প?


12

আমরা একটি অ্যাপাচি ক্যাসান্দ্রা ক্লাস্টার পরিচালনা করি যেখানে প্রতিটি হোস্টের যে কোনও সময়ে কয়েক লক্ষ ফাইল খোলা থাকে।

আমরা পর্যায়ক্রমিক বিরতিতে খোলা ফাইলগুলির একটি গণনা পেতে এবং এই নম্বরটি গ্রাফাইটে ফিড করতে সক্ষম হতে চাই , তবে যখন আমরা এটির lsofঅধীনে চলে যাই তখন collectdএর মধ্যে সিপিইউর একটি প্রচুর পরিমাণ শেষ করতে এবং কয়েক মুহুর্তের জন্য শেষ হবে CP ।

আমি ভাবছি যে lsof সরবরাহ করে একই ডেটা পাওয়ার বিকল্প বা আরও বন্ধুত্বপূর্ণ উপায় আছে কি না, এমনকি সিএসইউতে খেয়াল হবে না এমনভাবে lsof চালানোর কোনও উপায় আছে কিনা? (যদিও আমি ধরে নিচ্ছি যে এই আধুনিক পদ্ধতিটি সম্ভবত এটি এখনকার তুলনায় পুরোপুরি বেশি হতে পারে ... আদর্শ নয়)।

সম্ভবত কার্নেলটি কোথাও কিছু পরিবর্তনশীল বজায় রেখেছে যাতে খোলা ফাইলগুলির সংখ্যা রয়েছে? ইচ্ছামত ভাবনা?

হালনাগাদ:

উত্তরের একটিতে জবাব দেওয়ার জন্য আমরা ইতিমধ্যে পতাকা -bএবং -nপতাকা ব্যবহার করছি । আমার সম্পূর্ণ কমান্ডটি যেমন এটির অধীনে চলছে তেমন collectd:

sudo lsof -b -n -w | stdbuf -i0 -o0 -e0 wc -l

উত্তর:


12

আপনার সম্ভবত সকেটের জন্য নেটওয়ার্ক ঠিকানাগুলি সমাধান করার দরকার নেই, তাই কমপক্ষে -nস্যুইচটি ব্যবহার করুন । তারপরে আপনি এটিকে ব্লকিং অপারেশনগুলি এড়িয়ে যেতেও চান -b

এই 2 টি প্রথম স্যুইচগুলি সত্যই এটি দ্রুততর করা উচিত।

এবং তারপরে -lইউডগুলি সমাধান করা এড়াতে। এবং -Lলিঙ্ক গণনা এড়ানোর জন্য। ইত্যাদি দেখুন মানুষ lsof

বিকল্প হিসাবে, লিনাক্স সহ, আপনি কেবল /proc/<PID>/fdএই জাতীয় লিঙ্কগুলি গণনা করার জন্য একটি স্ক্রিপ্ট তৈরি করতে পারেন:

find /proc -mindepth 3 -maxdepth 3 -type l | awk -F/ '$4 == "fd" { s++ } END { print s }'


আমি সর্বদা পাই - অনুসন্ধান /proc/{{number}}/fd/5': No such file or directory find: /? {নম্বর}} / fdinfo / 5 ': এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই - প্রশ্ন @ বেনোইট আমি কীভাবে এড়াতে পারি?
বিজি ব্রুনো

2
@ ব্রুনোবিজি: চেষ্টা করুন:echo /proc/*/fd/* | wc -w
অলিভিয়ার ডুলাক

থেক্সএক্স @ অলিভারডুলাক যা একটি সুস্পষ্ট ছিল :-)
বিজি ব্রুনো

ভাল পরামর্শ, কিন্তু ইতিমধ্যে -n এবং -b বিকল্পগুলি ব্যবহার করা হচ্ছে .... আমার আরও পরামর্শের প্রয়োজন
মাইকেল মার্টিনেজ

1
আপনার কাছে খুব বেশি সংখ্যক এফডি থাকলে @ অলিভিয়ারডুলাক কাজ করতে পারে না।
বেনোত

5

আপনি এটা ভুল করছেন.

থেকে man proc

   /proc/sys/fs/file-nr

এই (কেবলমাত্র পঠনযোগ্য) ফাইলটিতে তিনটি সংখ্যা রয়েছে: বরাদ্দকৃত ফাইল হ্যান্ডেলের সংখ্যা (অর্থাত্, বর্তমানে খোলা ফাইলের সংখ্যা); ফ্রি ফাইল হ্যান্ডলগুলির সংখ্যা; এবং সর্বাধিক সংখ্যক ফাইল হ্যান্ডলগুলি (যেমন, / proc / sys / fs / file-max এর সমান মান)। যদি বরাদ্দকৃত ফাইল হ্যান্ডেলের সংখ্যা সর্বাধিকের কাছাকাছি থাকে তবে আপনার সর্বাধিক বৃদ্ধি বিবেচনা করা উচিত। লিনাক্স ২.6 এর আগে, কার্নেল বরাদ্দকৃত ফাইলটি গতিশীলভাবে পরিচালনা করে, তবে এটি তাদের আর মুক্তি দেয় না। পরিবর্তে ফ্রি ফাইল হ্যান্ডলগুলি পুনঃনির্ধারণের জন্য একটি তালিকায় রাখা হয়েছিল; "ফ্রি ফাইল হ্যান্ডলগুলি" মান সেই তালিকার আকারকে নির্দেশ করে। বিপুল সংখ্যক ফ্রি ফাইল হ্যান্ডলগুলি ইঙ্গিত দেয় যে ওপেন ফাইল হ্যান্ডলগুলি ব্যবহারের ক্ষেত্রে অতীত শীর্ষ ছিল। লিনাক্স ২.6 থেকে কার্নেল মুক্ত ফাইল হ্যান্ডলগুলি অপসারণ করে এবং "

আপনি যদি বিড়াল হন তবে এটির প্রথম মান যদি এটি প্রদর্শিত হয় তবে আপনি যা ঠিক করে তা আপনাকে দেয়।

রেকর্ডের জন্য আমি lsofকিছু পরিমাণ ফডিংয়ের সাথে এটির সাথে মিলিয়ে আউটপুটটি পেতে পারি না তবে কার্নেল lsofযেভাবেই আপনি যে তালিকা থেকে পান তার চেয়ে বেশি প্রামাণিক বলে তা যদি আমি জড়ো ।


1
এখানে আমার lsof আউটপুট হল: [root@ec2- cassandra101 ~]$ time lsof -b -n -w -l -L | stdbuf -i0 -o0 -e0 wc -l 1018065। এখানে কি ফাইল-NR বলেছেন তা হল: [root@ec2- cassandra101 ~]$ cat /proc/sys/fs/file-nr 2784 0 3093428। বৃহত্তর বিচ্ছিন্নতা (1,000,000+ বনাম 2784) এর lsofকারণগুলির সাথে ফাইল ফাইল-বর্ণনাকারী না থাকা সমস্ত জিনিস অন্তর্ভুক্ত রয়েছে: লাইব্রেরি ফাইল, এক্সটেকটেবলস ইত্যাদি। সুতরাং, আপনি যদি কেবল ফাইল বর্ণনাকারীর প্রতি আগ্রহী হন তবে file-nrযাবার উপায়, অন্যথায় আপনার lsof বা সমতুল্য প্রয়োজন।
মাইকেল মার্টিনেজ

inode-nrপরিবর্তে একই জায়গায় চেষ্টা করুন ।
ম্যাথু ইফি 8'17
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.