超出软私人内存限制

时间:2013-03-20 19:45:45

标签: google-app-engine memory-leaks google-cloud-datastore go

我们有一个很糟糕的经历。当我们的应用程序是免费的时,我们从未遇到过超出软内存限制的问题。我们击中了配额,因此我们决定付款。我们的每日预算定为3美元。激活付费服务后,我们再次使用该网站,超额配额消失了。几个小时之后,我们得到了超出软内存限制,除此之外再也看不到了。我试图清除数据存储区中的一些大数据,禁用内置的内存,但仍然没有运气。

我在代码中对故障的来源进行了一些测试。删除数据存储区访问代码,使网站重新启动。所以我的结论是访问数据存储区甚至只是为了获取很少的实体会引发这样的错误。我们有点无望。我们选择使用appspot来利用这项技术,但我们得到了这个,因为我们无法继续开发。

以下是引发此类错误的代码。

q := datastore.NewQuery("Course")
    courses := make([]courseData, 0)
    if keys, err := q.GetAll(c, &courses); err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    } else {
      for i := range courses {                 
          courses[i].Key = keys[i]
      }                           
    }

您可以向我们提供的任何帮助都将受到高度赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:3)

根据我的经验,此消息通常意味着您的实例使用的内存比实例类支持的内存多。如果您开始将此消息升级到下一个实例类(F2等)并查看它是否消失。这是您在模块配置文件中执行的更改(以前位于“应用程序设置”部分的管理控制台中)。很可能问题会消失,除非你使用的内存比下一课所能支持的多。

与自动扩展到预算限制的其他资源不同,RAM不是;如果请求导致实例超出其实例类的RAM限制,则实例将在请求结束时终止,并记录此消息。