我正在对客户端代码中的几个方法进行基准测试,以查看这些方法花费了多少时间。所以我编写了一个多线程程序,它将产生多个线程,然后我将测量这些方法在客户端代码和服务器端代码中花费的时间。
我有一个ConcurrentHashMap
声明为
public static ConcurrentHashMap<Long, Long> map = new ConcurrentHashMap<Long, Long>();
现在我试图找出在 X 毫秒内返回了多少呼叫,所以我将这些数字存储在上面的地图中。所以上面的地图会存储这样的东西——
KEY will be Milliseconds
and VALUE will be Number of calls came back in those milliseconds.
下面是代码,我有。
final long start = System.nanoTime();
method.getInformation();
final long end = System.nanoTime() - start;
final long key = end / 1000000L;
boolean done = false;
while(!done) {
Long oldValue = map.putIfAbsent(key, 1L);
if(oldValue != null) {
done = map.replace(key, oldValue, oldValue + 1);
} else {
done = true;
}
}
我想看看上面的代码有没有问题?
为什么我要问的是,如果我正在运行我的Multithreading program
,那么server CPU usage
通常会转到周围80-90%
。但是如果我从服务器端代码中删除上述基准测试代码,那么CPU usage
不要去80-90%
. 所以这就是原因,我想看看是否有更好的方法来编写上述基准测试代码来实现上述相同的场景?
谢谢您的帮助。
更新:-
我正在使用 unix 中的 TOP 命令监视服务器端的 CPU 和内存使用情况-
top - 17:13:18 up 25 days, 23:24, 4 users, load average: 1.72, 1.43, 1.04
Tasks: 114 total, 1 running, 111 sleeping, 0 stopped, 2 zombie
Cpu0 : 79.2%us, 5.8%sy, 0.0%ni, 23.1%id, 0.0%wa, 0.0%hi, 1.9%si, 0.0%st
Cpu1 : 83.7%us, 3.7%sy, 0.0%ni, 40.7%id, 0.0%wa, 0.0%hi, 1.9%si, 0.0%st
Mem: 6127684k total, 5122736k used, 1004948k free, 240436k buffers
Swap: 1331196k total, 0k used, 1331196k free, 2485984k cached
下面是它运行时的快照,我刚刚捕获