クライアント コードのいくつかのメソッドのベンチマークを行って、それらのメソッドにかかる時間を確認しています。したがって、複数のスレッドを生成するマルチスレッド プログラムを作成し、それらのメソッドがクライアント コードとサーバー側コードでどれだけの時間を費やしているかを測定します。
私は次のように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とMEMORYの使用状況を監視していました-
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
以下は、実行中のスナップショットです。キャプチャしたばかりです