2012-01-12 11 views
1

みんな私がメモリリークの原因を見つけるのを助けてくれますか?それは狂気私を駆動する:(((データサーバでDataStore APIを使用しているときにメモリリークが発生する理由(本番環境ではテストされていません)

私はGAE SDK 1.6.1を使用しています私は、単一のサーブレットとサンプルプロジェクトを作成しdoGetメソッド以下、このサーブレットへ

protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException 
{ 
    { 
     DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 

     System.out.println(); 
     for (long i = 1; i <= 10000000; ++i) 
     { 
      Entity entity = new Entity("Visitor"); 
      entity.setProperty("name", "Name is " + i); 
      entity.setProperty("value", "Value is " + i); 
      Key key = datastore.put(entity); 
      System.out.println(key.getId()); 
     } 
    } 
} 

コールのOutOfMemory例外で失敗その含まれているため。すべての一時データストアオブジェクトは、メモリ内に残っている。ここで

YourKitのJavaプロファイラを使用して得られた開催されたオブジェクトへの着信参照の木である。

enter image description here

なぜ誰が知っていますか?どうすればこれを避けることができますか?開発環境にGAE固有のバグか何かがありますか?

ありがとうございました!

+0

はい、あなたの質問に答えます。 –

+0

これはdev_appserverまたは本番環境で発生しますか? –

+0

これはdev_appserverで発生します。私は生産については分かりません。私は 'http:// alphahuber.appspot.com/test'にアップロードした後、メモリが足りなくなる前に' DeadlineExceededException'をスローします。しかし、一方で私はGAEのインスタンス上にどのように大きなヒープがあるのか​​分かりません。 – expert

答えて

0

Ikai Lan(Google)がと言っているスレッドthisが見つかりました。「開発サーバーのデータストアスタブはメモリマップ内にあり、ディスクに保存されています。

多分私の質問に答えます。

関連する問題