当前位置: 首页 > 面试题库 >

完整的GC实时时间比用户+ sys时间要多得多

艾泉
2023-03-14
问题内容

我们在JBoss上运行了一个基于Web Java的应用程序,允许的最大堆大小约为1.2 GB(计算机的总物理内存为2
GB)。在某些时候,应用程序停止(对客户端)响应几分钟。经过分析,我们发现罪魁祸首是Full GC。这是详细GC日志的摘录:

74477.402:[完整GC [PSYoungGen:3648K-> 0K(332160K)] [PSOldGen:778476K->
589497K(819200K)] 782124K-> 589497K(1151360K)[PSPermGen:102671K->
102671K(171328K)],646.1546860秒] [ 时间:user = 3.84 sys = 3.72,真实= 646.17秒 ]

我不了解的是,完全GC上花费的 实时时间 大概为11分钟(646秒),而 用户+系统时间
仅为7.5秒,这是怎么可能的。在我看来,7.5秒钟听起来比在老一代上清理<200 MB花费的时间要合理得多。其他所有时间都去哪里了?

非常感谢。


问题答案:

其他所有时间都去哪里了?

您的应用程序很可能导致虚拟内存崩溃。基本上,您的应用程序需要的虚拟内存页面远远多于可容纳它们的物理页面。结果,它花费大部分时间等待从磁盘读取和写入磁盘的vm页面。

有关更多信息,请阅读此Wikipedia页面。

解决方法是减少虚拟内存使用量或增加系统上的物理内存量。例如,您可以:

  • 在计算机上运行更少的应用程序,
  • 减少Java应用程序堆大小,或
  • 如果您在虚拟机中运行,请增加虚拟机的物理内存分配。

(但是请注意,减小JVM堆大小可能是两把剑。如果您减小堆大小,则应用程序将因OutOfMemoryErrors死掉,浪费太多时间进行垃圾收集,或遭受无法有效地缓存事物的痛苦)



 类似资料:
  • 我在生产中遇到了一个奇怪的问题,在操作了5年多后只发生过一次。我们发现,PSPermGen和“real”持续时间远远高于User+SYS时间。2016年2月4日,PSPermGen花了38.96秒,而以前的运行是0.2-0.3秒,并且没有释放内存。当User+SYS为0.3-0.4秒时,实时时间需要40秒,与以前的运行相比,这是异常高的。完全的GC并不经常发生,我也没有观察到任何与GC相关的错误。

  • 本文向大家介绍完整运行一次自动化用例需要多久时间?相关面试题,主要包含被问及完整运行一次自动化用例需要多久时间?时的应答技巧和注意事项,需要的朋友参考一下 主要跑的是业务流,所以跑一次需要半个小时左右

  • 问题内容: 我正在尝试加速我的代码,这部分给我带来了问题, 我尝试使用Cython,然后按照此处给出的建议进行操作,但是我的纯python函数的性能优于cython和cython_optimized函数 cython代码如下: 然后,我运行以下命令: 结果如下: 对于纯python: 对于非优化的cython: 对于优化的: 我究竟做错了什么 ? 谢谢你的帮助, 问题答案: 使用Numba的解决方

  • 我在试着比较时间和瞬间。这是我的剧本 这是我的表格 从< code > console . log(today . format(" hh:mm "))我得到这个结果< code>01:44。 在上面的脚本中,我总是转到<code>或<code>,因此有任何方法可以修复它吗? 这是我的小提琴 https://jsfiddle.net/s9wfh9ye/33/ 我的更新问题

  • 问题内容: 我想从一个Twitter用户获得所有用户推文,到目前为止,这是我想出的: 请忽略不必要的导入。一个问题是,这只会获得用户最近的推文(或前20条推文)。是否可以让所有用户发布推文?据我所知,GEt_user_timeline(?)仅允许限制为3200。是否有办法获得至少3200条推文?我究竟做错了什么? 问题答案: 您的代码存在一些问题,包括一些多余的导入。特别是,你不需要和-能够处理你

  • 我试图用python和tweepy检索一个包含我个人twitter状态全部内容的列表。 我已经通过OAuth成功验证了身份,但似乎无法从twitter收到超过800条状态更新。我的推特个人主页说我有2000多条推特。我完全在推特对我们施加的3200条推特限制之内。 任何帮助都将不胜感激! 这是我当前的代码(减去OAuth API身份验证):