Наш сбор досадно медленно. Это Java-система, построенная с Ant, и я запускаю свою версию в Windows XP. В зависимости от аппаратного обеспечения для завершения может потребоваться от 5 до 15 минут.Как я могу профилировать ввод-вывод файлов?
Наблюдение общих показателей производительности на машине, а также сопоставление аппаратных различий со временем сборки указывает на то, что процесс связан с вводом-выводом. Это также показывает, что процесс делает намного больше, чем чтение.
Тем не менее, я не нашел подходящего способа определить который файлы читаются или записываются и сколько раз. Мое подозрение в том, что с нашими многочисленными подпроектами и последующими вызовами компилятора сборка многократно перечитывает одни и те же часто используемые библиотеки.
Что такое инструменты для профилирования, которые расскажут мне, что делает данный процесс с файлами? Бесплатно - это хорошо, но не обязательно.
Использование Process Monitor, as suggested by Jon Skeet, я был в состоянии подтвердить мое подозрение: почти все диска активности чтения и повторного чтения библиотек, с копиями в комплекте JDK из «rt.jar» и других библиотек в верхней части список. Я не могу сделать RAM-диск достаточно большим для хранения всех библиотек, которые я использовал, но установка «самых горячих» библиотек на RAM-диске сокращает время сборки примерно на 40%; Очевидно, кэширование файловой системы Windows не делает достаточно хорошей работы, хотя я сказал Windows оптимизировать для этого.
Я заметил, что типичная операция чтения в файле JAR составляет всего несколько десятков байтов; обычно есть два или три из них, за которым следует пропустить несколько килобайт в файле. Казалось, он плохо подходит для массовых чтений.
Я собираюсь провести дополнительное тестирование с всеми моих сторонних библиотек на флеш-накопителе и посмотреть, что это за эффект.
Один быстрый вопрос erickson, как вы выяснили, сколько байтов считывается с ProcessMonitor? У меня такая же проблема, пытаясь профилировать наши сборки с помощью Windows XP. –
. Только что вычисленный сейчас, например, в столбце «Сведения» для операций ReadFile, он говорит «Смещение: N байтов», «Длина: M байтов» и т. Д. –