আমরা একটি অ্যাপাচি ক্যাসান্দ্রা ক্লাস্টার পরিচালনা করি যেখানে প্রতিটি হোস্টের যে কোনও সময়ে কয়েক লক্ষ ফাইল খোলা থাকে।
আমরা পর্যায়ক্রমিক বিরতিতে খোলা ফাইলগুলির একটি গণনা পেতে এবং এই নম্বরটি গ্রাফাইটে ফিড করতে সক্ষম হতে চাই , তবে যখন আমরা এটির lsof
অধীনে চলে যাই তখন collectd
এর মধ্যে সিপিইউর একটি প্রচুর পরিমাণ শেষ করতে এবং কয়েক মুহুর্তের জন্য শেষ হবে CP ।
আমি ভাবছি যে lsof সরবরাহ করে একই ডেটা পাওয়ার বিকল্প বা আরও বন্ধুত্বপূর্ণ উপায় আছে কি না, এমনকি সিএসইউতে খেয়াল হবে না এমনভাবে lsof চালানোর কোনও উপায় আছে কিনা? (যদিও আমি ধরে নিচ্ছি যে এই আধুনিক পদ্ধতিটি সম্ভবত এটি এখনকার তুলনায় পুরোপুরি বেশি হতে পারে ... আদর্শ নয়)।
সম্ভবত কার্নেলটি কোথাও কিছু পরিবর্তনশীল বজায় রেখেছে যাতে খোলা ফাইলগুলির সংখ্যা রয়েছে? ইচ্ছামত ভাবনা?
হালনাগাদ:
উত্তরের একটিতে জবাব দেওয়ার জন্য আমরা ইতিমধ্যে পতাকা -b
এবং -n
পতাকা ব্যবহার করছি । আমার সম্পূর্ণ কমান্ডটি যেমন এটির অধীনে চলছে তেমন collectd
:
sudo lsof -b -n -w | stdbuf -i0 -o0 -e0 wc -l
/proc/{{number}}/fd/5': No such file or directory find:
/? {নম্বর}} / fdinfo / 5 ': এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই - প্রশ্ন @ বেনোইট আমি কীভাবে এড়াতে পারি?