Programming/Java(Spring)2019. 4. 18. 10:30

jcmd

[링크 : https://docs.oracle.com/javase/10/tools/jcmd.htm]

 

# jcmd --help
Error parsing arguments: No command specified

Usage: jcmd  PerfCounter.print|-f file>
   or: jcmd -l
   or: jcmd -h

  command must be a valid jcmd command for the selected jvm.
  Use the command "help" to see which commands are available.
  If the pid is 0, commands will be sent to all Java processes.
  The main class argument will be used to match (either partially
  or fully) the class used to start Java.
  If no options are given, lists Java processes (same as -p).

  PerfCounter.print display the counters exposed by this process
  -f  read and execute commands from the file
  -l  list JVM processes on the local machine
  -h  this help

 

근데 보는법을 모르겠다 ㅠㅠ

# jcmd 10776 help
10776:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
VM.classloader_stats
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.finalizer_info
GC.heap_info
GC.run_finalization
GC.run
VM.uptime
VM.dynlibs
VM.flags
VM.system_properties
VM.command_line
VM.version
help

For more information about a specific command use 'help 

'.

# jcmd 10776 GC.heap_info
10776:
 PSYoungGen      total 192512K, used 187956K [0x00000000ec400000, 0x00000000f8300000, 0x0000000100000000)
  eden space 189952K, 98% used [0x00000000ec400000,0x00000000f7a0d258,0x00000000f7d80000)
  from space 2560K, 60% used [0x00000000f7d80000,0x00000000f7f00000,0x00000000f8000000)
  to   space 2560K, 0% used [0x00000000f8080000,0x00000000f8080000,0x00000000f8300000)
 ParOldGen       total 647168K, used 591782K [0x00000000c4c00000, 0x00000000ec400000, 0x00000000ec400000)
  object space 647168K, 91% used [0x00000000c4c00000,0x00000000e8de99b8,0x00000000ec400000)
 Metaspace       used 107438K, capacity 109826K, committed 110336K, reserved 1146880K
  class space    used 13031K, capacity 13457K, committed 13568K, reserved 1048576K

[링크 : http://karunsubramanian.com/websphere/how-to-monior-heap-usage-of-a-java-application/]

 

+

GPL 이라는데 상용으로 사용가능한지 모르겠음

[링크 : https://visualvm.github.io/]

 

 

+

클래스 히스토그램은.. 클래스별 메모리 사용량인가?

# jcmd 10776 GC.class_histogram
10776:

 num     #instances         #bytes  class name
----------------------------------------------
   1:        150865      436535528  [C
   2:          7008       47125920  [B
   3:        134955        4318560  java.util.concurrent.ConcurrentHashMap$Node
   4:        145517        3492408  java.lang.String
   5:         11226        3398488  [I

 

찾다보니 jmap -histo pid도 동일한 결과를 내주네..

[링크 : http://www.openkb.info/2014/06/how-to-check-java-memory-usage.html]

 

일단 의미를 보건대.. [C는 Char array 라는 느낌인데

무슨 미친 char 배열 객체가 이렇게 메모리를 쳐드시나...

Element Type        Encoding
boolean             Z
byte                B
char                C
class or interface  Lclassname;
double              D
float               F
int                 I
long                J
short               S 

 

it is an array of objects as specified by JVM Specifications for internal representation of class names:

  • a single [ means an array of
  • L followed by a fully qualified class name (e.g. java/lang/Object) is the class name terminated by semicolon ;

so [Ljava.lang.object; means Object[]

[링크 : https://stackoverflow.com/.../what-do-those-strange-class-names-in-a-java-heap-dump-mean]

 

+

[링크 : https://spring.io/blog/2015/12/10/spring-boot-memory-performance]

Posted by 구차니