当前位置: 首页 > 知识库问答 >
问题:

为什么G1 collertor在对象复制上花费了这么多时间

南宫海超
2023-03-14

我的java选项是:

java -Dsun.zip.disableMemoryMapping=true -Xmx18g -Xms8g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log -XX:NewSize=1500m -XX:MaxNewSize=1500m

以下是我的gc日志:

    2016-12-22T09:45:51.567+0800: 145356.468: [GC pause (G1 Evacuation Pause) (young), 4.0553815 secs]
        [Parallel Time: 4052.5 ms, GC Workers: 28]
          [GC Worker Start (ms): Min: 145356469.0, Avg: 145356469.4, Max: 145356469.9, Diff: 0.9]
          [Ext Root Scanning (ms): Min: 0.6, Avg: 1.0, Max: 1.8, Diff: 1.2, Sum: 29.1]
          [Update RS (ms): Min: 12.0, Avg: 12.4, Max: 13.2, Diff: 1.2, Sum: 348.4]
             [Processed Buffers: Min: 9, Avg: 13.5, Max: 24, Diff: 15, Sum: 379]
          [Scan RS (ms): Min: 0.0, Avg: 0.1, Max: 0.2, Diff: 0.2, Sum: 2.3]
          [Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 1.1]
          [Object Copy (ms): Min: 28.7, Avg: 1927.0, Max: 4037.8, Diff: 4009.1, Sum: 53956.0]
          [Termination (ms): Min: 0.0, Avg: 2111.2, Max: 4009.0, Diff: 4009.0, Sum: 59114.4]
             [Termination Attempts: Min: 1, Avg: 2.2, Max: 5, Diff: 4, Sum: 63]
          [GC Worker Other (ms): Min: 0.0, Avg: 0.1, Max: 0.2, Diff: 0.1, Sum: 2.0]
          [GC Worker Total (ms): Min: 4051.4, Avg: 4051.9, Max: 4052.4, Diff: 1.0, Sum: 113453.2]
          [GC Worker End (ms): Min: 145360521.3, Avg: 145360521.3, Max: 145360521.4, Diff: 0.1]
       [Code Root Fixup: 0.1 ms]
       [Code Root Purge: 0.0 ms]
       [Clear CT: 0.4 ms]
       [Other: 2.4 ms]
          [Choose CSet: 0.0 ms]
          [Ref Proc: 0.4 ms]
          [Ref Enq: 0.0 ms]
          [Redirty Cards: 0.5 ms]
          [Humongous Register: 0.1 ms]
          [Humongous Reclaim: 0.0 ms]
          [Free CSet: 0.6 ms]
       [Eden: 1424.0M(1424.0M)->0.0B(1416.0M) Survivors: 76.0M->84.0M Heap: 3475.6M(8192.0M)->2071.7M(8192.0M)]
     [Times: user=54.84 sys=56.91, real=4.06 secs] 

我的cpu有40个内核,有时gc会导致很多时间。我发现大部分时间花在对象复制上,我想知道在何种情况下,它会发生,我可以做些什么来优化gc...

[对象复制(ms):Min:28.7,Avg:1927.0,Max:4037.8,Diff:4009.1,Sum:53956.0]max比min大得多,也许我可以减去gc工人??

共有1个答案

陶高峯
2023-03-14

我使用-XX:LargePageSizeInBytes=32m,并将服务移动到另一台linux服务器(我发现cpu运行队列有时很大)。然后没有发现超过1秒的gc。

 类似资料:
  • (英语不是我的第一语言,所以请原谅任何错误) 我使用SparkSQL从hive表中读取4.7TB的数据,并执行计数操作。做那件事大约需要1.6小时。而直接从HDFS txt文件读取和执行计数,只需要10分钟。这两个作业使用相同的资源和并行性。为什么RDD计数需要这么多时间? 配置单元表大约有30万列,序列化可能代价高昂。我检查了spark UI,每个任务读取大约240MB的数据,执行大约需要3.6

  • 问题内容: 我注意到,使用基本操作系统Alpine与CentOS或Debian在Docker容器中安装Pandas和Numpy(它的依赖项)需要花费更长的时间。我在下面创建了一个小测试来演示时差。除了Alpine用来更新和下载构建依赖项以安装Pandas和Numpy的几秒钟之外,为什么setup.py所需的时间比Debian的安装要多70倍? 是否有任何方法可以使用Alpine作为基础映像来加快安

  • 我的Gradle构建需要1分钟到2分钟,我不确定发生了什么。在事件日志中,我大部分时间都只看到一个条目 执行任务:[:app:GenerateDebugSources,:app:PrepareDebugunitTestDependencies,:app:MockableAndroidJar,:app:AssembleDebug] 我不知道这个任务在做什么,我检查了设置,希望这能有所改变,但我运气不

  • 我遵循这个链接制作一个CRF模型。我使用以下命令制作模型。 模型制作成功,但我的训练数据非常多,花费了太多时间。当我仔细观察系统中发生的事情时。它只使用了我电脑的一个核心 我能否以使用计算机多个核心的方式运行此命令?看起来它是作为单个线程实现的。是否支持多线程?如果是,请分享。

  • 我正在尝试执行以下操作:假设我有以下SELECT查询(请原谅德文列名): 这个查询大约需要4秒(数据库总共有大约100万条记录),返回大约400条记录。但是,当我想用以下语句更新这些相同的记录时 查询总是在取“永远”后超时。是我做错了什么,还是这种行为是意料之中的?

  • 我不是Java新手,但我对垃圾收集知之甚少。现在我想通过一些实践经验来改变这一点。我的目标是延迟不到0.3秒,或者在极端情况下0.5秒也可以。 我有一个带有-Xmx50gb(-Xms50gb)的应用程序,并设置了以下其他GC选项: 但现在我偶尔会因为垃圾收集而长时间暂停5秒以上,尽管似乎有足够的可用内存。我发现的一个原因是: 为什么GCG1仍在为此进行“阻止世界”?(或者至少我看到它正好在这个时候