【发布时间】:2011-09-20 00:27:25
【问题描述】:
有哪些工具或最佳实践可用于在内存密集型请求突发期间优雅地降级 Java 服务中的服务?有问题的应用程序是多线程的。处理每个请求所需的工作量可能会有很大差异,并且不容易拆分和并行化。
我对编写涉及堆使用和 GC 的应用程序级代码持谨慎态度,但我们发现应用程序可能会因处理多个密集请求而陷入困境,这意味着内存不足错误或完全 GC。通常完整的 GC 无法找到任何要释放的内存。
长话短说:我正在考虑添加一些限制或排队功能来预先解决此类问题。
任何想法或建议表示赞赏。
【问题讨论】:
-
我假设您已经分析了您的应用程序以确保您不会减少使用的内存量。您还检查过您无法获得更大的服务器,一台 16 GB 的 PC 可能要花费您 1000 美元。
-
Peter - 是的,我们已经对应用程序进行了分析,看看我们可以在哪里减少内存使用。更多的物理内存,更大的服务器——这些选项可能不会导致 GC 时间更长、更痛苦吗?
-
GC的成本与使用量成正比,与free量成反比。如果您使用相同数量的内存,则 GC 暂停将相同,但频率要低得多。如果你使用更多内存,它会更长,但这比彻底失败要好。
标签: java performance memory