Nuestra construcción es molestamente lenta. Es un sistema Java construido con Ant, y estoy ejecutando el mío en Windows XP. Dependiendo del hardware, puede tardar entre 5 y 15 minutos en completarse.¿Cómo puedo perfilar la E/S del archivo?
Ver las métricas de rendimiento general en la máquina, así como las diferencias de hardware correlacionadas con los tiempos de compilación, indica que el proceso está vinculado a E/S. También muestra que el proceso lee mucho más que escribir.
Sin embargo, no he encontrado una buena manera de determinar qué archivos se están leyendo o escribiendo, y cuántas veces. Mi sospecha es que con nuestros muchos subproyectos e invocaciones subsecuentes del compilador, la construcción vuelve a leer las mismas bibliotecas comúnmente usadas muchas veces.
¿Cuáles son algunas herramientas de creación de perfiles que me dirán qué proceso determinado está haciendo con qué archivos? Gratis es agradable, pero no esencial.
Usando Process Monitor, as suggested by Jon Skeet, pude confirmar mi sospecha: casi toda la actividad del disco fue la lectura y relectura de las bibliotecas, con las copias de "rt.jar" y otras bibliotecas del JDK en la parte superior de la lista. No puedo crear un disco RAM lo suficientemente grande como para albergar todas las bibliotecas que utilicé, pero montar las bibliotecas "más populares" en un disco RAM reduce los tiempos de compilación en un 40%; claramente, el almacenamiento en caché del sistema de archivos de Windows no está haciendo un trabajo lo suficientemente bueno, a pesar de que le he dicho a Windows que optimice para eso.
Una cosa interesante que noté es que la operación típica de 'lectura' en un archivo JAR es solo una docena de bytes; generalmente hay dos o tres de estos, seguidos por un salto de varios kilobytes más adelante en el archivo. Parecía ser inadecuado para lecturas masivas.
Voy a hacer más pruebas con todos de mis bibliotecas de terceros en una unidad flash, y ver qué efecto tiene.
Una pregunta rápida erickson, ¿cómo descubrió cuántos bytes se están leyendo con ProcessMonitor? Estoy teniendo el mismo problema al tratar de crear perfiles de nuestras compilaciones con Windows XP –
que acabo de descifrar ahora, en la columna Detalle de las operaciones de ReadFile, por ejemplo, dice Compensación: N bytes, Longitud: M bytes, etc. –