मैं यह कैसे बता सकता हूं कि मैं घड़ियों को देखने से बाहर हूं?


47

मैं एक एप्लिकेशन का उपयोग करता हूं, जो घड़ियों को खा जाता है। मैं पहले ही सेट कर चुका हूं

fs.inotify.max_user_watches=32768

, /etc/sysctl.confलेकिन कल रात जब तक मैंने इसे मैन्युअल रूप से नहीं चलाया, तब तक एप्लिकेशन ने अनुक्रमण रोक दिया, जिससे मुझे संदेह हुआ कि मैं घड़ियों से बाहर हूं।

चूंकि मुझे नहीं पता है कि जब मैं इस संख्या को बढ़ाता हूं तो क्या व्यापार बंद हो जाता है (क्या यह अधिक रैम का उपभोग करता है?), मुझे नहीं पता कि क्या मुझे इस संख्या को बढ़ाना चाहिए, इसलिए मैं यह जानना चाहूंगा कि क्या कोई रास्ता है? बता सकता है कि क्या यह इन सभी घड़ियों का उपयोग कर रहा है और इसे बढ़ाने के लिए ट्रेडऑफ क्या हो सकता है।


यह प्रश्न फिर से काफी प्रासंगिक हो गया है क्योंकि यह 18.04 में बदल गया है अगर स्क्रीन को खोलना संभव नहीं है अगर कोई इनोड घड़ियों से बाहर चला गया है।
कास्परड

जवाबों:


64

अगर आप घड़ियों से बाहर हैं तो आपको कैसे पता चलेगा? टेल बता देंगे!

  • किसी भी पुरानी फ़ाइल पर (अनुसरण करें) विकल्प के tailसाथ शुरू करें -f, जैसे tail -f /var/log/dmesg:
    • यदि सब ठीक है, तो यह अंतिम 10 लाइनें दिखाएगा और रोक देगा; Ctrl-C के साथ गर्भपात करें
    • यदि आप घड़ियों से बाहर हैं , तो यह कुछ हद तक गुप्त त्रुटि के साथ विफल हो जाएगा :
      पूंछ: '/ var / log / dmsg' नहीं देख सकता: डिवाइस पर कोई स्थान नहीं बचा है

जिज्ञासु के लिए: पूंछ एक "टेललेट" क्यों है ?

  • वास्तव में, किसी भी अच्छी तरह से लिखे गए ऐप में आपको बताने का शिष्टाचार होना चाहिए, क्योंकि inotify API / कॉल स्पष्ट रूप से बताता है कि सौदा क्या है।
  • strace tail -f ...इसके बजाय प्रयास करें , और जब यह सफल होता है, तो यह समाप्त होता है:
    inotify_add_watch (4, "/ var / log / dmesg", IN_MODIFY ...) 1
    
  • लेकिन अगर यह विफल रहता है, यानी आप घड़ियों से बाहर हैं , तो यह कहेगा:
    inotify_add_watch (4, "/ var / log / dmesg", IN_MODIFY ..)
     = -1 ENOSPC (डिवाइस पर कोई स्थान नहीं छोड़ा गया)
    

क्या आप घड़ियाँ बढ़ा सकते हैं? कितनो के द्वारा? किसी भी व्यापार?

संक्षिप्त उत्तर: ज़रूर, कोई पसीना नहीं। यदि आप चाहें तो सीधे एक आधा मिलियन (524288) पर जाएं ... उपयोग की गई अतिरिक्त मेमोरी 4GB + मेमोरी वाले आधुनिक सिस्टम पर नगण्य होनी चाहिए

  • प्रत्येक इस्तेमाल की जाने वाली घड़ी में 540 बाइट्स (32-बिट सिस्टम), या 1 kB (डबल - 64-बिट पर) [स्रोत: 1 , 2 ] लगते हैं।
  • यह कर्नेल मेमोरी से बाहर आता है , जो कि अकल्पनीय है।
  • इसलिए, मान लें कि आपने अधिकतम 524288 सेट किया है, और सभी का उपयोग किया गया था (असंभव), आप लगभग उपयोग कर रहे होंगे। 32-बिट / 64-बिट कर्नेल मेमोरी के 256MB / 512MB

    • ध्यान दें कि आपका एप्लिकेशन अतिरिक्त मेमोरी का उपयोग करने के लिए इनोटिफ़ाइड हैंडल, फ़ाइल / निर्देशिका पथ आदि का ट्रैक रखने के लिए भी उपयोग करेगा - यह इसके डिजाइन पर कितना निर्भर करता है।
  • अधिकतम मूल्य क्या है? मुझे लगता है कि कोई भी नहीं, सिद्धांत रूप में, जब तक आपके पास पर्याप्त रैम है। व्यावहारिक रूप से, 524288 को आधिकारिक तौर पर ऐप्स द्वारा अनुशंसित किया गया है , और लोग निश्चित रूप से मेमोरी उपयोग के साथ, इसे 2 मिलियन तक सेट कर रहे हैं


5
यदि आप भी वास्तविक घड़ियों की वास्तविक संख्या को देखना चाहते हैं (इस प्रकार अधिक हाँ / नहीं), तो इसके लिए जाएँsudo lsof | grep -i inotify | wc -l
फ्रैंक नॉक

2
"अच्छी तरह से लिखा-ऐप" लिंक टूट गया।
गौरव शर्मा

11

मुझे नहीं पता कि मुझे यह संख्या बढ़ानी चाहिए या नहीं

यदि आप अपने max_user_watchesमूल्य पर पहुँच गए हैं, तो जाँचने का आसान तरीका , अपने उपयोगकर्ता के साथ inotifywatch, पैकेज से उपयोग करना है inotify-tools, और जाँच करें कि क्या आप अभी भी किसी फ़ाइल से जानकारी एकत्र कर सकते हैं।

inotifywatch -v /home/bruno/.profileमेरे लिए उदाहरण के लिए रिटर्न:

Establishing watches...
Total of 1 watches.
Finished establishing watches, now collecting statistics.

तो inotifyकोई नई घड़ी बनाने का कोई मुद्दा नहीं है, यहाँ कोई समस्या नहीं है।

यदि आप अपनी अधिकतम सीमा तक पहुँच चुके हैं, तो यह कुछ इस तरह लौटेगी

Failed to watch /home/bruno/.profile; upper limit on inotify watches reached!

यदि आप ऐसा कुछ देखते हैं तो आप सीमा तक पहुँच चुके हैं और अनुमत घड़ियों की सीमा बढ़ाने की आवश्यकता होगी।

क्या यह अधिक रैम की खपत करता है?

हाँ यह करता है। लेकिन इस पुराने लेख के अनुसार चल रहे डेस्कटॉप के अन्य पहलुओं की तुलना में इसकी खपत की मात्रा न्यूनतम है।

--स्मृति उपयोग--

इनोटिफ़ाइड डेटा स्ट्रक्चर्स हल्के वजन के होते हैं:

inotify घड़ी 40 बाइट्स है inotify डिवाइस 68 बाइट्स है inotify इवेंट 272 बाइट्स है

तो यह मानकर कि डिवाइस में 8192 घड़ियां हैं, संरचना केवल 320KB मेमोरी की खपत करने वाली है। अधिकतम 8 उपकरणों को एक समय में अस्तित्व में रखने की अनुमति के साथ, यह अभी भी केवल 2.5 एमबी है

प्रत्येक डिवाइस में एक बार में 256 इवेंट कतारबद्ध हो सकते हैं, जो प्रति डिवाइस 68KB के लिए बोता है। और केवल .5 एमबी यदि सभी डिवाइस खोले जाते हैं और पूरी घटना कतार होती है।

तो लगभग 3 एमबी मेमोरी का उपयोग खुले और पूर्ण सब कुछ के दुर्लभ मामले में किया जाता है।

प्रत्येक इनोटिफाई वॉच पिंस को एक डायरेक्टरी / फाइल की मेमोरी में इनकोड करता है, एक इनोड का साइज प्रति फाइल सिस्टम से अलग होता है लेकिन यह मान लेता है कि यह 512 बाय है।

इसलिए यह देखते हुए कि वैश्विक घड़ियों की अधिकतम संख्या सक्रिय है, इससे इनबॉडी कैश में 32 एमबी इनोड नीचे पिन हो जाएगा। फिर से एक आधुनिक प्रणाली पर कोई समस्या नहीं है।

मैं निश्चित रूप से यह मान रहा हूं कि लेख लिखे जाने के बाद से चीजें बहुत नहीं बदलीं, लेकिन संख्याओं को देखते हुए मुझे चिंता नहीं होगी और सीमा बढ़ाने से रैम की खपत में वृद्धि नहीं होगी।


संबंधित पोस्ट के बारे में inotify


क्षमा करें, मेरे पास कुछ घंटों के लिए कल एक मसौदा खुला था और मैंने अपना पोस्ट करने से पहले आपका जवाब नहीं देखा। मुझे लगता है कि यह ठीक है क्योंकि उनके पास दो अलग-अलग दृष्टिकोण हैं। क्या आप सिर्फ यह स्पष्ट कर सकते हैं कि हाल की गुठली में, पुरानी जानकारी से 0.5 kB (32-बिट पर) या 1KB (64-बिट) प्रति घड़ी कर्नेल मेमोरी का उपयोग करता है। 2005 किसी भी अब सच नहीं लगता है?
ईश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.