2

メモリリークを見つけてもらえますか?私はC++の世界から来て、Javaのメモリリークは私のコードによれば私には一時的なオブジェクトへの参照がないので、私にとってはちょっと変わったことです。オブジェクトをGAE Datastoreに保存した後にメモリリークが発生する

私はGAE SDK 1.6.1とObjectify 3.1を使用しています。

GAE開発サーバーのバックエンドインスタンスで実行されている以下の方法があります(これはおそらく問題とは無関係です)。 ObjectifyDAOのコンストラクタで

private void loadProtoBufdata() throws Exception 
{ 
    ObjectifyDAO dao = new ObjectifyDAO(); 

    for (long count = 0; count < 100; ++count) 
    { 
     Visitor visitor = new Visitor(); 
     visitor.setKey(count + 1); 
     dao.ofy().put(visitor); 
    } 

    dao = null; 
} 

それは

public ObjectifyDAO() 
{ 
    super(new ObjectifyOpts().setSessionCache(false).setGlobalCache(false)); 
} 

そしてVisitorのように初期化されています、私はメモリリークをキャッチするJProfilerを7.0.1を使用してい

public class Visitor 
{ 
    @Id 
    Long key; 
    Long ek; 
    @Unindexed String ip; 
    Date t; 
    @Unindexed Long lzVisit; 
} 

のと同じくらい簡単です。このコードを実行した後、私は com.google.storage.onestore.v3.OnestoreEntity$PropertyValuecom.google.storage.onestore.v3.OnestoreEntity$Propertyの数メガバイトを持っています。

私はJProfilerからスクリーンショットをアップロードしたので、この投稿を爆破したくありません。

参照ツリーはhereです。割り当てツリーはhereです。

Objectifyのトラッカーにはthis bugが見つかりました.Google Ground for GAEにはthis threadが見つかりました。だから私は誰のバグか分からない。

質問:

1)メモリリークを回避するにはどうすればよいですか? 2)プロダクションでは起こりますか?

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

PS。ニック、私はあなたがこれを読んでいることを知っています。 :)

+0

[データストアAPIをデベロッパサーバーで使用するとメモリリークが発生する理由は?](http://stackoverflow.com/questions/8843975/why-memory-leaks-occurs-when-using -datastore-api-on-dev-server-not-tested-in-pr) – expert

答えて

2

がメモリを分析するための素晴らしいですが、何かが参照にぶら下がっている、メモリリークがある場合

http://wiki.eclipse.org/index.php/MemoryAnalyzer#Getting_a_Heap_Dump

を参照してくださいリークしhttp://www.eclipse.org/mat/をチェックしてください助けてください。 MATのようなツールは、それらのオブジェクトにぶら下がっているものを見るのに役立ちます。

また、本番環境でテストを試してみることもできます。メモリの使用状況は、appspot.comのインスタンスビューで確認できます。プロダクションAppengineは時々、全く異なる動作をすることがあります。

関連する問題