0

MapReduceフレームワークを使用してGoogleAppEngineで作業(この場合はMD5ブルートフォーサー)を行う実験を行っています。

開発サーバーを使用しているだけでも、GAE内でコードの実行が非常に遅いという問題があります

このコードhttps://github.com/jordan-thoms/Hash/blob/f982956f41313cd4fe3b5105aee21ea11bd3af16/src/nz/net/thoms/hash/mapreduce/HashMapper.javaは、1秒あたり約4,000回のハッシュのみを処理します(これは単一の内部の時間です) map()を呼び出すと、その内部で使用されるgoogle app engine apiはまったくありません)。

コードを外部に持ち出し、スタンドアロンで実行しました-https ://github.com/jordan-thoms/Hash/blob/f982956f41313cd4fe3b5105aee21ea11bd3af16/src/nz/net/thoms/hash/StandaloneTest.java、そのバージョンは100万を超えます毎秒。実行速度が遅いのは中央ループです。これは、そのコードのいずれもGoogleAppEngineとは関係がないため奇妙です。

Google App Engineコードでプロファイラーを実行してみましたが、有用なものは見つかりませんでした。checkRestricted()などを大量に呼び出しているようです。セキュリティマネージャを削除してみました

この単純なコードでさえ:

        int i;
    for (i=0; i< 1000000; i++) {
        i += 2;
        i += (int) Math.sin(i * (i + (int) System.currentTimeMillis()));
    }
    long enda = System.currentTimeMillis();
    System.out.println("took " + (enda - starta) + " i:" + i);

通常のプログラムに入れると117ミリ秒で実行され、同じプロセッサの開発者モードのサーブレット内では400ミリ秒以上実行されます。

(興味深いことに、マッパーは本番のGoogle App Engineで1秒あたり約60,000のハッシュを実行します。したがって、スタンドアロンプ​​ログラムと比較すると、はるかに高速ですが、それでも非常に低速です)

4

3 に答える 3

1

デフォルトのフロントエンドインスタンスには、128MBのメモリと600MHzのCPU制限があります。これは、パフォーマンスの違いを説明する可能性があります。

于 2012-04-28T06:39:56.810 に答える
0

MapReduceは、純粋なHadoopマッパーと比較して遅いすべてのデータストアエンティティを反復処理します。ブロブを反復処理するか、ハッシュをチャンクにグループ化することを検討してください。1つのマッププロセスで10分間の作業を処理できることを覚えておいてください。そうすれば、処理するデータの各チャンクの最適なサイズを決定できます。

于 2012-05-04T16:09:23.160 に答える
0

CPU バウンド タスクでの私の測定によると、アプリケーション エンジンは、インスタンスの仕様から予想されるよりも約 10 倍遅くなります。たとえば、2.5 GHz マシンで通常 3 秒かかる計算は、2.4 GHz バックエンド インスタンスでは通常 30 秒かかります。

ローカル開発モードに関しては、アプリ エンジンのすぐに使えるパフォーマンスはさらに低下します。ただし、特にカスタム クラス ローダーを使用する場合は、vm 引数 -Dappengine.disableRestrictedCheck="true" を設定することで、これをある程度軽減できます。

于 2015-07-15T08:52:02.683 に答える