linux脚本制定java堆大小_用于查找Java堆大小和内存的命令行工具(Linux)?

回答(13)

2 years ago

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

获得pid后,可以使用 jstat -gc [insert-pid-here] 查找垃圾收集堆行为的统计信息 .

jstat -gccapacity [insert-pid-here] 将显示有关内存池生成和空间功能的信息 .

jstat -gcutil [insert-pid-here] 将以每个发电容量的百分比表示每一代的利用率 . 有助于快速了解使用情况 .

请参阅Oracle网站上的jstat docs .

2 years ago

jvmtop是一个命令行工具,它提供多个指标的实时视图,包括堆 .

VM概述模式的示例输出:

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

2 years ago

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

java -XX:+PrintFlagsFinal -version | grep HeapSize

它也适用于EC2上的Amazon AMI .

2 years ago

试试这个在Ubuntu和RedHat中工作:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

对于Windows:

java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

对于Mac

java -XX:+PrintFlagsFinal -version | grep -iE 'heapsize|permsize|threadstacksize'

所有这些命令的输出类似于下面的输出:

uintx InitialHeapSize := 20655360 {product}

uintx MaxHeapSize := 331350016 {product}

uintx PermSize = 21757952 {pd product}

uintx MaxPermSize = 85983232 {pd product}

intx ThreadStackSize = 1024 {pd product}

java version "1.7.0_05"

Java(TM) SE Runtime Environment (build 1.7.0_05-b05)

Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

要以MB为单位查找大小,请将值除以(1024 * 1024) .

2 years ago

不使用大多数工具使用的JMX,您所能做的就是使用

jps -lvm

并推断设置将来自命令行选项 .

默认情况下,如果没有JMX,您将无法获取动态信息,但您可以编写自己的服务来执行此操作 .

顺便说一句:我更喜欢使用VisualVM而不是JConsole .

2 years ago

有一个具有可视方面的命令行工具 - jvm-mon . 它是命令行的JVM监视工具,它消失了:

堆使用情况,大小和最大值

jvm进程

cpu和GC用法

顶级主题

工具打开时,指标和图表会更新 .

样品:

2 years ago

晚会,但一个非常简单的解决方案是使用jpsstat.sh脚本 . 它提供了一个简单的直播 current memory , max memory 和 cpu use 细节 .

转到GitHub project并下载 jpsstat.sh 文件

右键单击 jpsstat.sh 并转到权限选项卡并使其可执行

现在使用以下命令运行脚本 ./jpsstat.sh

这是脚本的示例输出 -

===== ====== ======= ======= =====

PID Name CurHeap MaxHeap %_CPU

===== ====== ======= ======= =====

2777 Test3 1.26 1.26 5.8

2582 Test1 2.52 2.52 8.3

2562 Test2 2.52 2.52 6.4

2 years ago

任何方法都应该给你大致相同的数字 . 为所有代使用 -X..m -X..x 分配堆始终是个好主意 . 然后,您可以保证并执行ps以查看传递了哪些参数并因此被使用 .

对于实际的内存使用情况,您可以粗略地比较VIRT(已分配和共享)和RES(实际使用)与jstat值的比较:

对于Java 8,请参阅jstat,这些值实际上是指 . 假设你运行一个没有mmap或文件处理的简单类 .

$ jstat -gccapacity 32277 NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC 215040.0 3433472.0 73728.0 512.0 512.0 67072.0 430080.0 6867968.0 392704.0 392704.0 0.0 1083392.0 39680.0 0.0 1048576.0 4864.0 7225 2

$ jstat -gcutil 32277 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 6.25 0.00 7.96 18.21 98.01 95.29 7228 30.859 2 0.173 31.032

Max : NGCMX + S0C + S1C + EC + OGCMX + MCMX + CCSMX 3433472 + 512 + 512 + 67072 + 6867968 + 1083392 + 1048576 = 12 GB

(大致接近和低于VIRT记忆)

Max(Min, Used): 215040 + 512 + 512 + 67072 + 430080 + 39680 + 4864 = ~ 1GB

(大致接近RES内存)

"Don't quote me on this"但是VIRT mem大致接近或超过分配的最大内存,但只要 memory being used 在物理内存中是空闲/可用的,JVM就不会引发内存异常 . 事实上,即使在操作系统上关闭了交换机,JVM启动时也不会根据物理内存检查最大内存 . 更好地解释了Java进程真正使用的虚拟内存here .

2 years ago

首先从下列之一获取进程ID,即列出的进程中的第一个数字:(或者只使用 ps aux | grep java ,如果您愿意的话)

jps -lvm

然后在此处使用进程ID:

jmap -heap $MY_PID 2>/dev/null | sed -ne '/Heap Configuration/,$p';

jmap -permstat $MY_PID

2 years ago

如果使用jrockit,请尝试使用jrcmd命令行工具 . 例如:

$ jrcmd 5127 print_memusage

5127:

Total mapped 1074596KB (reserved=3728KB)

- Java heap 786432KB (reserved=0KB)

- GC tables 26316KB

- Thread stacks 13452KB (#threads=34)

- Compiled code 9856KB (used=9761KB)

- Internal 840KB

- OS 15036KB

- Other 146632KB

- Java class data 75008KB (malloced=74861KB #103221 in 18709 classes)

- Native memory tracking 1024KB (malloced=102KB #8)

有关更多命令(如heap_diagnostics),请使用“jrcmd help”列出它们 .

2 years ago

使用 top 命令是检查程序内存使用情况的最简单方法 . RES 列显示进程占用的实际物理内存 .

对于我的情况,我在java中读取了一个10g文件,每次我得到outOfMemory异常 . 当 RES 列中的值达到 -Xmx 选项中设置的值时,会发生这种情况 . 然后通过使用 -Xmx 选项增加内存,一切都很顺利 .

2 years ago

jstat -gccapacity javapid (ex. stat -gccapacity 28745)

jstat -gccapacity javapid gaps frames (ex. stat -gccapacity 28745 550 10 )

上述命令的样本O / P.

NGCMN NGCMX NGC S0C

87040.0 1397760.0 1327616.0 107520.0

NGCMN Minimum new generation capacity (KB).

NGCMX Maximum new generation capacity (KB).

NGC Current new generation capacity (KB).

2 years ago

就Java堆大小而言,在Linux中,您可以使用

ps aux | grep java

要么

ps -ef | grep java

并查找-Xms,-Xmx以查找指定的初始和最大堆大小 .

但是,如果您感兴趣的Java进程缺少-Xms或-Xmx,则表示您的Java进程使用的是默认堆大小 . 您可以使用以下命令查找默认大小 .

java -XX:+PrintFlagsFinal -version | grep HeapSize

或者特定的jvm,例如,

/path/to/jdk1.8.0_102/bin/java -XX:+PrintFlagsFinal -version | grep HeapSize

并查找InitialHeapSize和MaxHeapSize,以字节为单位 .

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值