Google 应用引擎,导入 jar 运行 非常慢
Google app engine, imported jar running very slowly
我已将代码从 eclipse 项目导出到 jar 文件。当我在另一个标准 java 项目中访问此 jar 文件时,它需要不到 5 分钟的时间才能完成。在 Google App Engine 上的 servlet 上,需要将近一个小时才能完成。这只是使用 Google App Engine 的一个特性,还是可能存在其他问题?我正在使用带有 cron 作业的 servlet 来更新数据存储,但是写入数据存储所花费的时间只是总时间的一小部分 运行。
更新
该代码使用朴素贝叶斯分类器为大量新闻文章标记公司名称并与文章相关。这就是程序需要的时间长度的原因,但不是它在 App Engine 上需要这么多时间的原因。
很难在不亲眼看到的情况下优化程序,但这里有一些提示。
如果不受约束,App Engine 上的代码执行速度与任何地方一样快。您应该查看数据访问时间(阅读文章的速度)、数据写入时间、and/or 内存限制。与您描述的应用类似的应用往往需要大量内存。
您可以在 App Engine 控制台上查看内存统计信息。如果您遇到限制,您可以使用更大的实例,或者将您的处理负载分成更小的块。
如果将负载拆分为单独的任务并使用任务队列,则可以在单个实例上利用多个线程 运行。当涉及 reading/writing 数据时,这通常是一个巨大的性能提升。
确保在 reading/writing 数据时使用正确的块大小。例如,数据存储区中的查询的默认块大小为 10,而您最多可以将其增加到 1,000。相同的逻辑适用于 Datastore put。当您 read/write 数千个实体时,它会在性能上产生很大差异。这也适用于其他存储选项。
作为比较的数据点,我能够定期从 Internet 获取(这比从存储设备慢得多)并每小时处理数百万个文档(提取、清理、索引等) App 引擎实例。
我已将代码从 eclipse 项目导出到 jar 文件。当我在另一个标准 java 项目中访问此 jar 文件时,它需要不到 5 分钟的时间才能完成。在 Google App Engine 上的 servlet 上,需要将近一个小时才能完成。这只是使用 Google App Engine 的一个特性,还是可能存在其他问题?我正在使用带有 cron 作业的 servlet 来更新数据存储,但是写入数据存储所花费的时间只是总时间的一小部分 运行。
更新
该代码使用朴素贝叶斯分类器为大量新闻文章标记公司名称并与文章相关。这就是程序需要的时间长度的原因,但不是它在 App Engine 上需要这么多时间的原因。
很难在不亲眼看到的情况下优化程序,但这里有一些提示。
如果不受约束,App Engine 上的代码执行速度与任何地方一样快。您应该查看数据访问时间(阅读文章的速度)、数据写入时间、and/or 内存限制。与您描述的应用类似的应用往往需要大量内存。
您可以在 App Engine 控制台上查看内存统计信息。如果您遇到限制,您可以使用更大的实例,或者将您的处理负载分成更小的块。
如果将负载拆分为单独的任务并使用任务队列,则可以在单个实例上利用多个线程 运行。当涉及 reading/writing 数据时,这通常是一个巨大的性能提升。
确保在 reading/writing 数据时使用正确的块大小。例如,数据存储区中的查询的默认块大小为 10,而您最多可以将其增加到 1,000。相同的逻辑适用于 Datastore put。当您 read/write 数千个实体时,它会在性能上产生很大差异。这也适用于其他存储选项。
作为比较的数据点,我能够定期从 Internet 获取(这比从存储设备慢得多)并每小时处理数百万个文档(提取、清理、索引等) App 引擎实例。