在一个特定的GC阶段了解G1垃圾收集器长时间停顿的原因

时间:2018-06-21 10:20:28

标签: java garbage-collection g1gc

我正在尝试在服务器端JVM中使用G1类型的垃圾收集器,而通常来说,gc暂停很短,有时会突然出现,然后出现问题。

在下面,我给出了这样一个长暂停的分解,该暂停总共需要27.79秒,其中23.923秒用于“ [Other:23923.6 ms]”中“ Other”所指示的阶段。 / p>

如果有人可以阐明我如何进一步理解这个特定GC循环阶段的原因,或者如何改善GC状况(这似乎占了大多数时间),我将不胜感激

<?php

      include 'conf.php';

      if ($_FILES["image"]["error"] > 0)
      {
           echo "<font size = '5'><font color=\"#e31919\">Error: NO CHOSEN FILE <br />";
           echo"<p><font size = '5'><font color=\"#e31919\">INSERT TO DATABASE FAILED";
      }
      else
      {
           move_uploaded_file($_FILES["image"]["tmp_name"],"images/" . $_FILES["image"]["name"]);
           echo"<font size = '5'><font color=\"#0CF44A\">SAVED<br>";

           $file="images/".$_FILES["image"]["name"];
           $sql="INSERT INTO eikones (auxon, path) VALUES ('','$file')";

           if (!mysql_query($sql))
           {
            die('Error: ' . mysql_error());
           }
           echo "<font size = '5'><font color=\"#0CF44A\">SAVED TO DATABASE";
      }

      mysql_close();

1 个答案:

答案 0 :(得分:1)

  

[时间:用户= 0.00 sys = 1.29,实际= 27.79秒]

在垃圾回收上,它几乎不花任何CPU周期,并且在内核中一直都花时间,甚至更多的时间,这表明该进程在内核执行中被阻塞了。主要嫌疑犯是您的系统交换。

其他潜在原因:

  • 系统因其他进程而CPU不足
  • IO被闲置的硬盘驱动器阻塞,必须向上旋转
  • 超出配额-特别是在容器化或VM环境中
  • THP压缩-尽管这不太可能,因为通常会通过更高的内核负载来体现

您还可以尝试使用-XX:G1LogLevel=fine/finer/finest来提高GC日志的详细程度,看看是否有什么特别之处,但症状是系统级问题,而不是VM专有问题。