- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我读到的关于 AppEngine 数据库(用于 Java)的最常见的提示之一是它在“冷启动时间”方面极其缓慢。这是什么意思?这是我应该担心的事情吗?
最佳答案
这是你应该担心的事情。
当您的应用在特定时间段内没有任何请求时,Google App Engine 会启动一个新的 JVM 来处理请求。从“冷”获取数据存储的句柄——即第一次在 JVM 中——可能需要相当长的时间,多达 5 秒以上。
在您处理数据存储(通常是 PersistenceManager
的一个实例)之后,一切都很好(对于 JVM 的生命周期而言!)。
编辑:
在 GAE-Java 中启动新的 JVM 也很慢。阅读http://code.google.com/appengine/docs/java/datastore/overview.html并且您会看到他们使用 Singleton 类来实现 PersistenceManagerFactory
的可用性,因为他们将实例化一个操作描述为“昂贵”。
您可以自己测试一下。在 GAE-Java 上创建一个仅返回“Hello World!”的全新应用程序你会发现对应用程序的第一个请求需要几秒钟。
为 PersistenceManagerFactory
添加一个请求,你会发现第一个请求多花了几秒钟。
编辑编辑:
为了您的观看乐趣,我现在创建了这个测试:
http://stackoverflowanswers.appspot.com/helloworld
您将立即看到“Hello, world 0”或“Hello, world xxxx”,其中 xxxx 是 MS 中获取数据存储句柄所需时间的计数。我认为数据存储中索引的复杂性和数量可能会影响处理数据存储所需的时间,因为在这个应用程序中它比在我的其他一些应用程序中更快。
PMF 是应用引擎文档中提供的副本。
@SuppressWarnings("serial")
public class HelloWorldServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
long a = System.currentTimeMillis();
PersistenceManager p = PMF.get().getPersistenceManager();
long b = System.currentTimeMillis() - a;
resp.setContentType("text/plain");
resp.getWriter().println("Hello, world "+b);
}
}
编辑编辑:
我更改了我的代码,以便它为每个请求实例化一个 PersistenceManagerFactory
,现在它抛出 500 个服务器错误,并在日志中:
javax.jdo.JDOFatalUserException: Application code attempted to create a PersistenceManagerFactory named transactions-optional, but one with this name already exists! Instances of PersistenceManagerFactory are extremely slow to create and it is usually not necessary to create one with a given name more than once. Instead, create a singleton and share it throughout your code. If you really do need to create a duplicate PersistenceManagerFactory (such as for a unittest suite), set the appengine.orm.disable.duplicate.pmf.exception system property to avoid this error.
我认为我不需要提供任何更多证据来证明在 App Engine 中处理数据存储很慢。
关于database - AppEngine 数据库 "cold start time"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2757103/
我想实现 relative complement两个有限的 Observable 序列,这是我迄今为止得到的最好的: function relativeComplement (setA, setB,
我正试图在服务器软件中寻找一个看起来像内存泄漏的非常难以捉摸的错误,但 memcheck 根本没有帮助。我的猜测是,已经实例化且从未移除的内存确实没有泄漏,因此存在对它的引用,但现在对程序无用,应该移
我想在 ColdFusion 中设置一个简单的计划任务。我将无权访问管理员。所以我打算用 我对此的解释是你把一个 带有 action="update" 的标签相关服务器页面上的属性,并运行一次。如果是
据说here Aerospike 应该尝试在热模式下启动,这意味着重用相同的保存键的内存区域。相反,每次数据库重新启动时,所有 key 都会从 SSD 驱动器加载回来,这可能需要数十分钟甚至数小时。我
TL;DR:如何创建一个仅在冷时创建订阅并在热时对任何其他订阅调用进行排队的 Observable? 我想创建一个一次只能执行一个订阅的 Observable。如果有任何其他订阅者订阅了 Observ
如果有人能够向我解释该语句与数据库相关的冷状态是什么意思。 最佳答案 缓存为空,没有表数据或索引预加载到内存中,等等。基本上,数据库处于您刚刚启动它(和机器)的状态。 关于mysql - 语句 'co
我知道取消订阅 Observable 以防止内存泄漏是一种很好的做法。 但是如果它是Cold Observable,我还应该取消订阅吗? 例如 Http.get() 返回的例子 最佳答案 你不需要这样
我查看了以下 SO 问题: What are the Hot and Cold observables? 总结: 冷可观察对象在有观察者使用它们时发出其值,即观察者接收到的值序列与订阅时间无关。所有观
我有一个元素部分。这个元素现在只有 3 个,但我仍在添加新元素。问题是,当屏幕尺寸在 768px 和 1200px 之间时,我的 div 是 2 行,而第 3 行是新行,没关系,但是有可能成为行中心的
这是硬件: Wythoff 的游戏有两个玩家,在这个例子中有 3 堆石子。每个玩家轮流从堆中取出石头,如果玩家捡起最后一 block 石头,则玩家获胜。每个回合玩家可以从一堆中取出 N 颗石子,从两堆
7-8 天以来,我在使用 Android Emulator 时遇到问题。起初它根本没有运行,现在重新安装模拟器解决了这个问题,但又产生了新的问题。 每当我运行模拟器时,它都会花费很多时间,大约 5-6
在 this文章中,描述了一种在 gcc 中移动错误代码的技术,以帮助尽可能地优化热路径的大小。这方面的一个例子是: #define unlikely(x) __builtin_expect (!!
我的观察对象是这样定义的 val initLoading = Observable.fromCallable { println("${System.currentTimeMillis()}"
我读到的关于 AppEngine 数据库(用于 Java)的最常见的提示之一是它在“冷启动时间”方面极其缓慢。这是什么意思?这是我应该担心的事情吗? 最佳答案 这是你应该担心的事情。 当您的应用在特定
我记得 lightfm 的优点之一是模型没有冷启动问题,用户和项目都冷启动:lightfm original paper 但是,我仍然不明白如何使用lightfm 来解决冷启动问题。我在 user-i
我可以从文档中看到: Cold Observables 从一开始就向每个 Observer 发出整个值序列。 和 ReplaySubject 向任何观察者发送源 Observable 发出的所有项目,
是否有明确的方法来识别“冷启动”?是在 Lambda 本身的运行时,还是通过日志?我知道冷启动的特点是运行时间更长,我实际上可以看到,但我正在寻找一种明确的方法。 如果这很重要,我正在使用 Node.
不,我的第二个问题的答案不是冬天。 前言: 我最近对 Entity Framework 做了很多研究,一直困扰我的是它在查询未预热时的性能,即所谓的冷查询。 我浏览了performance consi
Win2019上的CF2018尝试将用户上传的 .xlsx 文件另存为 .csv 文件以在 Oracle 数据库中处理。运行此代码,它完成时没有错误,但结果不清晰: .csv 文件中的结果如下所示
我正在使用 MVC3、ASP.NET4.5、EF5、SQL Azure。 我目前使用外部自动 ping 服务(pingdom 和 uptime robots)对特定网址(而非全部)执行 ping 操作
我是一名优秀的程序员,十分优秀!