---
title: 扩容元空间引起的GC
description: "- 已安装鲲鹏DevKit。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/profiler/demo/kunpengbestabnormalgc_21_0008.html
sourcePath: /source/zh/kunpengdevps/profiler/demo/kunpengbestabnormalgc_21_0008.html
indexId: 4ea97d4a46cd4296f09da597aff2eb554f42c1de371a893e04647edf22ee2c6272
---
# 扩容元空间引起的GC

#### 前提条件

- 已安装鲲鹏DevKit。
- 服务器和操作系统正常运行。
- PC端已经安装SSH远程登录工具
- 准备需要优化的Java程序（  demo(https://github.com/kunpengcompute/devkitdemo/tree/main/Hyper_tuner/testdemo/java_perf_test)
）并在目标服务器上启动。


#### 操作步骤

1. 对目标程序进行在线分析，切换到GC页签。
  调用http://IP:9118/gctest/metaspace，触发GC事件。 图1 GC页签

  发现有些GC原因是：Metadata GC Threshold，元空间扩容引起GC。 图2 GC优化建议

  可以看到元空间的内存使用情况以及一份优化建议，是因为MetaspaceSize设置得过低或者不符合程序的实际情况造成的。

2. 根据优化建议调高MetaspaceSize的值后再开始在线分析。
  图3 概览

  图4 GC页签

  MetaspaceSize值调高后发现程序没有再出现因为扩容元空间引起的GC。

3. 调优总结。
  虽然元空间替换了永久代后可以不用再担心原先永久代内存不足的问题，但是元空间初始值设置不当在某些情况下仍然会给JVM造成性能问题，尤其是一些涉及动态加载、卸载类功能的程序。为程序设置合理的元空间初始值是有必要的。


#### 总结

本次实践中，介绍了如何使用Java调优工具发现并解决GC是由使用System.gc()函数、扩容元空间引起的场景。

在进行其他程序调优时，需要根据鲲鹏DevKit采集分析的实际结果和对应的优化建议进行调优操作，具体的调优思路可以参考本次实践。
