我在CentOS 5.4 VPS上运行java服务器。 VPS统计: - 2.5GHz单核CPU - 2GB的RAM - OpenJDK 1.6(也试过Sun JDK 1.7)
我在java进程中遇到了非常高的CPU使用率。然后我去尝试分析java进程以查看导致速度减慢的原因。我发现简单的方法(如Random.nextInt():787ms)需要花费1000几毫秒来完成一次调用。大多数方法不应该花这么长时间,并且在我的服务器上导致非常高的CPU使用率。这是CentOS的问题吗?还是Java?或者我的VPS上有没有正确配置的东西?
答案 0 :(得分:3)
不要在源代码中添加时序,而是尝试使用像BTrace这样的java代理:http://kenai.com/projects/btrace,它可以让您掌握所需的信息,但不会弄乱您的应用程序源代码。
BTrace可以与可视化工具结合使用,例如EurekaJ(我创建的用于可视化BTtrace输出的项目):http://eurekaj.haagen.name
其他商业资料分析选项也可用,例如JProfiler或YourKit,但它们带有价格标签。
答案 1 :(得分:0)
当您在程序中测量处理时间时,是否可以重现您的计时,例如:
long start = System.currentTimeMillis();
/* Your code */
[...]
long time = System.currentTimeMillis() - start;
System.out.println("Measurement: " + time);
另外,你的意思是“当Java没有占用97%的CPU时速度很快”?为什么Java首先占97%?有多个线程在运行吗?你的计算是短期还是长期运行?