온라인 자바 프로그램 이 CPU 를 너무 많이 차지 하 는 솔 루 션
온라인 서버 CPU 사용률 이 100%입 니 다.이런 상황 에 부 딪 히 면 어떻게 문 제 를 조사 하고 찾 습 니까?
이것 이 바로 체계 적 인 문제 이다.이른바 체계 적 인 문제 란 표준적 인 체계 적 인 해법 이 있 는 것 이다.체계 적 인 문 제 를 파악 하면 면접 관 뿐만 아니 라 문 제 를 해결 할 수 있다.안 그러면 진짜 덫 에 걸 려.
우리 가 정말 이 문제 에 부 딪 혔 을 때 어떻게 조사 해 야 합 니까?
높 은 CPU 필드 시 뮬 레이 션
먼저 프로그램 으로 몇 개의 스 레 드 를 만 들 고 그 중의 한 스 레 드 를 높 은 CPU 사용률 로 설정 합 니 다.
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
Thread thread = new Thread(() -> {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(30 * 60 * 1000);
}catch (Exception e){
e.printStackTrace();
}
});
thread.setName("thread-" + i);
thread.start();
}
Thread highCpuThread = new Thread(() -> {
int i = 0;
while (true) {
i++;
}
});
highCpuThread.setName("HighCpu");
highCpuThread.start();
}
이 프로그램 을 실행 하면 앞의 10 개의 스 레 드 가 휴면 상태 에 있 고 마지막 스 레 드 만 CPU 를 계속 사용 합 니 다.이 프로그램 을 실행 한 후에 문제 의 원인 을 발견 하기 위해 열 조작 을 시작 할 수 있다.
검사 단계 첫 번 째 단 계 는 top 을 사용 하여 CPU 를 가장 많이 차지 하 는 자바 프로 세 스 를 찾 습 니 다.
실제 환경 에서 먼저 자바 프로그램 이 만 들 었 는 지 확인 해 야 합 니 다.시스템 모니터링 도구 가 있 으 면 경고 정보 에서 어떤 프로 세 스 가 만 들 었 는 지 직접 알려 줄 수 있 지만 모 를 수도 있 습 니 다.수 동 으로 검사 해 야 합 니 다.
면접 장면 에서 이 문 제 는 확인 할 필요 가 없 을 수도 있 습 니 다.자바 면접 이기 때문에 면접 관 은 자바 가 차지 하 는 CPU 가 너무 높다 는 것 을 직접 알려 줄 수 있 습 니 다.
이 단 계 는 매우 간단 합 니 다.바로 top 명령 일 뿐 입 니 다.기본적으로 모든 학우 들 이 이 명령 을 사용 한 적 이 있 습 니 다.
top 명령 을 사용 하면 CPU 의 99.7%를 차지 하 는 스 레 드 가 자바 프로 세 스 이 고 프로 세 스 PID 는 13731 입 니 다.
두 번 째 단 계 는 top-hp 명령 으로 CPU 를 가장 많이 차지 하 는 스 레 드 를 봅 니 다.
이전 단 계 는 top 명령 으로 그 자바 프로 세 스 를 찾 았 다.그 프로 세 스 에 그렇게 많은 스 레 드 가 있 기 때문에 모든 스 레 드 가 CPU 를 차지 하고 놓 지 않 을 수 없습니다.이 단계 에서 해 야 할 일 은 바로 이 원흉 을 밝 히 는 것 입 니 다.물론 한 가지 가 아 닐 수도 있 습 니 다.
top-hp pid 명령 을 실행 합 니 다.pid 는 바로 앞의 자바 프로 세 스 입 니 다.제 예 는 13731 입 니 다.전체 명령 은:
top-hp 13731,실행 후 효 과 는 다음 과 같 습 니 다.
CPU 를 가장 많이 차지 하 는 스 레 드 PID 가 13756 인 것 을 볼 수 있 습 니 다.
그 다음 에 13756 을 16 진법 으로 바 꾸 고 나중에 사용 할 것 입 니 다.온라인 진법 으로 전환 할 수 있 는 사이트 로 직접 전환 하여 결 과 를 0x35bc 로 바 꿀 수 있 습 니 다.
세 번 째 단계,스 레 드 스 택 정보 저장
현재 자바 프로그램의 모든 스 레 드 정 보 는 jstack 명령 을 통 해 볼 수 있 습 니 다.jstack 명령 으로 첫 번 째 로 찾 은 자바 프로 세 스 의 스 레 드 스 택 을 저장 합 니 다.
jstack 13731 > thread_stack.log
네 번 째 단 계 는 온라인 스 택 에서 가장 비 싼 화근 의 스 레 드 를 찾 습 니 다.
두 번 째 단 계 는 이 원흉 의 스 레 드 PID 를 찾 았 고 이 를 16 진법 으로 바 꾸 었 습 니 다.세 번 째 단 계 는 모든 스 레 드 의 PID 16 진법 정 보 를 저장 합 니 다.우 리 는 온라인 스 택 에서 이 16 진법 의 스 레 드 id(0x35bc)를 찾 습 니 다.
어 떻 습 니까?이 제 는 한눈 에 알 수 있 습 니 다.스 레 드 이름,스 레 드 상태,그리고 어떤 줄 코드 가 가장 많은 CPU 를 소 모 했 는 지 잘 알 고 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.