2014-02-13 13 views
19

Ich habe einen Webservice unter Coldfusion 10 64bit. Während ich ein Speicherleck untersuchte, ging ich die JRE von 1,6 auf 1,7 hoch, bemerkte aber einen signifikanten Leistungseinbruch. Ich hatte einen einfachen Test-Webservice erstellt, der auf JRE 1.6 problemlos 5000 Anfragen pro Minute ausführen konnte, sobald ich die JRE auf 1,7 änderte, obwohl diese Rate zu 2000 oder weniger pro Minute abfällt. Kennt jemand Einstellungen Einstellungen oder etwas fehlt mir.Coldfusion 10 langsamer bei Verwendung von Java 1.7 im Vergleich zu 1.6

Die Präferenz ist JRE 1.7 zu verwenden, da es scheint, das Speicherleckproblem behoben zu haben, das ich hatte.

  • Lauf Server JRE: java version "1.7.0_51" Java (TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot (TM) 64-Bit Server VM (Build 24.51-b03, mixed Modus)

  • Garbage Collection in JVM-Einstellungen: -XX:+UseParallelGC

  • Changed Garbage Collection: -XX:+UseG1GC das machte keinen Unterschied.

Gefolgt the recommendations from here ohne Leistungssteigerung. Werde mit jvisualvm rezensieren und meine Ergebnisse veröffentlichen.

Update: Java 7 hat changed the way it deals with synchronizing class loaders und es sieht aus wie dies die Ursache für die Verlangsamung sein kann.

Aktualisieren Adobe hat den Fehler bestätigt und versucht, es zu beheben. Adobe bug base record.

+0

Führen Sie die Server-JRE oder die Client-JRE aus? –

+0

Gute Frage Peter. Woher weiß ich, welchen ich führe? –

+1

Es sollte sagen, wenn Sie 'java -version' von der Kommandozeile aus - wenn CF nicht die Systemvorgabe verwendet, brauchen Sie'/Pfad/zu/cf/jre/bin/java -version' oder ähnlich. Oder überprüfen Sie die Seite "System Information" im CF Administrator - sieht so aus, als ob Sie "64-Bit Server VM" im Java VM Name wünschen. –

Antwort

5

Antwort für diese ist, dass Adobe den Fehler bestätigt hat und versucht, es zu beheben. Adobe bug base record.

+0

Wurde das jemals behoben? Der Fehlereintrag listet ihn als ein Duplikat eines anderen Fehlers auf, aber es gibt keinen Verweis auf das Duplikat oder seinen Status. – user3071284

+1

Ja, dies wurde in ColdFusion 11 Update 5 und ColdFusion 10 Update 16 behoben. –

1

Ich würde empfehlen, dass Sie die JVM-Thread-Dump-Daten zwischen Ihren beiden Belastungstests (JRE 1.6 vs. JRE 1.7) überprüfen. Ich habe in der Vergangenheit CF10-Klassenladeprobleme gesehen, die mit der Verwendung von cfdump und cfquery in-memory in Verbindung stehen (Abfrage von Abfragen).

Konzentrieren Sie sich bei der Analyse auf ein beliebiges Problem mit der Threadsperre, mit dem Sie möglicherweise in JRE 1.7 konfrontiert werden.

Die Änderung des Klassenladeprogramms, auf die Sie sich beziehen, soll die Parallelität der Klassenladevorgänge verbessern, ist jedoch immer noch nicht unmöglich, da dies zu einer gewissen Langsamkeit in Ihrer Umgebung führen kann.

Eine weitere Empfehlung ist die GC-Speicherzuweisungsrate. Aktivieren Sie dazu verbose: gc und vergleichen Sie die Ausgabedaten zwischen Ihren 2 Läufen. Bestimmen Sie, ob eine Erhöhung der GC-Speicherzuweisungsrate und/oder der GC-Frequenz die Ursache für diesen Abfall des Durchsatzes sein könnte.

Führen Sie abschließend eine sehr genaue Überprüfung der JVM-Argumente durch. Stellen Sie sicher, dass Ihre Java-Heap-Optimierungsargumente, einschließlich der Heap-Sizing, exakt mit denen von JRE 1.6 übereinstimmen, sodass wir Äpfel mit Äpfeln vergleichen können.

+0

Das Beispiel, das ich für den Belastungstest verwendete, war ein abgespeckter Webservice, der keine Abfragen oder Speicherauszüge hat. Es erstellt ein Objekt mit 2 Eigenschaften. 1 ist eine einfache Textzeichenfolge und die zweite Eigenschaft war ein Array eines Objekts. Dieses zweite Objekt hatte eine Eigenschaft, ein String-Feld. Deshalb nahm ich an, dass dies auf die Parallelität der Klassenladevorgänge zurückzuführen war. Die JVM-Argumente waren identisch, da es dieselbe Maschine war, die nur die JRE änderte, die der Server verwendete. Ich werde später auf die Ausgabe von "verbose: gc" schauen. –