我写了一个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。
提前致谢。