gpt4 book ai didi

java - Tomcat内存增长

转载 作者:搜寻专家 更新时间:2023-10-30 21:27:17 25 4
gpt4 key购买 nike

tomcat内存增长下降的原因是什么

最佳答案

是 jconsole 本身导致了之字形模式。

查看jconsole的效果或 jvisualvm你可以只用一个主循环编写一个简单的java程序。例如

public static void main(String[] args) {
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
}

只用一点堆执行它 java -Xmx20m ... .这将帮助您更好地了解堆利用率,因为工具 jstat接下来我将使用,以百分比形式打印利用率。

现在打开命令行窗口并执行jstat .您将需要 java 进程的 PID,可以使用 jps -l 找到它。 .

jstat -gcutil <PID>

它会打印出这样的东西

  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
0,00 0,00 69,34 0,00 14,48 17,19 0 0,000 0 0,000 0,000

关注伊甸园空间E .该值是空间当前容量的百分比。看看jstat了解详情。

如果您一次又一次地执行该命令,您会发现 eden 空间利用率不会增长。它保持在例如69,34 .我在我的 Windows 上使用类似 linux watch 的命令以特定时间间隔重新运行该命令。参见 watch.bat

现在打开jconsole

jconsole <PID>

并执行 jstat一遍又一遍地命令。您会看到伊甸园空间不断增长,直到达到最大值并被垃圾收集。

这是我的 jstat --gcutil <PID> 的输出以 1 秒的间隔。关注伊甸园空间E .

  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
0,00 0,00 67,42 0,00 14,48 17,19 0 0,000 0 0,000 0,000
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 0,00 67,42 0,00 14,48 17,19 0 0,000 0 0,000 0,000
# jconsole connected
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 81,64 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 84,66 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 89,70 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 91,70 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 93,70 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 95,70 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 96,70 7,57 92,26 84,87 1 0,001 0 0,000 0,001
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 96,88 98,71 7,57 92,26 84,87 1 0,001 0 0,000 0,001
# Garbage collected
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
100,00 0,00 1,13 14,06 94,75 89,26 2 0,003 0 0,000 0,003
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
100,00 0,00 3,00 14,06 94,75 89,26 2 0,003 0 0,000 0,003
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
100,00 0,00 5,75 14,06 94,75 89,26 2 0,003 0 0,000 0,003

如您所见...在 jconsole 连接到进程后,伊甸园空间不断增长,直到被垃圾回收。这会导致之字形图案。这是 jvisualvm 的快照.

enter image description here

当您对 tomcat 进程执行相同操作时,您会发现类似的行为。唯一的区别是即使没有连接 jconsole,伊甸园空间也会稍微增长。但这种轻微的增长并不是您看到的锯齿形图案的原因。

这是 jstat我的 tomcat 的输出。

  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
0,00 99,80 70,33 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,33 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,43 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,43 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,43 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT

此输出将持续 36 秒,直到您可以看到小的内存变化。来自 70,4370,53 .

  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
0,00 99,80 70,43 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,53 4,81 96,85 90,10 5 0,037 0 0,000 0,037
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0,00 99,80 70,53 4,81 96,85 90,10 5 0,037 0 0,000 0,037

因此,这个小改动是 tomcat 后台进程唯一负责的事情。

附注:您也可以使用 Memory Analyser并不时获取堆转储,您将看到 byte[] 的已用内存量由于 RMI 网络流量,数组增加。

关于java - Tomcat内存增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48746541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com