Java程序CPU使用率高
我编写了一个java程序,用于查询oracle数据库,并使用Java程序CPU使用率高,java,performance,jdbc,cpu-usage,apache-commons-beanutils,Java,Performance,Jdbc,Cpu Usage,Apache Commons Beanutils,我编写了一个java程序,用于查询oracle数据库,并使用beanutils 在负载测试期间 我发现CPU使用率很高 计划大纲如下: List<Map<String, List>> rows = queryList(query, new Object[]{params..}); while(rows.hasNext()){ beanutils.setProperty(obj, field, row.get("some column name")); } 占用
beanutils
在负载测试期间
我发现CPU使用率很高
计划大纲如下:
List<Map<String, List>> rows = queryList(query, new Object[]{params..});
while(rows.hasNext()){
beanutils.setProperty(obj, field, row.get("some column name"));
}
占用大部分的自时CPU
我使用jmeter
加载测试(20个并发请求)。
jvisualvm
图形的基线为0%。因此,肯定是因为这个负载测试,只有cpu处于峰值状态
是反射
导致CPU使用率高吗
执行一个查询,例如:queryforlist
需要增加CPU利用率
稍后,如果我的计算量增加,那么我应该减少访问这个api的线程数量,因为它会再次占用我的cpu
提前感谢。我确实在旧版Java版本(1.5/1.6)中遇到了反射性能问题。我在循环之前缓存了反射的方法调用,这大大提高了性能。反射很慢。但是你的堆栈跟踪与反射无关,这也是我同样关心的问题。sampler说
oracle.net
,但删除反射会降低CPU。我是否遗漏了什么?请小心性能测试,因为它们极易受到厄运和误解的影响。不要反省,再试一次,确保这是你唯一改变的事情——你能重复结果吗?您应该发布两个测试的更完整的代码示例。您看到的是Packet.receive
方法调用需要很长时间,这仅仅是因为数据传输需要时间。但是,等待IO完成导致的CPU负载理论上为0%。因此,更高的CPU负载意味着其间的IO等待更少,这可能是一件好事(在您的情况下可能不是这样)。
oracle.net.ns.Packet.receive()
org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer()
org.apache.tomcat.util.net.NioEndpoint$Poller.run()