gpt4 book ai didi

java - 为数据密集型应用程序的 JVM 提供适当的堆和旧代大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:36 24 4
gpt4 key购买 nike

  • 我正在使用 JVM sunjava-1.6.0_21 运行服务器应用程序。
  • 我的应用程序数据量大,充当缓存服务器。所以它存储了很多我们不希望在整个应用程序运行过程中获得 GC 的长期生存数据。
  • 我正在设置以下 JVM 参数 -Xmx16384M-Xms16384M
  • 加载所需数据后,应用程序的内存使用情况如下
  • 总堆空间为:13969522688
  • 最大堆空间为:15271002112
  • 可用堆空间为:3031718040
  • 长期(老一代)堆存储:Used=10426MB Max=10922MB
    已用/最大=95%

老一代使用 - 我已经确认这是由于实际数据,预计不会免费。我的问题是,默认情况下 JVM 堆空间的大小(它分配 10922MB old gen),这会在 old gen 部分留下非常少的可用空间。

  • old gen 中较少的可用空间会影响应用程序吗?
  • 如果是,我该如何处理?我应该试验 JVM 调整参数,如 newratio 并尝试增加旧代的可用空间,还是我应该调整应用程序的任何其他方式。

最佳答案

Can less free space in old gen impact the application?

如果您的 Tenured Gen 已满,将发生一次大型收集,并且这种类型的收集成本很高。您可以使用选项:-verbose:gc-XX:+PrintGCDetails 来了解 Full GC 是否过于频繁。如果是这种情况,那么它会影响您的应用程序的性能。

If yes, how should I handle this? Should I experiment with JVM tuning parameters like newratio and try to increase space available for old gen or any other way I should tune the application.

您可以尝试 NewRatio,但请记住,如果您的 eden 太短,您的 tenured gen 可能会更快地被填满。

总而言之,您应该使用监控工具来更好地了解您必须使用的 VM 选项。它会很容易地告诉你在应用程序执行期间你的世代是如何填充的,它比 gc 日志更容易阅读和理解;)

关于java - 为数据密集型应用程序的 JVM 提供适当的堆和旧代大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10925169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com