Ich habe eine Java-Anwendung in Eclipse Luna in Windows entwickelt, die in Amazon EC2 läuft (c3.large, Amazon Linux). 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.
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.
%Vor%Beispiel last Durchschnitt, wenn die Anwendung gegen 1.7 erstellt wird:
%Vor%Beispiellademittelwert, wenn die Anwendung gegen 1.8:
erstellt wird %Vor%Es scheint so, als ob es mit dem Open JDK 1.8.0.31 zusammenhängen könnte, aber ich weiß nicht, wie ich das debuggen soll. 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 sehe eine ähnlich hohe CPU-Auslastung, wenn ich das Oracle JDK auf EC2 verwende.
%Vor%Lade Durchschnitt:
%Vor%Sie haben Symptome beschrieben, aber ich denke nicht, dass dies ausreicht, um weiterzumachen, allein schon deshalb, weil es unmöglich ist, irgendwo nach "Java 8 high CPU" zu suchen (Google, die Java Bugparade, etc .) und finde nützliche Ergebnisse. Leider müssen Sie mehr Informationen darüber sammeln, was mit der CPU arbeitet. Hier sind einige Gedanken dazu:
Die Dokumentation besagt: "Die Standardimplementierung dieser Methoden fragt exitValue ab, um zu überprüfen, ob der Prozess beendet wurde. Konkrete Implementierungen dieser Klasse werden dringend empfohlen, diese Methode mit einer effizienteren Implementierung zu überschreiben."
Ich vermute stark, dass dies der Grund ist.
Siehe Ссылка
Tags und Links eclipse java java-8 amazon-ec2