16

I have a java program, which i ran and figured out its process id with jps.

How can i see what is the value of -Xms and -Xmx variable for this java process ?

SQL.injection
  • 2,607
  • 5
  • 20
  • 37
Adon Smith
  • 1,849
  • 7
  • 19
  • 19
  • From you answer to SQL.injection's answer, it seems like you have a different `jps` on your Mac than I do. Can you add the following information to your question: (1) Which MacOS X version. (2) Which java version. (3) Results of running `which jps`. (4) Results of running `file $(which jps)`. – RealSkeptic Jan 15 '15 at 10:42
  • answers for questions :- 1) which jps - /usr/bin/jps 2) whic java version - java version "1.7.0_55" , 3) which MacOSX - 10.7.5 4) file $(which jps) -> /usr/bin/jps: Mach-O universal binary with 2 architectures /usr/bin/jps (for architecture x86_64): Mach-O 64-bit executable x86_64 /usr/bin/jps (for architecture i386): Mach-O executable i386 – Adon Smith Jan 15 '15 at 11:08

3 Answers3

21

Try

jcmd <PID> VM.command_line
jcmd <PID> VM.flags
apangin
  • 92,924
  • 10
  • 193
  • 247
  • the output gave me this - -XX:InitialHeapSize=1073741824 -XX:MaxHeapSize=17179869184 -XX:+UseCompressedOops -XX:+UseParallelGC Is It in Bytes . If the max heap size is in 17 GB , how is it even possible , because before running my program , my JAVA_OPTS was set as export JAVA_OPTS='-Xms128m -Xmx1024m' , it should not be more than 1 GB – Adon Smith Jan 15 '15 at 11:13
  • @AdonSmith JVM itself does not recoginze `JAVA_OPTS`. Try `_JAVA_OPTIONS` instead. – apangin Jan 15 '15 at 12:19
8

you can use jps and do it from the command line:

jps # shows pids
jps -v <pid> # shows params
jps -v <localhost:pid> # the host must be indicated

if this is not enough you can do it programmatically inside the program to check the maximum amount of memory that the Java virtual machine will attempt to use:

Runtime.getRuntime().maxMemory()

and you can also use use the class MemoryUsage to get the initial, used and max ammount that can be used for memory management.

MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
    memoryBean.getHeapMemoryUsage().getMax()
    memoryBean.getHeapMemoryUsage().getUsed()
    memoryBean.getHeapMemoryUsage().getInit()
SQL.injection
  • 2,607
  • 5
  • 20
  • 37
6

I think jmap command will give you everything you want.
usage: jmap -heap {pid}

root@BobServerStation:/usr/local $ jmap -heap 3280
Attaching to process ID 3280, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.65-b04

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:
   MinHeapFreeRatio = 0
   MaxHeapFreeRatio = 100
   MaxHeapSize      = 4116709376 (3926.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 85983232 (82.0MB)
   G1HeapRegionSize = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 65011712 (62.0MB)
   used     = 42273152 (40.3148193359375MB)
   free     = 22738560 (21.6851806640625MB)
   65.0239021547379% used
From Space:
   capacity = 10485760 (10.0MB)
   used     = 10479760 (9.994277954101562MB)
   free     = 6000 (0.0057220458984375MB)
   99.94277954101562% used
To Space:
   capacity = 10485760 (10.0MB)
   used     = 0 (0.0MB)
   free     = 10485760 (10.0MB)
   0.0% used
PS Old Generation
   capacity = 171442176 (163.5MB)
   used     = 376368 (0.3589324951171875MB)
   free     = 171065808 (163.1410675048828MB)
   0.21953057805332568% used
PS Perm Generation
   capacity = 22020096 (21.0MB)
   used     = 15401488 (14.688003540039062MB)
   free     = 6618608 (6.3119964599609375MB)
   69.94287400018601% used

8464 interned Strings occupying 699456 bytes.
Hunter Zhao
  • 4,589
  • 2
  • 25
  • 39