0

Caliperでベンチマーク メソッドを実行しようとすると、測定が完了する前に終了します。デバッガーで、Caliper が予行演習段階でベンチマーク メソッドを 2 回実行していることを確認しました。しかし、実験を実行しようとすると、何も完了する前に終了します。

ベンチマーク メソッドは非常に単純です (ただし、他の多くのアプリケーション コードを呼び出します)。

@Benchmark
public int testNewOrder(int reps) {
    OrderRequest newOrder = this.newOrder;
    for (int i = 0; i < reps; i++) {
        router.getWorker().processOrderRequest(USER_CONN_ID, newOrder, System.currentTimeMillis());
        mockFixEngineManager.clear();           
    }
    return 10;
}

で実行し--verboseても、私が見ることができる別の出力は得られません。出力全体は次のとおりです。

Experiment selection: 
  Instruments:   [allocation, runtime]
  User parameters:   {}
  Virtual machines:  [default]
  Selection type:    Full cartesian product

This selection yields 2 experiments.
Starting experiment 1 of 2: {instrument=allocation, benchmarkMethod=testNewOrder, vm=default, parameters={}}… The worker exited without producing data. It has likely crashed. Run with --verbose to see any worker output.

私はJDK 1.7.0_40を使用してWindows 7で実行しています(違いがある場合)。デバッガーを使用して Caliper コードを実行したところ、次のように終了していることがわかります。

// ExperimentingCaliperRun.java, line 384

     processFuture.addListener(new Runnable() {
        @Override public void run() {
          if (!pipeReaderFuture.isDone()) {
            // the process completed without the pipe ever being written to.  it crashed.
            // TODO(gak): get the output from the worker so we can know why it crashed
            stdout.print("The worker exited without producing data. "
                + "It has likely crashed. Run with --verbose to see any worker output.\n");
            stdout.flush();
            System.exit(1);
          }
        }
      }, MoreExecutors.sameThreadExecutor());

pipeReaderFuture.isDone()false を返します。理由はわかりません。stderr に書き込まれるエラーはありません。

4

1 に答える 1

0

これはCaliper Issue #230でした。私が障害の詳細を投稿した後、開発者は修正を投稿することができました。修正を入手するには、 Git リポジトリから最新のものをプルして修正を入手する必要があります。

于 2014-01-10T20:19:55.290 に答える