gpt4 book ai didi

java - 这是 GAE 内存泄漏的证据吗?

转载 作者:行者123 更新时间:2023-11-30 09:33:13 26 4
gpt4 key购买 nike

根据 autocreateDatastoreTxns 的设置,我遇到内存泄漏,为每个查询(读取)创建以下每个类的一个实例。即 100 个查询创建以下每个类的 100 个实例(使用DatastoreServiceConfig 的异常(exception)情况,每个查询获取 2 个实例)。

我在开发环境中使用 Java VisualVM 探查器发现了这一点。我这样做的原因是在生产中,我们的实例堆大小不断增长(通常变得太大在 10-20,000 个请求之后)最终导致响应缓慢和实例重启。我不知道这是否是原因,但这是迄今为止我能够识别的第一个泄漏。

//datanucleus.appengine.autoCreateDatastoreTxns=false 泄漏

org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManager
org.datanucleus.store.appengine.KeyRegistry
org.datanucleus.store.appengine.EmualtedXARResource
org.datanucleus.store.appengine.DatastoreConnectionFactoryImpl$DatastoreManagedConnection

//datanucleus.appengine.autoCreateDatastoreTxns=true 泄漏

com.google.appengine.api.datastore.DatastoreServiceConfig  // 2 instances per query
org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManager
com.google.appengine.api.datastore.AsyncDatastoreServiceImpl
com.google.appengine.api.datastore.DatastoreServiceImpl
org.datanucleus.store.appengine.jdo. DatastoreJDOTransation
com.google.appengine.api.datastore.DatastoreXARResource
com.google.appengine.api.datastore.DatastoreProperty
com.google.appengine.api.datastore.KeyRegistry
com.google.appengine.api.datastore.DatastoreConnectionFactoryImpl$DatastoreManagedConnection
com.google.appengine.api.datastore.TransactionStackImpl$ThreadLocalTransactionStack$StaticMember
com.google.appengine.api.datastore.TransactionStackImpl
org.datanucleus.store.appengine.RuntimeExceptionWrapperingDatastoreService

这是我的代码:

PersistenceManager pm = PMF.get().getPersistenceManager();
try {
account = pm.detachCopy(pm.getObjectById(Account.class, accountKey));
} catch (javax.jdo.JDOObjectNotFoundException ex) {
account = null;
} finally {
pm.close();
}

有什么想法/想法吗?这是 Google AppEngine 中真正的内存泄漏,还是开发环境的真实情况,或者是我自己的错误?

最佳答案

开发应用服务器旨在模拟真实应用服务器的语义,以便您能够以合理的保真度进行开发。这不包括内存行为,特别是关于数据存储。开发服务器倾向于以真正的应用程序服务器不具备的方式将内容保存在内存中。对开发服务器进行分析仍然有助于解决应用程序端的泄漏问题,但不会为您提供太多有关应用程序服务器端可能存在的泄漏问题的指导。不过,我们确实会注意这些。随着时间的推移,堆会产生碎片。

一些应用程序,根据其使用和数据访问模式的性质,受益于更大的前端实例。这些成本更高,因此您必须针对增加的成本测试和权衡 yield 。

关于java - 这是 GAE 内存泄漏的证据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12327158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com