查看运行中的Java其配置的堆大小
一、背景#
有题目中的需求,也不是空穴来风;前一阵给公司搭建了一个持续集成服务器,Jenkins。最近发现,运行一段时间后,就变慢了。
随便一个操作,cpu就飙高了。然后就思考会不会是内存不够用,频繁GC导致的呢?
Jenkins是个war包,我直接放在tomcat运行的。所以,我需要查看下,当前运行的这个tomcat的堆大小。
二、步骤#
[root@pas jenkins-apache-tomcat-8.5.28]# jmap -heap 90170 Attaching to process ID 90170, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.161-b12 using thread-local object allocation. Parallel GC with 8 thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 4160749568 (3968.0MB) -----------堆的最大容量 NewSize = 86507520 (82.5MB) MaxNewSize = 1386741760 (1322.5MB) OldSize = 173539328 (165.5MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 1306001408 (1245.5MB) used = 1123777200 (1071.7174530029297MB) free = 182224208 (173.7825469970703MB) 86.04716603797107% used From Space: capacity = 37748736 (36.0MB) used = 17255448 (16.456077575683594MB) free = 20493288 (19.543922424316406MB) 45.711326599121094% used To Space: capacity = 37224448 (35.5MB) used = 0 (0.0MB) free = 37224448 (35.5MB) 0.0% used PS Old Generation capacity = 212336640 (202.5MB) used = 90248224 (86.06741333007812MB) free = 122088416 (116.43258666992188MB) 42.50242633584105% used 44622 interned Strings occupying 4789016 bytes.
具体的字段意思,我查阅了oracle的官方资料,如下,但也没有看到具体解释,只能慢慢探索了:
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr014.html#BABJIIIH
可以看到,上面的tomcat的最大堆容量还是很大的,当然,我们自己没有配置过,应该是JVM根据机器的物理内存大小,自动计算的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端