Unser Gebäude ist ärgerlich langsam. Es ist ein Java-System, das mit Ameise und ich betreibe meinen unter Windows XP. Je nach Hardware kann es zwischen 5 und 15 Minuten dauern, bis der Vorgang abgeschlossen ist.
Die Beobachtung der allgemeinen Leistungsmetriken auf dem Rechner sowie die Korrelation der Hardwareunterschiede mit den Erstellungszeiten zeigen, dass der Prozess an E/A gebunden ist. Es zeigt auch, dass der Prozess viel mehr liest als schreibt.
Ich habe jedoch keine gute Methode gefunden, um zu bestimmen die Dateien gelesen oder geschrieben werden, und wie oft. Mein Verdacht ist, dass mit unseren vielen Unterprojekten und nachfolgenden Aufrufen des Compilers, der Build die gleichen häufig verwendeten Bibliotheken viele Male neu liest.
Welche Profiling-Tools können mir sagen, was ein bestimmter Prozess mit welchen Dateien macht? Kostenlos ist schön, aber nicht unbedingt notwendig.
Verwendung von Process Monitor, wie von Jon Skeet vorgeschlagen, Ich konnte meinen Verdacht bestätigen: Fast die gesamte Festplattenaktivität bestand aus dem Lesen und erneuten Lesen von Bibliotheken, wobei die JDK-Kopien von "rt.jar" und anderen Bibliotheken an der Spitze der Liste standen. Ich kann keine RAM-Disk erstellen, die groß genug ist, um alle von mir verwendeten Bibliotheken zu speichern, aber das Mounten der "heißesten" Bibliotheken auf eine RAM-Disk verkürzte die Erstellungszeiten um etwa 40 %; offensichtlich leistet das Windows-Dateisystem-Caching keine gute Arbeit, obwohl ich Windows angewiesen habe, es zu optimieren.
Interessant ist, dass der typische "Lesevorgang" auf einer JAR Datei nur ein paar Dutzend Bytes; in der Regel sind es zwei oder drei, gefolgt von einer Überspringung von mehreren Kilobytes weiter in der Datei. Es schien für Massenlesevorgänge schlecht geeignet zu sein.
Ich werde weitere Tests durchführen mit tous meiner Bibliotheken von Drittanbietern auf einem Flash-Laufwerk zu speichern, um zu sehen, welche Auswirkungen das hat.
0 Stimmen
Eine kurze Frage erickson, wie haben Sie herausfinden, wie viele Bytes mit dem ProcessMonitor gelesen werden? Ich habe das gleiche Problem, wenn ich versuche, ein Profil für unsere Builds mit Windows XP zu erstellen.
0 Stimmen
Ich habe gerade herausgefunden, dass in der Spalte Detail für ReadFile-Operationen zum Beispiel Offset steht: N Bytes, Länge: M Bytes, und so weiter.