කර්නල් inotify ඔරලෝසු සීමාව ළඟා විය


221

මම දැනට ලිනක්ස් පෙට්ටියක ගැටලුවකට මුහුණ දී ඇති අතර, root ලෙස මට විධාන ආපසු යැවීමේ දෝෂයක් ඇති බැවින් inotify ඔරලෝසු සීමාව ළඟා වී ඇත.

# 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 / log / messages': උපාංගයේ ඉඩක් ඉතිරි නොවේ"
froggythefrog

Answers:


294

එම අගය ඉහළ නැංවීම ආරක්ෂිතද සහ අධික වටිනාකමේ ප්‍රතිවිපාක මොනවාද?

ඔව්, එම අගය ඉහළ නැංවීම ආරක්ෂිත වන අතර විය හැකි පිරිවැය පහත දැක්වේ [ ප්‍රභවය ]:

  • භාවිතා කරන සෑම inotify ඔරලෝසුවකට බයිට් 540 ක් (32-බිට් පද්ධතිය) හෝ 1 kB (ද්විත්ව - 64-බිට් මත) [ප්‍රභවයන්: 1 , 2 ]
  • මෙය කර්නල් මතකයෙන් පිටතට පැමිණේ .
  • ඔබ උපරිම 524288 ලෙස සකසා ඇති අතර සියල්ල භාවිතා කර ඇත (කළ නොහැකි), ඔබ භාවිතා කරන්නේ දළ වශයෙන් 256MB / 512MB 32-bit / 64-bit කර්නල් මතකයයි.
    • Inotify හසුරුවීම්, ලිපිගොනු / නාමාවලි මාර්ග ආදිය නිරීක්ෂණය කිරීමට ඔබේ යෙදුම අතිරේක මතකයක් භාවිතා කරන බව සලකන්න - එහි සැලසුම මත කොපමණ ප්‍රමාණයක් රඳා පවතී.

Inotify ඔරලෝසු වල උපරිම අංකය පරීක්ෂා කිරීම සඳහා:

cat /proc/sys/fs/inotify/max_user_watches

උපරිම inotify ඔරලෝසු සැකසීමට

තාවකාලිකව:

  • sudo sysctl fs.inotify.max_user_watches=ඔබ කැමති අගය අවසානයේ ධාවනය කරන්න.

ස්ථිරවම ( වඩාත් සවිස්තරාත්මක තොරතුරු ):

  • දමා fs.inotify.max_user_watches=524288ඔබේ sysctl සැකසුම් බවට. ඔබේ පද්ධතිය මත පදනම්ව ඒවා පහත සඳහන් ස්ථාන වලින් එකක් විය හැකිය:
    • ඩේබියන් / රෙඩ්හැට්: /etc/sysctl.conf
    • ආරුක්කුව: නව ගොනුවක් දමන්න /etc/sysctl.d/, උදා/etc/sysctl.d/40-max-user-watches.conf
  • නැවත ආරම්භ කිරීම වළක්වා ගැනීම සඳහා ඔබට sysctl සැකසුම් නැවත පූරණය කිරීමට අවශ්‍ය විය හැකිය: sysctl -p(Debian / RedHat) හෝ sysctl --system(Arch)

උපරිම inotify ඔරලෝසු ගණන ළඟා වී ඇත්දැයි පරීක්ෂා කරන්න:

ඕනෑම පැරණි ගොනුවක (අනුගමනය කරන්න) විකල්පය tailසමඟ භාවිතා කරන්න -f, උදා tail -f /var/log/dmesg: - සියල්ල හොඳින් නම්, එය අවසාන පේළි 10 පෙන්වමින් විරාමයක් ලබා දෙනු ඇත; Ctrl-C සමඟ නවත්වන්න - ඔබ ඔරලෝසුවෙන් පිටත නම් , මෙම තරමක් ගුප්ත දෝෂය සමඟ එය අසාර්ථක වනු ඇත :

වලිගය: '/ var / log / dmsg' නැරඹිය නොහැක: උපාංගයේ ඉඩක් ඉතිරි නොවේ

Inotify ඔරලෝසු භාවිතා කරන්නේ කුමක් දැයි බැලීමට

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

පළමු තීරුවේ දැක්වෙන්නේ inotify fds ගණන (ඔරලෝසු ගණන නොවේ) සහ දෙවැන්න එම ක්‍රියාවලියේ PID පෙන්වයි [ප්‍රභවයන්: 1 , 2 ].


4
I guess very few codes need the values higher than the defaultඔබ සතුව ඇති ගොනු ගණන මත පදනම්ව, ඩ්‍රොප්බොක්ස් වලට ඉහළ සීමාවක් අවශ්‍ය විය හැකිය. අයිවී මගේ ප්‍රශ්න මතු කළේ නැත. ඇත්ත වශයෙන්ම, ඩ්‍රොප්බොක්ස් දැනුම්දීම (එය එහි සීමාව කරා ළඟා වන විට සිදු වේ) පැහැදිලිවම එය ඉහළ නැංවීමට ඔබට කියයි.
ෆල්මාරි

2
@ අල්ට්රාසව්බ්ලේඩ්- inotify ප්රතිස්ථාපනය කරන ලද dnotify. dnotify මන්දගාමී හා දෝෂ සහිත විය. inotify ඩිරෙක්ටරි වල භාවිතා කළ හැකි අතර, එම ඩිරෙක්ටරියේ එක් ගොනුවක් (එක් මට්ටමේ ගැඹුරු) වෙනස් කළ විට ඩිරෙක්ටරියක් "වෙනස් වේ". නාමාවලි කෙසේ වෙතත් ගොනු පමණි.
බීට්ගම්මිත්

7
"ස්ථිරවම: / proc / sys / fs / inotify / max_user_watches තුළ ඇති අගය ප්‍රතිස්ථාපනය කරන්න" <- මෙය වැරදිය. මෙය ස්ථීර කිරීම සඳහා ඔබ වෙනස් කළ යුතුය/etc/sysctl.conf
මර්ක්

4
sysctl! = systemd, ඔබේ පැහැදිලි කිරීමේදී. තවද /etc/sysctl.dනවතම RedHat මත පදනම් වූ පද්ධති මතද ක්‍රියා කරයි.
aairey

1
acstackexchanger මේවා සමාන බව ඔබට විශ්වාස නම් (උදා: ඔබ පරීක්ෂා කර ඇත), කරුණාකර ප්‍රශ්නයට ඉදිරිපත් කර සංස්කරණය කරන්න. මා විසින්ම පරීක්‍ෂා කර නොමැති අතර, ඩිස්ට්‍රෝස් පැකේජ පැච් කිරීමට නැඹුරු වන බව මම දනිමි, එබැවින් එකම පැකේජ සඳහා හැසිරීම වෙනස් විය හැකිය. පැකේජ අනුවාදවල වෙනස්කම් ද මෙහි සඳහන් නොවේ.
tshepang
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.