Java程序高CPU使用率

时间:2014-10-30 12:07:13

标签: java performance jdbc cpu-usage apache-commons-beanutils

我写了一个java程序,它查询oracle数据库并使用beanutils

将其转换为对象

Load Testing期间 我发现CPU使用率很高。

该计划的概要是:

List<Map<String, List>> rows = queryList(query, new Object[]{params..});
while(rows.hasNext()){
   beanutils.setProperty(obj, field, row.get("some column name"));  
}

DB返回大约350行。

执行程序会使我的CPU达到100%的峰值。

删除beanutils并测试查询 - CPU使用率为30%。

现在,如果我删除beanutils.setProperty并使用getters and setters CPU没有加标(50%)

jvisualvm sampler我找到:

oracle.net.ns.Packet.receive()
org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer()
org.apache.tomcat.util.net.NioEndpoint$Poller.run()

占用大部分Self time CPU

我使用jmeter加载测试(20个并发请求)。 jvisualvm图的BaseLine为0%。所以肯定是因为这个负载测试只有cpu才会出现高峰。

reflection导致高CPU使用率吗?

执行查询例如:queryforlist会增加CPU利用率。

稍后如果我的计算量增加,那么我应该减少访问此api的线程数,因为它会再次激活我的cpu。

提前致谢。

0 个答案:

没有答案