小编Kon*_* S.的帖子

什么在java进程中消耗内存?

我们正在尝试调查中等负载下 java 进程的内存使用情况。

  PID   USER    PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  12663 test    20   0 8378m 6.0g 4492 S   43  8.4 162:29.95 java
Run Code Online (Sandbox Code Playgroud)

如您所见,我们的常驻内存为 6Gb。现在有趣的部分是:这个过程是用这些参数执行的:

  • -Xmx2048m
  • -Xms2048m
  • -XX:NewSize=512m
  • -XX:MaxDirectMemorySize=256m
  • ... 其他一些用于 GC 和其他东西

查看这些设置和实际内存使用情况,我们偶然发现了我们期望此进程使用的内容与它实际使用的内容之间的差异。

通常我们的内存问题是通过分析堆转储来解决的,但在这种情况下,我们的内存是在堆外的某个地方使用的。

问题:尝试找出如此高内存使用率的原因的步骤是什么?哪些工具可以帮助我们识别在该过程中使用内存的内容?

编辑 0

看起来这不是堆相关的问题,因为我们仍然有相当多的空间:

jmap -heap 12663
Run Code Online (Sandbox Code Playgroud)

结果(编辑以节省空间)

Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize      = 2147483648 (2048.0MB)
NewSize          = 536870912 (512.0MB)
MaxNewSize       = 536870912 (512.0MB)
OldSize          = 1610612736 (1536.0MB)
NewRatio         = 7
SurvivorRatio    = 8
PermSize         = 21757952 …
Run Code Online (Sandbox Code Playgroud)

linux memory java

21
推荐指数
2
解决办法
3万
查看次数

标签 统计

java ×1

linux ×1

memory ×1