Dan*_*lB6 8 java eclipse amazon-ec2 java-8
我在Windows中的Eclipse Luna中开发了一个Java应用程序,它在Amazon EC2(c3.large,Amazon Linux)中运行.此应用程序处理以非常一致的传入速率工作.当我针对JDK 8u31构建应用程序时,EC2 CPU负载远高于针对JDK 7u75构建的相同应用程序.
该应用程序最初使用EC2上的默认JRE运行,我添加了OpenJDK 1.8.0.31以利用Java 8 Process waitFor(长超时,TimeUnit单元).此应用程序的主要工作涉及使用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
Run Code Online (Sandbox Code Playgroud)
应用程序针对1.7构建时的示例负载平均值:
top - 00:20:28 up 4 days, 10:41, 4 users, load average: 0.37, 0.26, 0.52
Run Code Online (Sandbox Code Playgroud)
应用程序构建为1.8时的平均负载示例:
top - 23:45:52 up 4 days, 10:06, 4 users, load average: 2.28, 2.60, 2.01
Run Code Online (Sandbox Code Playgroud)
看起来它可能与Open JDK 1.8.0.31有关,但我不知道如何调试它.没有代码更改,我只是在Eclipse Luna中更改合规性级别并在1.7和1.8之间构建.知道为什么负载会如此不同?
更新:
当我在EC2上使用Oracle JDK时,我看到类似的高CPU负载.
$ 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
Run Code Online (Sandbox Code Playgroud)
负载平均值:
top - 01:45:27 up 4 days, 12:06, 4 users, load average: 2.28, 1.50, 1.04
Run Code Online (Sandbox Code Playgroud)
文档说:“此方法的默认实现会轮询 exitValue 以检查进程是否已终止。强烈鼓励此类的具体实现以更有效的实现覆盖此方法。”
我强烈怀疑这就是原因。
请参阅http://docs.oracle.com/javase/8/docs/api/java/lang/Process.html#waitFor--
| 归档时间: |
|
| 查看次数: |
1169 次 |
| 最近记录: |