Java 힙 크기 및 사용된 메모리(Linux)를 찾는 방법
명령줄에서 Linux에서 Java 응용 프로그램의 힙 크기(및 사용된 메모리)를 확인하려면 어떻게 해야 합니까?
jmap을 사용해 보았습니다.그러나 Eden/PermGen 등의 내장 메모리 영역에 대한 정보를 제공하므로 유용하지 않습니다.
다음과 같은 것을 찾고 있습니다.
- 최대 메모리: 1 GB
- 최소 메모리: 256 MB
- 히프 메모리: 700 MB
- 사용 메모리: 460 MB
그게 다예요.JConsole 등에서 볼 수 있는 것은 알고 있습니다만, 커맨드 라인에서 볼 필요가 있습니다.(JMX 등을 유효하게 할 수 없습니다).
에는 "Java "가 .pid가 있습니다.jps명령어를 입력합니다.
하면 PID를 사용할 수 .jstat -gc [insert-pid-here]가비지 수집 힙 동작 통계 정보를 검색합니다.
jstat -gccapacity [insert-pid-here]에서는 메모리 풀의 생성 및 공간 기능에 대한 정보를 제공합니다.jstat -gcutil [insert-pid-here]는 각 세대의 사용률을 용량의 퍼센티지로 나타냅니다.을 사용하다
Oracle 사이트에서 jstat 문서를 참조하십시오.
이 명령어는 설정된 힙사이즈를 바이트 단위로 표시합니다.
java -XX:+PrintFlagsFinal -version | grep HeapSize
EC2의 Amazon AMI에서도 동작합니다.
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
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)로 값을 나눕니다.
대부분의 툴이 사용하는 JMX를 사용하지 않고 사용할 수 있는 것은
jps -lvm
명령줄 옵션에서 설정이 나오는 것을 유추합니다.
기본적으로는 JMX가 없으면 동적 정보를 얻을 수 없지만 이를 위해 자체 서비스를 작성할 수 있습니다.
BTW: 저는 JConsole보다 Visual VM을 사용하는 것을 선호합니다.
시각적인 측면을 가진 명령줄 도구 jvm-mon이 있습니다.이 툴은 명령줄용 JVM 모니터링 툴로 다음과 같은 기능을 제공합니다.
- 힙 사용량, 크기 및 최대
- jvm 프로세스
- CPU 및 GC 사용률
- 톱 스레드
도구가 열려 있는 동안 메트릭 및 차트가 업데이트됩니다.
샘플:
Java8 이상에서는 다음 명령을 사용할 수 있습니다.
jcmdJAVA_PROCESS_IDheap_infoGCheap_info
출력으로부터 메모리의 합계, 합계, 사용중의 합계를 참조할 수 있습니다.
Sample Command And Output: jcmd 9758 GC.heap_info
PSYoungGen total 1579520K, used 487543K [0x0000000751d80000, 0x00000007c0000000, 0x00000007c0000000)
eden space 1354240K, 36% used [0x0000000751d80000,0x000000076f99dc40,0x00000007a4800000)
from space 225280K, 0% used [0x00000007b2400000,0x00000007b2400000,0x00000007c0000000)
to space 225280K, 0% used [0x00000007a4800000,0x00000007a4800000,0x00000007b2400000)
ParOldGen total 3610112K, used 0K [0x0000000675800000, 0x0000000751d80000, 0x0000000751d80000)
object space 3610112K, 0% used [0x0000000675800000,0x0000000675800000,0x0000000751d80000)
Metaspace used 16292K, capacity 16582K, committed 16896K, reserved 1064960K
class space used 1823K, capacity 1936K, committed 2048K, reserved 1048576K
jcmd 명령어에 대한 자세한 내용은 여기를 참조하십시오.
파티는 늦었지만 매우 간단한 해결책은 jpsstat를 사용하는 것입니다.sh 스크립트현재 메모리, 최대 메모리 및 CPU 사용률에 대한 간단한 상세 정보를 제공합니다.
- Goto GitHub 프로젝트 및 jpsstat 다운로드.sh 파일
- jpsstat.sh 및 goto permissions 탭을 오른쪽 클릭하여 실행 가능 상태로 만듭니다.
- 이제 ./jpsstat 명령을 사용하여 스크립트를 실행합니다.쉿
다음으로 스크립트의 출력 예를 나타냅니다.
===== ====== ======= ======= =====
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
저 같은 경우에는 도커 컨테이너 내의 깃발을 체크해야 했습니다.도커 컨테이너에는 기본적인 유틸리티(ps, pstree...)가 거의 없습니다.
「」를 사용합니다.jps 중인이1)를 취득한 후, 「JVM」PID(「」1)를 취득했습니다.jcmd 1 VM.flagsJVM을 이용하다
사용할 수 있는 명령에 따라 다르지만 다른 사용자에게 도움이 될 수 있습니다.:)
어떤 접근법에서도 대략 같은 수치를 얻을 수 있습니다.하는 방법은 히프를 할당하는 .-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
최대:
NGCMX + S0C + S1C + EC + OGCMX + MCMX + CCSMX
3433472 + 512 + 512 + 67072 + 6867968 + 1083392 + 1048576 = 12 GB
(VIRT 메모리와 거의 비슷하고 그 이하)
최대(최소, 사용):
215040 + 512 + 512 + 67072 + 430080 + 39680 + 4864 = ~ 1GB
(RES 메모리에 거의 근접)
"Don't me quote to this" (이것에 대해 인용하지 말아 주세요)라고 하지만 VIRT 메모리는 할당된 최대 메모리 수에 거의 가깝거나 더 많습니다.그러나 물리 메모리에서 사용 가능한 메모리가 있는 한 JVM은 메모리 예외를 발생시키지 않습니다.실제로 최대 메모리는 OS에서 스왑오프하더라도 JVM 부팅 시 물리적 메모리와 비교조차 되지 않습니다.Java 프로세스에서 실제로 사용되는 가상 메모리에 대한 자세한 설명은 다음과 같습니다.
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(바이트 단위)를 찾습니다.
먼저 다음 중 하나에서 프로세스 ID(목록에 있는 프로세스의 첫 번째 번호)를 가져옵니다(또는 그냥 사용).ps aux | grep java(원하신다면)
jps -lvm
다음으로 프로세스 ID를 사용합니다.
jmap -heap $MY_PID 2>/dev/null | sed -ne '/Heap Configuration/,$p';
jmap -permstat $MY_PID
웹 앱/자바 프로세스의 프로세스 ID를 위에서 찾습니다.jmap 힙을 사용하여 힙 할당을 가져옵니다.AWS-Ec2에서 탄성 콩줄기를 테스트했습니다.
어플리케이션의 최대 3GB 이하의 이미지에서 확인할 수 있습니다.
사용.top명령어는 프로그램의 메모리 사용량을 확인하는 가장 간단한 방법입니다. RES컬럼은 프로세스가 점유하고 있는 실제 물리 메모리를 나타냅니다.
제 경우 10g 파일을 Java로 읽었는데 매번 out Of Memory 예외가 발생했습니다.이 문제는 의 값이RES에서 설정된 값에 도달한 열-Xmx선택.그런 다음 다음 를 사용하여 메모리를 늘림으로써-Xmx모든 게 잘 풀렸어요
당신이 요청한 형식으로 히프메모리를 인쇄하는 툴은 지금까지 없었습니다.인쇄하는 유일한 방법은 런타임 클래스의 도움을 받아 자바 프로그램을 작성하는 것입니다.
public class TestMemory {
public static void main(String [] args) {
int MB = 1024*1024;
//Getting the runtime reference from system
Runtime runtime = Runtime.getRuntime();
//Print used memory
System.out.println("Used Memory:"
+ (runtime.totalMemory() - runtime.freeMemory()) / MB);
//Print free memory
System.out.println("Free Memory:"
+ runtime.freeMemory() / mb);
//Print total available memory
System.out.println("Total Memory:" + runtime.totalMemory() / MB);
//Print Maximum available memory
System.out.println("Max Memory:" + runtime.maxMemory() / MB);
}
}
레퍼런스 : https://viralpatel.net/blogs/getting-jvm-heap-size-used-memory-total-memory-using-java-runtime/
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"를 사용하여 목록을 표시합니다.
https://blogs.oracle.com/jrockit/entry/why_is_my_jvm_process_larger_t
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).
자세한 것은, http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html 를 참조해 주세요.
언급URL : https://stackoverflow.com/questions/12797560/how-to-find-java-heap-size-and-memory-used-linux
'source' 카테고리의 다른 글
| jQuery에서 알려진 클래스를 가진 부모를 찾으려면 어떻게 해야 합니까? (0) | 2023.01.06 |
|---|---|
| PHP를 사용하여 전체 경로에서 파일 이름을 가져오려면 어떻게 해야 합니까? (0) | 2023.01.06 |
| 서로 다른 데이터베이스의 열 선택 (0) | 2022.12.24 |
| 오류 1356(HY000):뷰의 'mysql.user' 참조가 올바르지 않은 테이블, 열, 함수 또는 정의자/호출자 참조를 사용할 권한이 없습니다. (0) | 2022.12.24 |
| 입력으로 폼으로 리다이렉트하는 방법 - Larabel 5 (0) | 2022.12.24 |
