【问题标题】:Google app engine, imported jar running very slowly谷歌应用引擎,导入的jar运行很慢
【发布时间】:2015-02-07 00:32:19
【问题描述】:

我已将代码从 Eclipse 项目导出到 jar 文件。当我在另一个标准 java 项目中访问这个 jar 文件时,它需要不到 5 分钟的时间来完成。在 Google App Engine 上的 servlet 上,它需要将近一个小时才能完成。这只是使用 Google App Engine 的一个功能,还是可能有其他问题?我正在使用带有 cron 作业的 servlet 来更新数据存储,但是写入数据存储所花费的时间只是总运行时间的一小部分。

更新

该代码使用朴素贝叶斯分类器为大量新闻文章标记公司名称并与文章相关。这就是程序需要的时间长度的原因,但不是它在 App Engine 上需要更多时间的原因。

【问题讨论】:

  • 您需要对其进行分析以查看发生了什么。甚至 5 分钟对于 Java 代码的执行来说都是很长的时间——它必须等待某些东西或运行很多循环。
  • @AndreiVolgin 更新问题

标签: java google-app-engine jar


【解决方案1】:

不看就很难优化程序,但这里有几点建议。

App Engine 上的代码在不受限制的情况下执行速度与任何地方一样快。您应该查看数据访问时间(阅读文章的速度)、数据写入时间和/或内存限制。像您描述的应用程序往往需要大量内存。

  1. 您可以在 App Engine 控制台上查看内存统计信息。如果遇到限制,您可以使用更大的实例,也可以将处理负载分成更小的块。

  2. 如果将负载拆分为单个任务并使用任务队列,则可以利用在单个实例上运行的多个线程。当涉及读取/写入数据时,这通常会极大地提升性能。

  3. 确保在读取/写入数据时使用正确的块大小。例如,数据存储区中的查询的默认块大小为 10,而您可以将其增加到 1,000。相同的逻辑适用于 Datastore put。当您读/写数千个实体时,它会对性能产生很大影响。这也适用于其他存储选项。

作为比较的数据点,我能够从 Internet 获取(这比从存储中慢得多)并在常规 App Engine 上每小时处理数百万个文档(提取、清理、索引等)实例。

【讨论】:

    猜你喜欢
    • 2011-10-10
    • 2012-02-08
    • 1970-01-01
    • 2011-09-18
    • 2011-01-10
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    相关资源
    最近更新 更多