当前位置: 首页 > 知识库问答 >
问题:

如何查找Java堆大小和使用的内存(Linux)?

洪开济
2023-03-14

如何通过命令行检查Linux上Java应用程序的堆大小(和使用的内存)?

我已经通过jmap试过了。但它提供了信息。关于Eden/PermGen等内部记忆区域,这对我来说没用。

我在寻找这样的东西:

  • 最大内存:1GB

这就是全部。我知道我可以在JConsole等中看到这一点,但我需要通过命令行来实现。(无法启用JMX等)

共有3个答案

周辉
2023-03-14

JVMTop是一个命令行工具,它在包括堆在内的几个指标上提供实时视图。

 JvmTop 0.3 alpha (expect bugs)  amd64  8 cpus, Linux 2.6.32-27, load avg 0.12
 http://code.google.com/p/jvmtop

  PID MAIN-CLASS      HPCUR HPMAX NHCUR NHMAX    CPU     GC    VM USERNAME   #T DL
 3370 rapperSimpleApp  165m  455m  109m  176m  0.12%  0.00% S6U37 web        21
11272 ver.resin.Resin [ERROR: Could not attach to VM]
27338 WatchdogManager   11m   28m   23m  130m  0.00%  0.00% S6U37 web        31
19187 m.jvmtop.JvmTop   20m 3544m   13m  130m  0.93%  0.47% S6U37 web        20
16733 artup.Bootstrap  159m  455m  166m  304m  0.12%  0.00% S6U37 web        46
杨曜瑞
2023-03-14

此命令以字节为单位显示配置的堆大小。

java -XX:+PrintFlagsFinal -version | grep HeapSize

它也适用于EC2上的Amazon AMI。

鲁彬炳
2023-03-14

每个Java进程都有一个pid,您首先需要使用jps命令找到它。

一旦有了pid,就可以使用jstat-gc[insert pid here]来查找垃圾收集堆行为的统计信息。

>

  • jstat-gccapacity[在此处插入pid]将显示有关内存池生成和空间功能的信息。

    jstat-gcutil[在此处插入pid]将以容量的百分比表示每一代的利用率。有助于了解用法。

    请参阅Oracle网站上的jstat文档。

  •  类似资料:
    • 是否有命令行工具(Linux)来检查Java应用程序的堆大小(和使用的内存)? 我已经通过jmap尝试过了。但它提供信息。关于诸如Eden/PermGen等内部内存区域,这对我来说并不有用。 null

    • 上面链接中的代码正在工作,但可以传输到一定数量的数据。当我试图传输一个大小约为334 MB的.mkv格式的电影时,它给出了“内存不足,java堆大小”的错误。我是一个乞丐,我不知道如何解决这个问题,我试图在客户端程序中增加缓冲区大小,但问题仍然存在。请帮帮我.

    • 问题内容: 对于我的应用程序,Java进程使用的内存远远大于堆大小。 容器运行所在的系统开始出现内存问题,因为容器占用的内存比堆大小大得多。 堆大小设置为128 MB(-),而容器最多占用1GB的内存。正常情况下需要500MB。如果docker容器的限制低于(例如),则该进程将被操作系统的内存不足杀手杀死。 你能解释一下为什么Java进程使用的内存比堆多得多吗?如何正确调整Docker内存限制的大

    • 在Java中分配堆外内存时(例如通过直接缓冲区或JNI本机代码),如果JVM使用-XX: UseLargePages,分配的内存是否会由巨大的页面支持?

    • 这些是我用过的插件abacus、checkstyles、pmd、java、无用代码跟踪数据库:MySQL 提前致谢

    • 问题内容: 我正在使用Ubuntu 11.04。如何找出进程的最大调用堆栈大小以及堆栈中每个帧的大小? 问题答案: 您可以使用查询最大进程和堆栈大小。堆栈框架没有固定的尺寸。它取决于每个帧需要多少本地数据(即本地变量)。 要在命令行上执行此操作,可以使用ulimit。 如果要为正在运行的进程读取这些值,我不知道执行此操作的任何工具,但是查询/ proc文件系统很容易: