- Есть ли способ отследить причину ‘fseventsd’ процесс загрузки процессора?
- FSEvents: Разбираемся с мониториногом событий файловой системы в macOS
- Подписываемся на события программно
- Подписываемся на поток событий файловой системы
- Обрабатываем полученные события
- Останавливаем получение событий
- Использование класса
- Фильтрация событий
- Заключение
- Question: Q: fseventsd uses exessive cpu and memory
- All replies
- Как отключить создание .DS_STORE файлов на сетевых ресурсах.
- Что такое .DS_Store, .fseventsd, .Spotlight-V100, TemporaryItems и .Trashes?
- Как избавиться от создания файлов .DS_Store, .Spotlight-V100, .TemporaryItems и .Trashes на сетевых дисках?
- Запрет создания файлов .DS_Store средствами файлого сервера
- Комментариев: 4
Есть ли способ отследить причину ‘fseventsd’ процесс загрузки процессора?
Я запустил Mac OSX 10.6 и заметил, что процесс ‘fseventsd’ занимал 100% ЦП и 1,5 ГБ ОЗУ. Делая поиск в Google, я обнаружил, что это может быть связано с машиной времени. Однако я не запускаю Time Machine на этом компьютере.
Есть ли способ отследить источник борова ресурса? Это входит куда-нибудь? Перезапуск «исправил» проблему, но я уверен, что она вернется, если я не могу понять, почему это началось с самого начала.
fseventd — это процесс регистрации событий в файловой системе, о котором вы можете прочитать в обзоре ars technica Mac OS X Leopard. Вы можете использовать такие программы, как fseventer, чтобы увидеть тот же тип вывода, который он видит.
Инфраструктура FSEvents опирается на один постоянно работающий процесс-демон fseventsd, который читает из / dev / fsevents и записывает события в файлы журнала на диске (хранится в каталоге .fseventsd в корне тома, для которого эти события). Вот и все. Это супер-высокотехнологичное решение: просто запишите события в лог-файл. Скучно, прагматично, но довольно эффективно.
Вы можете проверить этот журнал, хотя я не знаю, насколько он будет полезен для вас. Я не был бы удивлен, увидев Time Machine, которая имеет дело со многими файлами, а иногда и многими крошечными файлами, что может вызвать некоторые проблемы с fsevents.
Либо одна программа застряла в очень эффективном цикле записи изменений, которые вызвали fseventsd много работы, либо это сам бесконечный цикл, обрабатывающий неразрешимую структуру данных на одном из подключенных томов.
В предыдущем случае — такие программы, как fseventer, которые читают один и тот же поток данных, вероятно, тоже зависнут — теперь у вас будет два процесса с 50% -ной загрузкой, пытающиеся обработать бесконечное количество данных. (Это отличный момент для данных, если вы пытаетесь увидеть, что не так.) Похоже на вопросы, спрашивающие, почему syslogd занимает весь процессор — обычно это какая-то другая программа, которая сходит с ума, вызывая много работы.
Когда / если это случится снова — начните выходить из программ и подумайте о выходе из системы. Вы узнаете, является ли нарушающий элемент процессом системного уровня или процессом пользовательского уровня. fs_usage может быть полезно посмотреть, какие конкретные программы IO тяжелы.
fsck из-за загрузки в однопользовательский режим обычно требуется, если у вас есть круглые жесткие ссылки или другие вырожденные махинации с файловой системой, которые могут вызвать такой всплеск активности.
Источник
FSEvents: Разбираемся с мониториногом событий файловой системы в macOS
File System Events (далее FSEvents) — механизм, доступный в macOS начиная с версии 10.5, который позволяет подписываться на уведомления об изменениях в структуре папок, а также их содержимого. Он используется многими системными утилитами, например Time Machine. Стоит отметить, что мониторинг происходит на уровне директории: иными словами придет уведомление, что в директории изменился некий файл, но конкретной информации об изменениях в нём содержаться не будет. Для более детального мониторинга придётся спускаться на уровень ниже и использовать kqueues, либо писать собственный kext. Поэтому для написания собственного антивируса такой механизм не подойдет, а вот для своего аналога Dropbox, или чего-то подобного — вполне.
Механизм FSEvents состоит из трёх базовых частей:
- Код ядра транслирует события в пространство пользователя;
- Демон fseventsd обрабатывает эти события и рассылает уведомления;
- База данных, где хранятся записанные логи.
Изначально информация о событиях хранится в памяти. Когда происходит событие, ему назначается 64-битный идентификатор. Может получиться так что событие пришло с уже назначенным идентификатором, в этом случае, просто обновятся флаги. После того, как буфер памяти заполнится события записываются на диск.
Если выполнить в терминале ls -la / , можно увидеть в корне раздела директорию .fseventsd , куда упомянутый демон пишет логи. Посмотреть содержимое файлов так просто не получится, для этой цели можно воспользоваться скриптом FSEventsParser, он поможет экспортировать их в текстовом формате, либо как базу данных SQLite. Второй вариант обычно предпочтительнее, так как он позволит использовать SQL-запросы для фильтрации событий (которых обычно больше миллиона).
В целях безопасности, уведомления о событиях возвращаются только для тех папок, к которым есть доступ у пользователя, под которым запущена программа, подписанная на эти события. Существует возможность и полностью запретить логирование событий файловой системы на уровне раздела: для этого в корне нужно создать директорию .fseventsd , куда положить пустой файл с названием no_log .
Может показаться, что исторические данные из FSEvents — не самая полезная информация, однако косвенно они могут помочь, например при исследовании атакованной системы. Так как малварь обычно чистит за собой следы, то записи о создании подозрительных plist’ов, например в /Library/LaunchDaemons , теоретически могут помочь идентифицировать поработавшего зловреда, что станет весомым артефактом в дальнейшем расследовании. Также по записям можно увидеть активность в домашней директории пользователя, файлы перемещенные в корзину, активность в интернете и многое другое. На iOS тоже можно получить данные из FSEvents, но для этого понадобится джейлбрейк.
Подписываемся на события программно
Если тебя больше интересует возможность подписаться на события и слушать их программно, то предлагаю реализовать для этого несложный класс, который будет подписываться на уведомления в заданной директории и возвращать информацию об изменениях (путь к файлу и флаги изменений) в колбек.
Подписываемся на поток событий файловой системы
Откроем Xcode и создадим новый проект, это будет Cocoa App (на вкладке macOS), язык выберем Swift. Создадим новый класс (File > New > File > macOS > Swift file) под названием FSEventsService и напишем следующий код:
Здесь мы просто объявили класс и создали несколько переменных. Теперь нам нужно запустить мониторинг событий, для этого определим следующий метод:
API FSEvents — это C API, мы можем его использовать из Swift, но нам потребуется учесть несколько особенностей. Разберем код метода по частям. Сначала мы создаем контекст и в него записываем указатель на наш экземпляр класса. Это нужно для того, чтобы иметь возможность потом к нему обратиться из C-функции, которую мы передаём в качестве коллбека, куда будут приходить события.
Далее определяем 2 флага: kFSEventStreamCreateFlagUseCFTypes — говорит нашему потоку данных, чтобы он возвращал значения в типах Core Foundation, вместо чистых C-типов и kFSEventStreamCreateFlagFileEvents — просит передавать события на уровне файлов, а не на уровне директории (иначе будут приходить только уведомления об изменениях в директории, но не будет информации, что за файл изменился).
Теперь осталось создать поток событий и передать в него необходимую информацию, а именно:
- Алокатор, используется для выделения памяти для потока. Используем значение по-умолчанию;
- Колбек, функция которая будет вызвана, когда произойдет событие, её реализуем ниже;
- Контекст, структура, которую мы создали ранее для того, чтобы передать указатель на экземпляр нашего класса;
- Пути к директориям, в которых нужно мониторить события;
- Идентификатор события, начиная с которого запрашивать события, выставляем с текущего момента;
- Задержка с которой нужно запрашивать у ядра события, здесь для простоты выставим 0, но вообще лучше поиграть с этим значением, для лучшей производительности;
- Флаги для изменения поведения потока, которые мы определили выше.
После этого остаётся только добавить поток событий в RunLoop (часть инфраструктуры отвечающая за обработку асинхронных событий, приходящих в поток) и запустить мониторинг.
Обрабатываем полученные события
Реализация колбэка будет выглядеть так:
Здесь мы получаем экземпляр нашего класса из контекста и записываем его в переменную mySelf. Из нее извлекаем колбек, который мы передали при инициализации нашего класса, пробегаем в цикле по пришедшим событиям, в нём создаем структуру, которая содержит информацию о событии (идентификатор события, путь и флаги) и передаем ее в этот коллбек.
Структура с информацией о событии выглядит следующим образом:
Останавливаем получение событий
Здесь все достаточно просто: нужно вызвать несколько методов для остановки потока событий:
Вызов этого метода можно добавить, например, в deinit :
Использование класса
На этом написание простейшей обёртки закончено, мы теперь легко можем получить события от файловой системы, например:
После запуска в логе приложения можно будет увидеть строки с измененными файлами. Перед запуском нужно не забыть отключить Sandbox (выбрать проект в инспекторе слева, перейти на вкладку Capabilities, отключить App Sandox), иначе у приложения будет доступ к файловой системе только внутри песочницы.
Фильтрация событий
В результате работы нашего класса, мы получили флаг события, который представляет собой битовую маску. Apple заранее определила определила для нас костанты с флагами, соотвествующими опредлённому типу события. Например, если мы захотим отфильтровать только события с созданием файла, это будет выглядеть следующим образом:
Подбирая комбинации флагов, можно гибко настроить получаемый поток событий под собственные нужды. Полный список флагов можно найти в документации.
Заключение
Сегодня мы рассмотрели реализацию собственной обертки над API FSEvents, если не считать взаимодействие с API на C, то использовать из Swift его довольно просто и не должно вызвать затруднений. На GitHub можно найти большое количество библиотек, схожих с тем, что мы реализовали сегодня. Пользоваться ими или нет, нужно решать исходя из конкретных задач: с одной стороны зачем писать лишний boilerplate, когда кто-то его уже написал за тебя, а с другой стороны в сложных решениях, всё равно приходится разбираться с внутренним устройством библиотек и докручивать их под специфичные нужды заказчика, так что может быть имеет смысл написать такой класс с нуля.
Источник
Question: Q: fseventsd uses exessive cpu and memory
Does anybody know what fseventsd does? It is started by root through «launchd (1)» and now and then uses all my CPU and up to 500 MB of memory? Can be killed through Activity Monitor using Admin password.
Anybody else experiencing same issue?
Cheers
MacBook 4,1, Mac OS X (10.5.2)
Posted on Apr 28, 2008 12:36 AM
All replies
Loading page content
Page content loaded
Here is a very good article on what fseventsd does. Since it writes file system event log files and since applications such as Time Machine use it, I would not stop its process.
Apr 28, 2008 3:44 AM
Hi,
i’ve got almost the same problem with fseventsd: the process takes about 99% CPU but just 1.5MB memory. It starts working when TimeMachine (working on a NAS) starts, TM is preparing and nothing changes up to 10 houres.
After stopping TM fseventsd process (mostly) calms down.
I didn’t find any errors refering to fseventsd or TM in the log.
Sometimes the system freezes for 20 minutes.
When I stop fsevents process it reappears suddenly.
Does anyone know something about this? What can I do to make the TM run again? The article didn’t help me much.
Message was edited by: erep
Jun 14, 2008 4:00 AM
I have the same thing. fseventsd is taking up 100% (but not 200%, or both cpus) but is slowing down the whole machine. 1.09MB real memory, 591.78MB virtual memory. When I try to logout or shutdown, the machine hangs. When I just turn off the power to restart, it seems to start up again if I do anything with time machine. But then turning off time machine doesn’t help.
I’m kinda worried because I’m not sure how I’m going to stop this.
I am using a network drive for time machine.
Jun 21, 2008 2:53 PM
Jun 21, 2008 2:54 PM
So, go into Disk Utility and verify your drives, especially the one you use for Time Machine.
I had my drive hooked up to and Airport Extreme Base Station and Time Machine saving to that. At night, I’d go to the Apple menu and put my computer to sleep. I’d notice a backup was occurring and worry a bit but figure Apple would have thought of that. But it did seem to sleep awfully fast considering it should have been stopping the network backup first.
When I would wake the computer the next day, I’d get the message saying the backup had failed. This happened a couple of days in a row before I noticed that fseventsd was going crazy.
I found a web page saying fseventsd doesn’t deal with corrupted disks well, so I detached the drive from the AEBS and hooked it directly to the computer. Sure enough the drive had some errors. The sparse bundle that networked Time Machine creates was so bad it was unverifiable and unfixable. Something about a link being bad somewhere. I bet when I put the computer to sleep it just stopped the backup abruptly.
So I had to start all over. And I lost all my backup history. Luckily for me, that’s not a huge deal, but it could have been (or could be, if I figure out I’m missing something.)
Moral of the story, don’t put your computer to sleep if Time Machine is currently running. I don’t know if this is a problem with directly attached drives as well, but I wouldn’t risk it.
Источник
Как отключить создание .DS_STORE файлов на сетевых ресурсах.
Наша любимая macOS при обращении к сетевым дискам или флешкам оставляет после себя скрытые файлы .DS_Store, .fseventsd, .Spotlight-V100, .TemporaryItems, .Trashes и файлы с префиксом «._».
Пользователи маков могут даже не подозревать о их существовании, так как файлы, имена которых начинаются с точки, являются скрытыми. А вот пользователи Windows (у кого включено отображение системных и скрытых файлов), видя подобное безобразие на файловом сервере, начинают нервно елозить, опасаясь подцепить что-то не хорошее.
Что такое .DS_Store, .fseventsd, .Spotlight-V100, TemporaryItems и .Trashes?
Попробую объяснить что это такое и откуда берется. Если совсем кратко, то эти скрытые файлы и папки выполняют вспомогательную функцию файловой системы macOS — запоминают размеры иконок, ведут журналы событий, содержат индексы поиска и прочие «плюшки». Остановимся чуть подробнее на каждом:
- .DS_Store — отвечает за хранение настроек вида папок (размер пиктограмм и сетки, вид, фоновый рисунок и так далее. Удалив этот файл, все настройки вида придут к настройкам по-умолчанию.
- Файлы с префиксом «._». Файловая система macOS использует оригинальную систему хранения данных: сам файл плюс ресурсы, которыми можно его сопроводить (добавить пиктограмму, цветную этикетку, комментарий Spotlight). У других файловых систем (FAT, NTFS, UFS, SMB, NFS) такой функции нет и, дабы не терять эти данные на внешних или сетевых дисках, Apple придумала механизм под названием «Apple Double», создавая для этих целей второй файл с префиксом ._. В общем, файлы с префиксом ._ на сетевых ресурсах и флешках можно смело удалять, никакой полезной нагрузки они там не несут.
- .fseventsd — журнал событий файловой системы, содержит данные о создание файлов и каталогов, модификации, удалении. На несистемных томах можно обойтись и без него.
- .Spotlight-V100 — база индексации системы поиска Spotlight, пожалуй самый объемный из скрытых системных каталогов. Располагается в корне каждого раздела диска. Удаление приводит к повторному переиндексированию.
- .TemporaryItems — служит для хранения временных объектов (по аналогии с temp в Windows). Удаление может негативно сказаться на работе программ, которые её используют.
- .Trashes — используется для временного хранения удалённых файлов. Удаление данной папки равносильно очистке корзины (не рекомендуется удалять на системных разделах).
Надеюсь, теперь стало понятнее, что ничего общего с вирусами данные файлы не имеют, а их удаление с сетевых ресурсов и флешек вполне безопасно. Осталось понять каким образом избавиться от их появления там, где это не нужно.
Как избавиться от создания файлов .DS_Store, .Spotlight-V100, .TemporaryItems и .Trashes на сетевых дисках?
Штатных настроек по отключению файлов типа .DS_Store на сетевых дисках в macOS не предусмотрено, хотя способ избавления от некоторых файлов и папок на SMB ресурсах всё-таки есть. Для этого в терминале нужно выполнить команду:
Правда тут есть одно «но». Данная настройка распространяется только на ту учетную запись, под которой выполнялась команда. Если требуется применить её ко всей системе, необходимо скопировать файл com.apple.desktopservices.plist из локальной библиотеки настроек в глобальную и переназначить права доступа:
Восстановить настройки можно командой:
Теперь можно рекурсивно очистить подключенный сетевой ресурс (со всеми подкаталогами) от файлов .DS_Store, .Spotlight-V100 и прочих, описанных ранее. Предполагается, что ресурс уже смонтирован в каталоге /Volumes.
Для этого в терминале выполняем команду:
Запрет создания файлов .DS_Store средствами файлого сервера
Настраивать каждый компьютер с macOS в сети подобным образом, удовольствие весьма сомнительное. Предпочитаю решать проблему глобально, непосредственно на самом файловом сервере. Большинство сетевых накопителей управляются Linux или FreeBSD, предоставляя общие ресурсы по SMB-протоколу (на самом деле можно настроить и AFP, NFS, FTP).
Samba-сервер позволяет запретить создание ненужных файлов и папок c помощью директивы veto files. Она может быть установлена как глобально, так и отдельно для каждого расшаренного сетевого каталога. Пример конфига smb.conf:
[global]
veto files = /._*/.DS_Store/.Spotlight-V100/.TemporaryItems/Thumbs.db
delete veto files = yes
Чтобы обеспечить возможность контроля за содержимым файлового сервера на Windows, нам необходимо установить сам «Файловый сервер» и службу «Диспетчер ресурсов файлового сервера». После чего можно настроить запрет сохранения определенных типов файлов по маске в разделе «Управление блокировкой файлов – Фильтры блокировки».
Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.
Комментариев: 4
Статья информативная. Но у меня вопрос. Насколько сильно эти файлы мешают работе системы? Стоит ли вообще заморачиваться?
Если вы работаете на маке, то ничего удалять не нужно, а вот пользователей Windows их наличие сильно тревожит. В принципе можно не заморачиваться.
Ценно. а то уже начал ЕЛОЗИТЬ и разными утилитами сканировать ))))
Ввел команды, настроил самба-сервер, все вроде ок, но теперь макбук при редактировании файлов майкрософт офис в сетевой папке спамит созданием папок с названием редактируемого файла и чем-то типа хэша в конце имени папки, что хто такое и можно ли отключить любой спам файлами от мака?
Источник