Как сказал @Jonathan Kamens, у вас, вероятно, закончились часы. У меня есть готовый скрипт , inotify-consumers
, в котором перечислены основные нарушители для вас (в более новой версии также указано имя пользователя, которому принадлежит процесс, см. ниже):
$ time inotify-consumers
INOTIFY
WATCHER
COUNT PID CMD
----------------------------------------
6688 27262 /home/dvlpr/apps/WebStorm-2018.3.4/WebStorm-183.5429.34/bin/fsnotifier64
411 27581 node /home/dvlpr/dev/kiwi-frontend/node_modules/.bin/webpack --config config/webpack.dev.js
79 1541 /usr/lib/gnome-settings-daemon/gsd-xsettings
30 1664 /usr/lib/gvfs/gvfsd-trash --spawner :1.22 /org/gtk/gvfs/exec_spaw/0
14 1630 /usr/bin/gnome-software --gapplication-service
....
7489 watches TOTAL COUNT
real 0m0.099s
user 0m0.042s
sys 0m0.062s
Здесь вы быстро поймете, почему ограничение по умолчанию в 8 КБ слишком мало для машины разработки, так как только экземпляр WebStorm быстро достигает его максимума при встрече с папкой node_modules
с тысячами папок. Добавьте наблюдателя веб-пакетов, чтобы гарантировать проблемы...
Несмотря на то, что он был намного быстрее, чем другие альтернативы, когда я делал его изначально, Саймон Маттер добавил несколько улучшений скорости для сильно загруженного Big Iron Linux (сотен ядер ), которые значительно ускорили его, снизив его с десять минут (! )до 15 секунд на своем чудовище.
inotify-consumers --help
Чтобы получить его на свой компьютер, просто скопируйте содержимое скрипта и поместите его куда-нибудь в свой $PATH
, например /usr/local/bin
. В качестве альтернативы, если вы доверяете этому незнакомцу в сети, вы можете не копировать его и передать в bash через http:
$ curl -s https://raw.githubusercontent.com/fatso83/dotfiles/master/utils/scripts/inotify-consumers | bash
INOTIFY
WATCHER
COUNT PID USER COMMAND
--------------------------------------
3044 3933 myuser node /usr/local/bin/tsserver
2965 3941 myuser /usr/local/bin/node /home/myuser/.config/coc/extensions/node_modules/coc-tsserver/bin/tsserverForkStart /hom
979 3954 myuser /usr/local/bin/node /home/myuser/.config/coc/extensions/node_modules/coc-tsserver/node_modules/typescript/li
1 7473 myuser /usr/local/bin/node --no-warnings /home/myuser/dev/dotfiles/common-setup/vim/dotvim/plugged/coc.nvim/build/i
1 3899 myuser /usr/local/bin/node --no-warnings /home/myuser/dev/dotfiles/common-setup/vim/dotvim/plugged/coc.nvim/build/i
6990 watches TOTAL COUNT
Для справки, основное содержание скрипта просто (вдохновлено этим ответом)
find /proc/*/fd \
-lname anon_inode:inotify \
-printf '%hinfo/%f\n' 2>/dev/null \
\
| xargs grep -c '^inotify' \
| sort -n -t: -k2 -r
Если вам интересно, как увеличить лимиты
$ inotify-consumers --limits
Current limits
-------------
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 524288
Changing settings permanently
-----------------------------
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p # re-read config
Я не понимаю вашу попытку (почему X-Delete-At
, почему Object:
, как вы хотите справиться с пропущенными полями? ), поэтому я предлагаю толькоsed
--решение:
sed -nE '/Expires:/{s/: [^,]*,/:/;s/0([0-9]{4})/\1_/}
/store/!{H;$!d;}
x;s/.*store: ([[:alnum:]]*)[^>]*[> ]*(Delete: ([[:alnum:]]*)[^>]*[> ]*)*(Expires: ([^_]*))*.*/\1,\3,\5/p
$!d
x;s/.*store: ([[:alnum:]]*).*/\1,,/p' /tmp/list.txt
Идея состоит в том, чтобы собрать поля в области хранения до следующей store:
строки, затем x
изменить буферы, чтобы следующая store:
строка уже находилась в буфере, а собранные поля можно было отформатировать для вывода.
Весь фокус в сложном регулярном выражении. Необязательные поля помещаются внутрь ()*
, поэтому они могут появляться любое количество раз. Если они вообще не отображаются, все регулярное выражение все еще соответствует.
Чтобы поглотить мусор, не поедая дополнительные поля, я выбрал [^>]*
вместо .*
, используя строки, начинающиеся с >
.
Первая строка предназначена для переформатирования даты. Последние две строки обрабатывают случай, когда файл заканчивается строкой store:
.