Ho un'applicazione Java sviluppata in Eclipse Luna in Windows che gira in Amazon EC2 (c3.large, Amazon Linux). Questi processi applicativi funzionano con una frequenza in entrata molto consistente. Quando costruisco l'applicazione su JDK 8u31, il carico della CPU EC2 è molto più alto rispetto alla stessa applicazione costruita con JDK 7u75.CPU dell'applicazione Java/carico molto più elevato se costruito contro JDK8
L'applicazione originariamente funzionava con il JRE predefinito su EC2 e ho aggiunto OpenJDK 1.8.0.31 per sfruttare il waitFor di Java 8 Process (timeout lungo, unità TimeUnit). Il lavoro principale di questa applicazione consiste nel richiamo di un'applicazione utilizzando Runtime.exec.
$ 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
Esempio carico medio quando l'applicazione è costruita contro 1,7:
top - 00:20:28 up 4 days, 10:41, 4 users, load average: 0.37, 0.26, 0.52
Esempio carico medio quando l'applicazione è costruita contro 1,8:
top - 23:45:52 up 4 days, 10:06, 4 users, load average: 2.28, 2.60, 2.01
Sembra che può essere correlata all'Open JDK 1.8.0.31, ma non so come eseguire il debug di questo. Non ci sono modifiche al codice, sto solo cambiando il livello di conformità e costruisco tra 1.7 e 1.8 in Eclipse Luna. Qualche idea sul perché il carico sarebbe così diverso?
UPDATE:
vedo simile elevato carico della CPU quando uso l'Oracle JDK su EC2.
$ 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
carico medio:
top - 01:45:27 up 4 days, 12:06, 4 users, load average: 2.28, 1.50, 1.04
È possibile riprodurre questo sul proprio computer? – fge
L'ho visto su più istanze EC2 (entrambi OpenJDK). Non riesco a generare il carico di lavoro sul mio computer locale, ma cercherò metodi per simulare il lavoro. – DanielB6
Per discriminare gli effetti del compilatore vs.jre: cosa succede se compili alla conformità 1.7 ed esegui il 1.8 jre? –