Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java方法的高执行时间_Java_Linux_Profiling_Execution Time - Fatal编程技术网

java方法的高执行时间

java方法的高执行时间,java,linux,profiling,execution-time,Java,Linux,Profiling,Execution Time,我正在CentOS 5.4 VPS上运行java服务器。 VPS统计: -2.5GHz单核CPU -2GB内存 -OpenJDK1.6(也尝试了Sun JDK1.7) 我在java进程中经历了非常高的CPU使用率。然后,我尝试分析java进程,看看是什么导致了速度减慢。我发现简单的方法(比如Random.nextInt():787ms)需要1000毫秒才能完成一个调用。大多数方法不应该花费这么长的时间,并且会在我的服务器上造成非常高的CPU使用率。CentOS有什么问题吗?还是Java?或者我的

我正在CentOS 5.4 VPS上运行java服务器。 VPS统计: -2.5GHz单核CPU -2GB内存 -OpenJDK1.6(也尝试了Sun JDK1.7)


我在java进程中经历了非常高的CPU使用率。然后,我尝试分析java进程,看看是什么导致了速度减慢。我发现简单的方法(比如Random.nextInt():787ms)需要1000毫秒才能完成一个调用。大多数方法不应该花费这么长的时间,并且会在我的服务器上造成非常高的CPU使用率。CentOS有什么问题吗?还是Java?或者我的VPS上是否有未正确配置的内容?

当您测量程序内的处理时间时,是否可以重现计时,例如以下内容:

long start = System.currentTimeMillis();

/* Your code */

[...]    

long time = System.currentTimeMillis() - start;

System.out.println("Measurement: " + time);

另外,您所说的“当Java不占用97%的CPU时,它是快速的”是什么意思?为什么Java首先占据了97%的份额?是否有多个线程正在运行?您的计算是短时间运行还是长时间运行?

与其在源代码中添加计时,不如尝试使用像BTrace这样的java代理:它可以让您获得所需的信息,但不会弄乱应用程序的源代码

BTrace可以与可视化工具(如EurekaJ)结合使用(我创建了一个项目来可视化BTtrace输出):


其他商业评测选项也可用,如JProfiler或YourKit,但它们确实有价格标签

根据所使用的随机方法,机器可能没有太多剩余的熵,并且在生成下一个数字之前等待更多的熵出现。不管怎样。。。获取一个随机整数应该不会花费将近一秒钟的时间。在虚拟环境中,您的虚拟服务器可能位于大量超额订阅的硬件上,这是使用操作系统级工具(如vmstat)无法看到的。如果你把SSH放到盒子里,它会感觉到响应还是迟钝?当java没有占用97%左右的CPU时,它会非常快。我在**上测试过,我在我的电脑上的VirtualPC(Ubuntu 10.04)上测试过,它似乎也有这个问题。另外,如果有必要的话,我的VPS是基于Xen的。@Adam:
Random
不使用熵,而是
SecureRandom
使用熵。我稍后会尝试一些计时。“当Java不占用97%的CPU时,速度很快”的评论是说,当这些方法占用这么多时间时,它们只会使用大部分CPU来完成简单的任务。