Ich habe eine Java-Anwendung in Eclipse Luna in Windows entwickelt, die in Amazon EC2 (c3.large, Amazon Linux) läuft. Diese Anwendungsprozesse arbeiten mit einer sehr konstanten Eingangsrate. Wenn ich die Anwendung gegen JDK 8u31 erstelle, ist die EC2-CPU-Last viel höher als die gleiche Anwendung, die gegen JDK 7u75 gebaut wird.Java-Anwendung CPU/laden viel höher, wenn gegen JDK8 gebaut
Die Anwendung lief ursprünglich mit der Standard-JRE auf EC2, und ich habe die OpenJDK 1.8.0.31 hinzugefügt, um die Vorteile von Java 8 Process waitFor (langes Timeout, TimeUnit-Einheit) zu nutzen. Die Hauptaufgabe dieser Anwendung besteht darin, eine Anwendung mit Runtime.exec aufzurufen.
$ sudo alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
* 1 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
+ 2 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.31-2.b13.5.amzn1.x86_64/jre/bin/java
Beispiel durchschnittliche Belastung, wenn die Anwendung gegen 1,7 gebaut:
top - 00:20:28 up 4 days, 10:41, 4 users, load average: 0.37, 0.26, 0.52
Beispiel durchschnittliche Belastung, wenn die Anwendung gegenüber 1,8 gebaut:
top - 23:45:52 up 4 days, 10:06, 4 users, load average: 2.28, 2.60, 2.01
Es scheint, wie es in Zusammenhang stehen kann zum Open JDK 1.8.0.31, aber ich weiß nicht, wie ich das debuggen kann. Es gibt keine Codeänderungen, ich ändere lediglich die Compliance-Stufe und baue zwischen 1,7 und 1,8 in Eclipse Luna. Irgendeine Idee warum die Ladung so viel anders wäre?
UPDATE:
ich ähnlich hohe CPU-Last zu sehen, wenn ich die Oracle JDK auf EC2 verwenden.
$ sudo alternatives --config java
There are 3 programs which provide 'java'.
Selection Command
-----------------------------------------------
1 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
2 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.31-2.b13.5.amzn1.x86_64/jre/bin/java
*+ 3 /usr/java/jdk1.8.0_31/bin/java
Last Durchschnitt:
top - 01:45:27 up 4 days, 12:06, 4 users, load average: 2.28, 1.50, 1.04
Können Sie dies auf Ihrer eigenen Maschine reproduzieren? – fge
Ich habe es auf mehreren EC2-Instanzen (beide OpenJDK) gesehen. Ich kann die Arbeitslast auf meinem lokalen Computer nicht generieren, aber ich werde nach Möglichkeiten suchen, die Arbeit zu simulieren. – DanielB6
Um Effekte von Compiler vs zu unterscheidenjre: Was passiert, wenn Sie bei compliance 1.7 kompilieren und auf dem 1.8 jre laufen? –