অনেকগুলি খোলার ফাইল - কীভাবে অপরাধীকে সন্ধান করা যায়


69

চলমান অবস্থায় tail -f filename, আমি নিম্নলিখিত বার্তাটি পেয়েছি:

tail: inotify cannot be used, reverting to polling: Too many open files

এটি কি কোনও সম্ভাব্য সমস্যা?

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


1
আপনি কি এর মাধ্যমে উপলব্ধ ফাইল বর্ণনাকারীর সংখ্যা বাড়িয়েছেন ulimit?
Ignacio Vazquez-Abrams

2
@ IgnacioVazquez- আব্রামগুলি যা অন্য ব্যবহারকারীদের পক্ষে সহায়ক হতে পারে তবে আমার কাছে এটি রোগের চেয়ে লক্ষণটির চিকিত্সা করার মতো মনে হয়।
অ্যান্ড্রু গ্রিম 3

আপনি ভুল না হলেও, কখনও কখনও অ্যাপ্লিকেশনগুলির অনেকগুলি ফাইল খোলা থাকার বৈধ কারণ থাকে।
Ignacio Vazquez-Abram

উত্তর:


71

কে এত বেশি ফাইল খুলছে তা বুঝতে আপনি lsof ব্যবহার করতে পারেন। সাধারণত এটি একটি (ওয়েব) সার্ভার যা এতগুলি ফাইল খোলায় তবে lsof অবশ্যই আপনাকে কারণটি সনাক্ত করতে সহায়তা করবে।

একবার আপনি বুঝতে পারবেন আপনি কে করতে পারেন খারাপ লোক

যদি lsof থেকে আউটপুট বেশ বিশাল হয় তবে এটি কোনও ফাইলে পুনর্নির্দেশের চেষ্টা করুন এবং তারপরে ফাইলটি খুলুন

উদাহরণ (আপনাকে থাকতে পারে Ctrl+ Cপ্রথম কমান্ড)

lsof > ~/Desktop/lsof.log
cat ~/Desktop/lsof.log | awk '{ print $2 " " $1; }' | sort -rn | uniq -c | sort -rn | head -20
vim ~/Desktop/lsof.log

37
lsof | awk '{ print $2; }' | uniq -c | sort -rn | head
অলসতার

1
আমি একই ত্রুটি পেয়েছি এবং উলিমিট ব্যবহার করা কাজ করে না। পুচ্ছ -F কমান্ডটি তবুও ত্রুটি ফিরিয়ে দেয়। আমি সীমাটি 1024 থেকে 3000 এ বাড়িয়েছি তাই আমি কল্পনা করতে পারি যে ততক্ষণে আমার যথেষ্ট জায়গা আছে ... আমার ধারণা আমার পুনরায় বুট করতে হবে!
অ্যালেক্সিস উইল্ক

15
আমি itsadok এর লাইন সহায়ক বলে চিহ্নিত করেছেন, কিন্তু আমি মনে করি আপনি প্রথম বাছাই করা উচিত (কারণ uniqশুধুমাত্র সংলগ্ন লাইনের কাজ করে), uniq চালানো, তারপর সাজানোর আবার। তাই lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
টাইলার কলিয়ার

19
সর্বাধিক ফাইল খোলার বাছাই করা এবং গণনা করা অবশ্যই সবচেয়ে ভাল কাজ thing পিডের পাশাপাশি প্রক্রিয়াটির নামও দেখান: '' 'lsof | awk '{মুদ্রণ $ 2 "" $ 1; } '| সাজানো -আরএন | uniq -c | সাজানো -আরএন | শিরোনাম -20 '' '
গেওথে

2
@ কেওইথ যদি আপনি এটির উত্তর দেন তবে আমি আনন্দের সাথে এটি উত্সাহিত করব:)
ম্যাট বল

23

অন্য কারও যদি এর প্রয়োজন হয় ...

ulimit -a

সমস্ত বর্তমান সীমা প্রদর্শন করবে। বিশেষত ulimit -n 70000ফাইল বর্ণনাকারী সীমাটি সেট করবে।

এছাড়াও ...

cat /proc/sys/fs/file-max

সম্পাদনা করা হলে কার্নেলের সীমাটি প্রদর্শন / সেট করবে।

sudo echo 200000 > /proc/sys/fs/file-max

আরও একটি বিস্তারিত ব্যাখ্যা এখানে পাওয়া যাবে ...

অ-রুট ব্যবহারকারীদের জন্য আমি কীভাবে খোলা ফাইলগুলির সীমা বাড়াতে পারি?


3
ইউলিমিট রয়েছে তাই আপনি আপনার সিস্টেমে রিসোর্স ব্যবহারের উপর কড়া নিয়ন্ত্রণ রাখতে পারেন। আপনি যে প্রক্রিয়াগুলি জানেন সেগুলির জন্য পৃথকভাবে তাদের বাড়ানো ভাল তবে অনেকগুলি ফাইল বর্ণনাকারী ব্যবহার করতে হবে। এগুলি পরীক্ষায় শক্ত করে রাখলে আপনি এমন প্রক্রিয়াগুলি দেখতে পাবেন যা ধীরে ধীরে ফাইল বর্ণনাকারীদের ফাঁস হতে পারে। নোট করুন যে ফাইল হ্যান্ডলগুলি ইউনিক্স / লিনাক্সে কোনও ডিভাইস অ্যাক্সেসের জন্য ব্যবহৃত হয়। যেমন কোনও প্রক্রিয়া দ্বারা খোলা প্রতিটি নেটওয়ার্ক সকেট একটি ফাইল হ্যান্ডেল ব্যবহার করে। এটি ব্যাখ্যা করে যে নিয়মিত ফাইল-সিস্টেম ফাইলগুলির পাশাপাশি কোনও নেটওয়ার্ক সংযোগের মতো কোনও ডিভাইস ফাইলের ক্ষেত্রে আপনি কেন "অনেকগুলি ওপেন ফাইলগুলিকে" আঘাত করতে পারেন।
গায়েথে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.