我的Java代码是否导致内存泄漏

时间:2015-01-09 16:04:48

标签: java heroku memory-leaks playframework out-of-memory

我的应用程序不断耗尽内存。我使用大多数类的静态实例来执行没有状态的操作,但我担心这是导致内存泄漏的原因。

我的技术堆栈是heroku/playframework 1.2.7/mongodb (compose.io)

我的基本模式是:

public class Product{

  public productName;
  public productDesc;
  public productPrice;

  private static final Product INSTANCE = new Product();

  public static Product instance() {
      return INSTANCE;
  }

  // an example (not actual) method is
  public List<Product> listAllProducts(String brand, String category){
       //not the actual DB code
       Db.connect().find(Product.class).listAllItems(brand, category);   
  }

}

我这样使用

 List<Product> products = Product.instance().listAllProducts("hugo-boss", "jeans");

此代码是否存在根本性问题导致Web应用程序中的内存泄漏,但并不是大量的并发用户?

感谢您的帮助。

更新 heroku config:set _JAVA_OPTIONS="-Xms256m -Xmx384m -Xss512k -XX:+UseCompressedOops"暂时没有工作。

我启用了一个在日志中提供内存信息的附加组件,这是我得到的内容:

2015-01-09T16:18:58.614435+00:00 heroku[web.3]: source=web.3 dyno=heroku.18312286.ad920471-c3dd-4d5d-a55b-28ea79905c14 sample#load_avg_1m=3.65
2015-01-09T16:18:58.614631+00:00 heroku[web.3]: source=web.3 dyno=heroku.18312286.ad920471-c3dd-4d5d-a55b-28ea79905c14 sample#memory_total=439.86MB sample#memory_rss=438.86MB sample#memory_cache=1.00MB sample#memory_swap=0.00MB sample#memory_pgpgin=138042pages sample#memory_pgpgout=25438pages
2015-01-09T16:19:10.683077+00:00 heroku[web.2]: source=web.2 dyno=heroku.18312286.910cbbef-7613-4daf-a856-230e08618cc7 sample#load_avg_1m=1.90 sample#load_avg_5m=0.86
2015-01-09T16:19:10.683364+00:00 heroku[web.2]: source=web.2 dyno=heroku.18312286.910cbbef-7613-4daf-a856-230e08618cc7 sample#memory_total=367.73MB sample#memory_rss=365.02MB sample#memory_cache=2.71MB sample#memory_swap=0.00MB sample#memory_pgpgin=141344pages sample#memory_pgpgout=47205pages

1 个答案:

答案 0 :(得分:0)

这里没有泄漏。至少,不在您发布的代码中。 但是,根据列表的大小以及运行的堆大小,您可能只是因为尝试同时创建“allProducts”列表的多个副本而运行OOM。

也许,最好是缓存“所有产品”列表,让所有客户端使用该单个实例?