Блог Олега Сердюкова

Применение dtrace для поиска файлов, к которым идут активные обращения

Dtrace - мощная подсистема ядра, позволяющая исследовать работу операционной системы и приложений. Я давно к ней не возвращался в статьях, рекомендую почитать ”Отладка файловой активности процессов с помощью DTrace, или как написать деинсталлятор” и ”Поиск метода установки Mac OS X под VMWare Fusion”. В первой статье есть ссылки для дальнейшего чтения.

Сегодня приведу полезный скрипт, показывающий, к каким файлам шли частые обращения за 10-ти секундный интервал. Скрипт работает непрерывно до его прерывания. Применение - можно увидеть, почему вдруг увеличилась нагрузка на систему из-за дисковой активности.

Скрипт:

$ cat 02_openfiles.d
#!/usr/sbin/dtrace -s

io:::start
{
        @[args[2]->fi_pathname] = count();
}

tick-10s
{
        trunc(@, 10);
        printa(@);
        trunc(@, 0);
}

Выставить права на запуск:

$ chmod +x 02_openfiles.d

Запуск:

$ sudo ./02_openfiles.d

Второй вариант запуска - в одну строку:

$ sudo dtrace -n 'io:::start {@[args[2]->fi_pathname] = count();} tick-10s {trunc(@, 10); printa(@); trunc(@, 0);}'

Пример работы:

0 129269                        :tick-10s
??/Logs/FileSyncAgent.log                                         1
??/Russian.lproj/Dictionary.dat                                   1
??/DiagnosticMessages/StoreData                                   3
??/DiagnosticMessages/2010.11.30.asl                              6
??/com.apple.Safari/Cache.db-journal                              8
??/com.apple.Safari/Cache.db                                     51

0 129269                        :tick-10s
??/bands/114                                                      1
??/bands/ef                                                       2
??/Cookies/Cookies.plist_tmp_67927_0.dat                          3
??/bands/115                                                      3
??/bands/a0                                                       3
??/bands/0                                                        4
??/bands/59                                                       5
??/com.apple.Safari/Cache.db-journal                              6
??/com.apple.Safari/Cache.db                                     12
??/unknown (NULL v_parent)/unknown (NULL v_name)                 16

По этим примерам можно сказать, что Safari активно пишет в кеш, и система синхронизирует iDisk.

Почему iDisk? /bands/114 указывает на Sparse Bundle Image, Time Machine вне подозрения (TimeCapsule далеко), а поиск find’ом показал каталог ctrld_iDisk.sparsebundle:

$ sudo find / -name 114
/Users/ctrld/Library/FileSync/0025bcdcddae/ctrld_iDisk.sparsebundle/bands/114

Указанный пример очень прост, есть гораздо более впечатляющие примеры. Хотите узнать больше? Смотрите OpenSolaris Community Group dtrace.

Comments