Warum wird ein hudson „MVN saubere Installation“ Build nehmen 3-6x länger als die gleiche auf der Kommandozeile?

StackOverflow https://stackoverflow.com/questions/4388135

Frage

Wir sehen relativ lange Bauzeiten auf unserem CI-Server (hudson) und sie beginnen in unserer Art und Weise zu bekommen. Ich bin mir bewusst, hudson tut mehr als invoke Maven und ich würde es gerne 10-20% mehr Zeit für die Arbeit gewähren, aber eine Größenordnung Verlangsamung scheint zu viel.

Wer eine Vorstellung davon hat, warum dies sein könnte und wie das Problem zu lösen? Ich muss sagen, was nicht die Ursache:

  • die virtuelle Maschine hudson läuft in: auf der Kommandozeile, es in etwa die gleiche Menge an Zeit, als meine Entwicklung PC
  • nimmt
  • andere gleichzeitige Aufgaben: Ich stellte sicher, es gab nichts, Ressourcen aus der Build-Task Umleitung

Die Maven Ziele sind buchstäblich sauber und installieren, nichts Besonderes und ressourcenintensiv wie javadoc, check usw. Mit Blick auf die hudson Build-Task-Konsole Ausgabe scheint es Verzögerungen zu sein, wenn „Abrufen von vorherigen Build-Nummer von [unsere Nexus Artefakt-Repository ]“, aber ich weiß nicht, eine einfache Möglichkeit, die Leistung dieses Schrittes zu messen und eine Artefakt Veröffentlichung scheint zu einfach eine Operation des Gesamt Unterschied in der Geschwindigkeit zu rechtfertigen.

(Problem beschrieben auch in diese Gewinde)

Update:

Wir haben Hudson / Jenkins auf die neueste Version aktualisiert und konnten das Timing-Plugin verwenden. Kurzversion:

  • die gute Nachricht: wir jetzt wissen, nexus das Problem verursacht
  • die schlechte Nachricht: Wir wissen noch nicht, warum

Weitere Details

Auf einem unserer tatsächlichen Maven Projekte (maven build Zeit: 3 min, hudson Kompilierzeit: 9 min) konnten wir das hudson auch die Build-in 3 min durchführt, nimmt aber dann 6 Minuten das Artefakt zu Nexus hochladen.

Ausführen eines manuellen Upload eines anderen Artefakts unter Verwendung nexus' Web-UI, konnte ich folgendes bestätigen:

  • die tatsächliche Artefakts Hochladen in einem Bruchteil der Zeit durchgeführt (das heißt, in einigen Sekunden)
  • nach diesen einigen Sekunden erscheint das Artefakt als <nexusworkdir>/nexus/storage/test/test2/test2/1.0.0/test2-1.0.0.rpm

Die wirklichen Puzzler ist, warum nexus eine Minute diese Datei erstellen übernimmt: <nexusworkdir>/nexus/proxy/attributes/test/test2/test2/1.0.0/test2-1.0.0.rpm

Soweit ich das beurteilen kann, berechnet sie nur eine MD5 und SHA1 Signatur und Aufzeichnungen allgemeine Artefakt Informationen, aber md5sum und sha1sum eine 75MB-Datei nehmen <1s ...

Schließlich ist es nicht irgendeine Art von Netzwerk-Time-out zu sein scheint, weil die Verzögerung in etwa proportional Größe Artefakt zu sein scheint.

Jede Idee, was nexus hat, nachdem es ein Artefakt erhält geschätzt wird.

Update 2 :

Einstellen der nexus Protokollebene zu debuggen, nexus protokolliert die folgenden, wenn ein Artefakt hochgeladen:

...

2011-04-05 14:38:53 DEBUG [jpsc28za2RtYQ==] -

o.s.n.p.s.l.f.Defau ~ - Kopieren Strom mit Puffergröße: 4096

2011-04-05 14:39:55 DEBUG [ython-2.5.2.jar] - org.mortbay.log   

- RESPONSE /nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar 200

2011-04-05 14:40:07 DEBUG [-2.5.2.jar.sha1] - org.mortbay.log   

- REQUEST /nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar.sha1 auf

...

2011-04-05 14:40:12 DEBUG [-2.5.2.jar.sha1] - org.mortbay.log   

- RESPONSE /nexus/content/groups/public/org/python/jython/2.5.2/jython-2.5.2.jar.sha1 200

2011-04-05 14:43:45 DEBUG [ndex.properties] - org.mortbay.log   

- REQUEST /nexus/content/groups/public/.index/nexus-maven-repository-index.properties auf org.mortbay.jetty.HttpConnection@141a720

...

2011-04-05 14:44:04 DEBUG [ndex.properties] -

o.s.n.p.m.m.M2Group ~ - public retrieveItem () :: GEFUNDEN public:. / index / nexus-maven-repository-index.properties

2011-04-05 14:44:04 DEBUG [ndex.properties] - org.mortbay.log   

- RESPONSE /nexus/content/groups/public/.index/nexus-maven-repository-index.properties 200

2011-04-05 14:48:07 DEBUG [jpsc28za2RtYQ==] -

o.s.n.p.a.DefaultAt ~ - Speichern von Attributen auf UID = Test: /test/test/1.0.1/test-1.0.1.rpm

...

2011-04-05 14:48:07 DEBUG [w/icon-info.gif] - org.mortbay.log   

- Servlet-Halter = nexus

2011-04-05 14:48:08 DEBUG [w/icon-info.gif] - org.mortbay.log   

- RESPONSE / nexus/ext-2.3/resources/images/default/window/icon-info.gif 200

2011-04-05 14:49:01 DEBUG [c=1302007326656] - org.mortbay.log   

- REQUEST / nexus / service / local / log / config auf org.mortbay.jetty.HttpConnection@1dbd88f ....

Es scheint nur sein dort für eine Minute sitzen oder so und als weiter mit seiner Arbeit. Jede Idee, warum nexus ist dies sehr geschätzt.

War es hilfreich?

Lösung

Wie diskutiert im Thread ich Ihre gegabelt Maven vermuten die JVM-Parameter übergeben nicht bekommen. Können Sie jconsole verwenden, um die max Haufen zu überprüfen erlaubt ist, was Sie in Ihrem MAVEN_OPTS zugewiesen haben?

Gibt es einen Unterschied machen, wenn Sie Hudson als Service vs. Start Hudson von der Kommandozeile starten?

Aktualisieren :

Bereitstellen von auf Nexus nimmt eine Last von RAM, mehr viel als Zusammenstellung (in meiner Erfahrung). Der Austausch auf Low-Memory sein könnte, was es unten ist verlangsamt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top