2009-02-11 14 views
27

मैं एक डेमॉन पर काम कर रहा हूं जो फ़ाइलों को एक्सेस करते समय विभिन्न प्रकार की घटनाओं को ट्रिगर करने के लिए इनोटिफ़ाई के माध्यम से फ़ाइल ईवेंट पर नज़र रखता है। मैंने पढ़ा है कि घड़ियों थोड़ा महंगा हैं, क्योंकि कर्नेल प्रत्येक फ़ाइल को देखने के पूर्ण पथ नाम को संग्रहीत कर रहा है।लिनक्स के साथ उचित मात्रा में इनोटिफ़ाई घड़ियों क्या है?

कितने घड़ियों बहुत अधिक होंगे?

संपादित करें: अधिकतर, मैं सोच रहा हूं .. क्या आपने कभी एक उल्लेखनीय प्रदर्शन हिट देखी है, यदि हां, तो कितने घड़ियों ने ऐसा किया? हां, मुझे निगरानी/आवर्ती (हालांकि इसकी न्यूनतम बूटस्ट्रैप प्रणाली) है।

उत्तर

17

AFAIK कर्नेल पथनाम को संग्रहित नहीं कर रहा है, लेकिन इनोड। फिर भी, 32 बिट सिस्टम पर प्रति घड़ी 540 बाइट्स हैं। 64 बिट पर जितना अधिक डबल।

मुझे एलएसआईएनसीडी से पता है (शायद आप इसे देखना चाहते हैं?) जिन लोगों के पास लाखों घड़ियों हैं। यह सिर्फ स्मृति की गीगाबाइट खाता है।

6

100 बिलियन ट्रिलियन गैजिलियन बहुत अधिक होंगे, शायद। Kernel Korner - Intro to inotify "हजारों घड़ियों" का उल्लेख करता है ताकि कम से कम उस संख्या को कोई समस्या न हो।

23

आप /proc/sys/fs/inotify/max_user_instances (inotify "वस्तुओं" की अधिकतम संख्या) और /proc/sys/fs/inotify/max_user_watches (फ़ाइलों की अधिकतम संख्या को देख चुके) को पढ़ कर प्रणाली सीमा पा सकते हैं, इसलिए यदि आप उन संख्याओं से अधिक, यह भी कई ;-) घड़ियों की अधिकतम संख्या आम तौर पर हजारों या उससे अधिक के कई दशकों - मेरे सिस्टम पर, 262143 - जो संभवतः आपको तब तक अधिक आवश्यकता होगी जब तक आप फ़ाइल सिस्टम में प्रत्येक फ़ाइल को देखने की कोशिश नहीं कर रहे हैं, लेकिन आपको ऐसा नहीं करना चाहिए। मैं कहूंगा, बस आपको आवश्यकतानुसार अधिक अंतर्निहित घड़ियों का उपयोग न करने का प्रयास करें, और इसके बारे में चिंता न करें जब तक आप प्रदर्शन में महत्वपूर्ण कमी न देखें।

+1

मुझे पूरे फाइल सिस्टम को देखने के लिए इनोटिफ़ाई का उपयोग क्यों नहीं करना चाहिए? क्या आप विशिष्ट हो सकते हैं? – Blub

+0

@blub अच्छी तरह से आप इसे क्यों करना चाहते हैं? जब तक आप एक फाइल सिस्टम कार्यान्वयन को डिबग नहीं कर रहे हैं, मैं एक अच्छा उपयोग केस नहीं सोच सकता, और यदि आप यही कर रहे हैं, तो शायद फाइल सिस्टम कोड में हुक करना बेहतर होगा। उल्लेख नहीं है, संभवतया एक आधुनिक ओएस के साथ फाइल सिस्टम पर वास्तव में _everything_ देखने के लिए पर्याप्त घड़ियों नहीं होंगे। लेकिन मुझे लगता है कि अगर ऐसा होता है (यानी यदि आप फ़ाइलों के कम सेट के साथ काम कर रहे हैं), तो शायद यह सबसे बुरी चीज नहीं है। जब तक आपका कंप्यूटर इसे संभाल सके, तब तक यह AFAIK को नुकसान पहुंचाने वाला नहीं है। –

+2

मैं एक वॉल्यूम इंडेक्स करना चाहता हूं और इसलिए यदि कोई फ़ाइल कहीं भी बदलती है, तो मुझे अपनी अनुक्रमणिका अपडेट करने की आवश्यकता है। मैंने ext4 स्रोत कोड पर एक नज़र डाली है, यह वास्तव में उपयोगकर्ता एडिन के लिए नहीं बनाई गई है .. केवल एक dumpe2fs उपयोगिता है जो "ब्लॉक" प्रिंट कर सकती है, लेकिन अभी तक कोई वास्तविक विचार नहीं है कि वहां से वास्तविक फ़ाइलपैथ कैसे प्राप्त करें। और अभी भी .. मुझे उस उपयोगिता को लगातार चलाने की आवश्यकता होगी, कम से कम एक बार इंडेक्स को फिर से भरने के लिए। बिल्कुल बढ़िया नहीं है, मैं कुछ घटना वापस लेना पसंद करूंगा - जैसे inotify करता है। – Blub

9

मेरी जानकारी:

[[email protected] ~]# cat /var/log/lsyncd.status | grep Inotify 
Inotify watching 293208 directories 

[[email protected] ~]# cat /proc/sys/fs/inotify/max_user_watches 
1048576 

lsyncd स्मृति का 130M के बारे में उपयोग करता है।

मैं कुछ निर्देशिकाओं को आपदा पुनर्प्राप्ति सर्वर के साथ सिंक में रखने के लिए lsyncd का उपयोग करता हूं।

मुख्य सर्वर पर कोई प्रदर्शन हिट/जुर्माना नहीं।

+4

मुझे लगता है कि आप lsyncd स्मृति उपयोग देख रहे हैं और inotify नहीं ...inotify कर्नेल अंतरिक्ष स्मृति का उपयोग करता है ... – confiq

संबंधित मुद्दे