我试图找到在linux中运行的java进程的内存.有人建议我使用pmap-x来查看内存到底在做什么.

输出非常长,但基本上大部分是重复的:

00007fbf75f6a000    1016       -       -       - rwx--    [ anon ]
00007fbf76068000      12       -       -       - -----    [ anon ]

这到底意味着什么?为什么我有这么多(4000+)的条目?

推荐答案

Anon块是通过malloc或mmap分配的"大"块——请参阅手册页.因此,它们与Java堆无关(除了整个堆应该存储在这样一个块中这一事实).

根据我的经验,线程堆栈也使用anon块.如果你看到很多anon块都有相同的大小,并且大小是512k到4Mb(下面的例子在我运行的Tomcat进程中重复了十几次),这可能就是原因.根据课程的不同,你可能会有几十个这样的课程;如果你看到成千上万的人,这意味着你在线程方面有问题.

b089f000    504K rwx--    [ anon ]
b091d000     12K -----    [ anon ]
b0920000    504K rwx--    [ anon ]
b099e000     12K -----    [ anon ]
b09a1000    504K rwx--    [ anon ]
b0a1f000     12K -----    [ anon ]

但这留下了一个问题:为什么要用pmap来诊断Java内存问题?

Linux相关问答推荐

Linux/gcc中的文件创建时间系统调用

我想显示包含一个方括号的行,方括号可以是开括号,也可以是闭括号.

如何将参数传递给Bash函数

使用文件名重新打开 linux 管道(仅从一侧)

awk 使用动态列号

awk/sed 命令仅在模式 2 匹配时打印模式 1

访问证书里面的图片

在 Ansible 中使用 JSON 查询过滤数据以从 ansible_fact 中提取数据

`G++ 4.9.4` 中关于 WEXITSTATUS 的奇怪行为

如何彻底剥离可执行文件

使用 awk 或 sed 删除特定字符

/usr/local/bin/ 中Collection的权限被拒绝

如何优雅地退出 X11 事件循环?

为什么这个命令会杀死我的 shell?

如何在没有 IDE 的情况下构建和部署三星 SmartTV 应用程序(例如:在 Linux 上)

Linux 配置/制作,--prefix?

Mac OS X 中的 ldconfig 等效项?

如何在 shell 脚本中向文件中添加一行?

更改 /etc/profile 后,我需要做什么来重置我的 shell?

如何限制我网站的 API 用户?