我的应用程序不断耗尽内存。我使用大多数类的静态实例来执行没有状态的操作,但我担心这是导致内存泄漏的原因。
我的技术堆栈是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
答案 0 :(得分:0)
这里没有泄漏。至少,不在您发布的代码中。 但是,根据列表的大小以及运行的堆大小,您可能只是因为尝试同时创建“allProducts”列表的多个副本而运行OOM。
也许,最好是缓存“所有产品”列表,让所有客户端使用该单个实例?