কার্নেল ইনোটাইফাই ওয়াচ সীমাতে পৌঁছেছে


206

আমি বর্তমানে একটি লিনাক্স বাক্সে একটি সমস্যার মুখোমুখি হয়েছি যেখানে মূল হিসাবে আমার কমান্ডগুলি ফিরে আসার ত্রুটি রয়েছে কারণ অজানাভাবে দেখার সীমাটি পৌঁছে গেছে।

# tail -f /var/log/messages
[...]
tail: cannot watch '/var/log/messages': No space left on device
# inotifywatch -v /var/log/messages
Establishing watches...
Failed to watch /var/log/messages; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via '/proc/sys/fs/inotify/max_user_watches'.` 

আমি কিছুটা গুগল করেছিলাম এবং প্রতিটি সমাধান আমি খুঁজে পেয়েছি এর সাথে সীমাটি বাড়ানো:

sudo sysctl fs.inotify.max_user_watches=<some random high number>

তবে আমি সেই মান বাড়ানোর পরিণতি সম্পর্কে কোনও তথ্য খুঁজে পাইনি। আমি অনুমান করি যে কোনও কারণে ডিফল্ট কার্নেল মান সেট করা হয়েছিল তবে এটি নির্দিষ্ট ব্যবহারের জন্য অপর্যাপ্ত বলে মনে হয়। (যেমন, বিপুল সংখ্যক ফোল্ডার সহ ড্রপবক্স ব্যবহার করার সময়, বা সফ্টওয়্যার যা প্রচুর ফাইল নিরীক্ষণ করে)

সুতরাং এখানে আমার প্রশ্নগুলি:

  • সেই মান বাড়ানো কি নিরাপদ এবং খুব বেশি মূল্যের পরিণতি কী হবে?
  • বর্তমানে নির্ধারিত ঘড়িগুলি কী কী এবং কোন প্রক্রিয়াটি ত্রুটিযুক্ত সফ্টওয়্যার দ্বারা পৌঁছানো সীমাবদ্ধতা না ঘটায় তা নির্ধারণ করতে সক্ষম হওয়ার জন্য কী কোনও উপায় আছে?

এটি 8 মাস বয়সী হওয়ার পরে আপনি সম্ভবত এটি পরীক্ষা করে দেখেছেন, তবে কি আপনার ড্রাইভ পূর্ণ? "লেজ: '/ var / লগ / বার্তা' দেখতে পারে না: ডিভাইসে কোনও স্থান অবশিষ্ট নেই"
ফ্রগজিথেফ্রোগ

উত্তর:


273

সেই মান বাড়ানো কি নিরাপদ এবং খুব বেশি মূল্যের পরিণতি কী হবে?

হ্যাঁ, এই মানটি বাড়ানো নিরাপদ এবং নীচে সম্ভাব্য ব্যয় [ উত্স ]:

  • প্রতিটি ব্যবহৃত ইনওটিফাই ওয়াচ 540 বাইট (32-বিট সিস্টেম), বা 1 কেবি (ডাবল - 64৪-বিটের উপর) গ্রহণ করবে [উত্স: , ]
  • এটি কার্নেল মেমরি থেকে বেরিয়ে আসে , যা অসমর্থনীয়।
  • ধরে নিই যে আপনি সর্বোচ্চটি 524288 এ সেট করেছেন এবং সমস্ত ব্যবহার করা হয়েছিল (অসম্ভব), আপনি 32-বিট / 64-বিট কার্নেল মেমরির প্রায় 256MB / 512MB ব্যবহার করবেন।
    • নোট করুন যে আপনার অ্যাপ্লিকেশনটি ইনোটিফাই হ্যান্ডলগুলি, ফাইল / ডিরেক্টরি পাথ ইত্যাদির ট্র্যাক রাখতে অতিরিক্ত মেমরিও ব্যবহার করবে - এর নকশার উপর কতটা নির্ভর করে।

সর্বাধিক সংখ্যক ইনোটিফাই ঘড়িগুলি পরীক্ষা করতে:

cat /proc/sys/fs/inotify/max_user_watches

সর্বাধিক সংখ্যক ইনোটিফাই ঘড়ি সেট করতে

সাময়িকভাবে:

  • sudo sysctl fs.inotify.max_user_watches=আপনার পছন্দের মানটি শেষে চালান ।

স্থায়ীভাবে ( আরও বিস্তারিত তথ্য ):

  • করা fs.inotify.max_user_watches=524288আপনার sysctl সেটিংস মধ্যে। আপনার সিস্টেমে নির্ভর করে তারা নিম্নলিখিত জায়গাগুলির একটিতে থাকতে পারে:
    • ডেবিয়ান / redhat: /etc/sysctl.conf
    • খিলান: /etc/sysctl.d/যেমন একটি নতুন ফাইল রাখুন/etc/sysctl.d/40-max-user-watches.conf
  • রিবুট এড়াতে আপনি সিস্কিটল সেটিংস পুনরায় লোড করতে ইচ্ছুক হতে পারেন: sysctl -p(ডেবিয়ান / রেডহ্যাট) বা sysctl --system(আর্চ)

ইনোটিফাই ঘড়ির সর্বাধিক সংখ্যা পৌঁছেছে কিনা তা পরীক্ষা করে দেখুন:

কোনও পুরানো ফাইলের (অনুসরণ) বিকল্পের tailসাহায্যে ব্যবহার -fকরুন, উদাহরণস্বরূপ tail -f /var/log/dmesg: - যদি সবকিছু ঠিকঠাক হয় তবে এটি শেষ 10 টি লাইন প্রদর্শন করবে এবং বিরতি দেবে; সিআরটিএল-সি দিয়ে বাতিল করুন - আপনি যদি ঘড়ি থেকে বাইরে থাকেন তবে এটি কিছুটা ক্রিপ্টিক ত্রুটির সাথে ব্যর্থ হবে :

লেজ: '/ var / লগ / ডিএমএসজি' দেখতে পারে না: ডিভাইসে কোনও স্থান নেই left

ইনোটিফাই ওয়াচগুলি কী ব্যবহার করছে তা দেখতে

find /proc/*/fd -lname anon_inode:inotify |
   cut -d/ -f3 |
   xargs -I '{}' -- ps --no-headers -o '%p %U %c' -p '{}' |
   uniq -c |
   sort -nr

প্রথম কলামটি ইনোডেফাইড এফডিএসের সংখ্যা (যদিও ঘড়ির সংখ্যা নয়) এবং দ্বিতীয়টি সেই প্রক্রিয়ার পিআইডি দেখায় [উত্স: 1 , 2 ]।


3
I guess very few codes need the values higher than the defaultআপনার কতগুলি ফাইল রয়েছে তার উপর নির্ভর করে ড্রপবক্সের উচ্চতর সীমা দরকার হতে পারে। আইভি'ই আমার সাথে কোন সমস্যা ছাড়াই উত্থাপন করেছিল। প্রকৃতপক্ষে, ড্রপবক্স বিজ্ঞপ্তি (এটি যখন এর সীমাতে পৌঁছায় তখন ঘটে) স্পষ্টভাবে আপনাকে এটি বাড়াতে বলে।
ফালমারি

1
@ আলট্রাসাব্ল্যাড- প্রতিস্থাপন ডনটিফাই dnotify ধীর এবং বগি ছিল। ইনোটাইফাই ডিরেক্টরিতে ব্যবহার করা যেতে পারে এবং সেই ডিরেক্টরিতে যে কোনও একটি ফাইল (এক স্তর গভীর) সংশোধন করা হলে একটি ডিরেক্টরি "পরিবর্তিত" হবে। ডিরেক্টরিগুলি যেভাবেই কেবল ফাইল।
বেটগ্যামিট

6
"স্থায়ীভাবে: / proc / sys / fs / inotify / max_user_watches এর মধ্যে মানটি প্রতিস্থাপন করুন" <- এটি ভুল। এই করতে স্থায়ী আপনি পরিবর্তন করতে হবে/etc/sysctl.conf
Merc

3
sysctl! = systemd, আপনার ব্যাখ্যায়। এবং /etc/sysctl.dনতুন রেডহ্যাট-ভিত্তিক সিস্টেমগুলিতেও কাজ করে।
aairey

1
@ স্ট্যাকেক্সেঞ্জার যদি আপনি খুব নিশ্চিত হন যে এগুলি অনুরূপ (যেমন আপনি পরীক্ষা করেছেন), তবে দয়া করে জমা দিন এবং প্রশ্নটিতে সম্পাদনা করুন। আমি নিজেই পরীক্ষা করে দেখিনি, এবং আমি জানি যে ডিস্ট্রোস প্যাকেজগুলি প্যাচ করার প্রবণতা রাখে, তাই একই প্যাকেজগুলির জন্য আচরণ আলাদা হতে পারে। এটি প্যাকেজ সংস্করণগুলিতেও পার্থক্য উল্লেখ করতে পারে না।
tshepang
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.