Як я можу дізнатися, чи не закінчується годинник?


47

Я використовую додаток, який споживає годинники, що не ініціюють. Я вже встановив

fs.inotify.max_user_watches=32768

в /etc/sysctl.confале минулої ночі додаток зупинена індексація , якщо я запустив його вручну, що призводить мене підозрювати , що я з годинника.

Оскільки я не знаю, що таке розпродаж, коли я збільшую це число (чи споживає це більше оперативної пам’яті?), Я не знаю, чи варто просто збільшувати це число, тому я хотів би знати, чи є спосіб, який я може сказати, чи він використовує всі ці годинники та які можуть бути компроміси для його збільшення.


Це питання знову стало досить актуальним, оскільки виявляється, що в 18.04 розблокування екрана неможливо, якщо у вас закінчився годинник inode.
kasperd

Відповіді:


64

Як дізнатись, якщо у вас немає годин? хвіст скаже!

  • Почніть tailз параметра -f(слідувати) на будь-якому старому файлі, наприклад tail -f /var/log/dmesg:
    • Якщо все добре, воно покаже останні 10 рядків і призупинить; перервати Ctrl-C
    • Якщо у вас немає годинників , це не вдасться із цією виправданою помилкою :
      хвіст: не можу дивитися '/ var / log / dmsg': на пристрої не залишилось місця

Для допитливих: Чому хвіст є "телячим"?

  • Насправді, будь - яке добре написане додаток повинно вас люб’язно повідомити, оскільки інотифікований 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), якщо хочете ... додаткова використовувана пам'ять повинна бути незначною в сучасній системі з 4 ГБ + пам'яті.

  • Кожен використаний годинник inotify займає 540 байт (32-бітова система) або 1 кБ (подвійний - на 64-бітній) [джерела: 1 , 2 ]
  • Це виходить з пам’яті ядра , яке неможливо замінити.
  • Отже, якщо припустити, що ви встановили максимум на 524288, і всі вони були використані (малоймовірні), ви б використовували прибл. 256 Мб / 512 Мб 32-бітної / 64-бітної пам'яті ядра

    • Зауважте, що ваша програма також використовуватиме додаткову пам'ять для відстеження запущених ручок, шляхів до файлів / каталогів тощо - скільки залежить від її дизайну.
  • Яке максимальне значення? Гадаю, жодної теоретично, якщо у вас достатньо оперативної пам’яті. На практиці програми офіційно рекомендовано 524288 , і люди встановили її до 2 мільйонів , звичайно, з використанням супутньої пам'яті.


5
Якщо ви також хочете дізнатись про фактичну кількість годин, що інтуїзуються (таким чином більше, ніж так / ні), перейдіть доsudo lsof | grep -i inotify | wc -l
Франк Нокк

2
Посилання "добре написане-додаток" розірвано.
Gaurav Sharma

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!

Якщо ви бачите щось подібне, тоді ви досягли межі, і вам потрібно буде збільшити ліміт дозволених годин.

Чи споживає вона більше оперативної пам’яті?

Так. Але відповідно до цієї старої статті кількість, яку вона споживає, мінімальна порівняно з іншими аспектами роботи робочого столу.

- ПОМНЕ ВИКОРИСТАННЯ--

Інотифіковані структури даних мають малу вагу:

інотифікований годинник - 40 байт, прищеплювальний пристрій - 68 байт

Отже, якщо пристрій має 8192 годин, структури лише споживають 320 КБ пам'яті. Маючи максимальну кількість 8 пристроїв, дозволених одночасно, це все ще лише 2,5 Мб

Кожен пристрій також може мати 256 подій у черзі за раз, що становить 68 КБ на пристрій. І лише .5 МБ, якщо всі пристрої відкриті та мають повну чергу подій.

Тож приблизно 3 Мб пам'яті використовується в рідкісних випадках усього відкритого та повного.

Кожен інотифікований годинник прив'язує inode каталогу / файлу в пам'яті, розмір inode різний для файлової системи, але дозволяє припустити, що це 512 байтів.

Отже, якщо припустити, що максимальна кількість глобальних годин активна, це призведе до скорочення 32 Мб введення в кеш-коді. Знову не проблема в сучасній системі.

Звичайно, припускаю, що речі не змінилися дуже сильно, оскільки стаття була написана, але, дивлячись на цифри, я б не хвилювався, а збільшення ліміту не збільшить споживання оперативної пам’яті значно.


Пов’язані публікації про inotify


Вибачте, людину, я вчора відкрив чернетку протягом декількох годин і не побачив вашої відповіді, перш ніж я розмістив свою. Я думаю, що це нормально, оскільки у них є два різні підходи :-) Не могли б ви просто уточнити, що в останніх ядрах inotify використовує 0,5 КБ (на 32-розрядному) або 1 КБ (64-бітну) пам'яті ядра на годинник, оскільки стара інформація від 2005 рік, здається, вже не відповідає дійсності?
Робочі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.