목차
2. 문제 해결 아이디어 " >2. 문제 해결 아이디어
2.1 부하가 높은 프로세스 pid" >2.1 부하가 높은 프로세스 pid
4. 솔루션" >4. 솔루션
3. 근본 원인 분석" >3. 근본 원인 분석
5. 요약" >5. 요약
시스템 튜토리얼 리눅스 가자, Linux 시스템 CPU가 100% 가득 찼다!

가자, Linux 시스템 CPU가 100% 가득 찼다!

Feb 13, 2024 pm 11:27 PM
linux 리눅스 튜토리얼 리눅스 시스템 리눅스 명령 쉘 스크립트 임베디드리눅스 리눅스 시작하기 리눅스 학습

어제 오후 갑자기 운영유지관리부서로부터 데이터 플랫폼 서버의 CPU 사용률이 98.94%에 달했다는 알림 이메일을 받았습니다. 최근에는 이 활용률이 70% 이상을 계속해서 유지하고 있습니다. 얼핏 보면 하드웨어 자원이 병목 현상에 도달해 확장이 필요한 것처럼 보입니다. 그러나 신중하게 생각해 본 결과 우리 비즈니스 시스템은 동시성이나 CPU 집약적인 애플리케이션이 아니라는 사실을 알게 되었습니다. 이 활용률은 너무 과장되어 있으며 하드웨어 병목 현상에 너무 빨리 도달할 수 없습니다. 어딘가에 비즈니스 코드 로직에 문제가 있을 것입니다.

2. 문제 해결 아이디어

2.1 부하가 높은 프로세스 pid

찾기

먼저 서버에 로그인하고 top 명령어를 이용해 서버의 구체적인 상황을 확인한 후, 구체적인 상황을 토대로 분석하고 판단하세요.

我去,Linux 系统 CPU 100% 打满了!

부하 평균 및 부하 평가 기준(8코어)을 관찰하면 서버의 부하가 높은 것을 확인할 수 있습니다.

我去,Linux 系统 CPU 100% 打满了!각 프로세스의 리소스 사용량을 관찰하면 프로세스 ID가 682인 프로세스의 CPU 비율이 더 높다는 것을 알 수 있습니다

2.2 특정 이상업체 찾기

여기서 pwdx 명령을 사용하여 pid를 기반으로 비즈니스 프로세스 경로를 찾은 다음 담당자와 프로젝트를 찾을 수 있습니다.

我去,Linux 系统 CPU 100% 打满了!이 프로세스는 데이터 플랫폼의 웹 서비스에 해당한다고 결론을 내릴 수 있습니다.

2.3 비정상적인 스레드와 특정 코드 줄 찾기

기존 솔루션은 일반적으로 4단계로 구성됩니다.

1. P: 1040 // 먼저 프로세스 로드별로 정렬하여 maxLoad(pid)를 찾습니다.

2.top -Hp 프로세스 PID: 1073 // 관련 로드 스레드 PID를 찾습니다

3.printf “0x%x” 스레드 PID: 0x431 // 나중에 jstack 로그 검색을 준비하기 위해 스레드 PID를 16진수로 변환합니다

4. jstack 프로세스 PID | vim +/hex 스레드 PID – // 예: jstack 1040|vim +/0x431 –

그러나 온라인 문제 위치의 경우 매초가 중요하며 위의 4단계는 여전히 너무 번거롭고 시간이 많이 걸립니다. 이전에 Taobao를 소개한 Oldratlee는 위의 프로세스를 show-busy-java-threads.sh라는 도구로 캡슐화했습니다. 이러한 유형의 문제는 온라인에서 쉽게 찾을 수 있습니다.

我去,Linux 系统 CPU 100% 打满了!시스템에서 시간 도구 메서드의 실행 CPU가 상대적으로 높다는 결론을 내릴 수 있습니다. 특정 메서드를 찾은 후 코드 로직에 성능 문제가 있는지 확인하세요.

※ 온라인 문제가 더 시급하다면 2.1과 2.2를 생략하고 2.3을 직접 실행해도 됩니다. 여기에서는 완전한 분석 아이디어를 제시하기 위해 다각도로 분석했습니다.

3. 근본 원인 분석

이전 분석과 문제 해결을 통해 마침내 과도한 서버 부하와 CPU 사용을 유발하는 시간 도구 문제를 발견했습니다.

  • 예외 메소드 논리: 는 타임스탬프를 해당하는 특정 날짜 및 시간 형식으로 변환하는 것입니다.
  • 상위 레이어 호출: 이른 아침부터 현재 시간까지의 모든 초를 계산하고 해당 형식으로 변환한 후 집합에 넣어 결과를 반환합니다.
  • 로직 레이어: 데이터 플랫폼의 실시간 보고서 쿼리 로직에 해당합니다. 실시간 보고서는 고정된 시간 간격으로 제공되며 하나의 쿼리에 여러(n)개의 메서드 호출이 있습니다.

그러면 현재 시각이 오전 10시라면 쿼리 하나에 대한 계산 횟수는 106060n회 = 36,000n회이고, 시간이 지날수록 그 횟수가 늘어난다는 결론을 내릴 수 있습니다. 단일 쿼리가 자정에 가까워질수록 선형적으로 증가합니다. 실시간 쿼리, 실시간 알람 등 모듈에서 대량의 쿼리 요청이 발생하면 이 메소드를 여러 번 호출해야 하므로 많은 양의 CPU 리소스를 점유하여 낭비하게 됩니다.

4. 솔루션

문제를 찾은 후 가장 먼저 고려해야 할 사항은 계산 횟수를 줄이고 예외 방법을 최적화하는 것입니다. 조사 결과, 로직 계층에서 사용될 때 이 메서드에서 반환된 집합 컬렉션의 내용은 사용되지 않고 집합의 크기 값만 사용되는 것으로 나타났습니다. 로직을 확인한 후 새로운 방식을 사용하여 계산을 단순화하고(현재 초 - 그날 이른 아침의 초) 호출된 방식을 대체하여 과도한 계산 문제를 해결합니다. 온라인 접속 후 서버 부하 및 CPU 사용량을 관찰한 결과, 비정상적인 기간과 비교하여 서버 부하 및 CPU 사용량이 30배 감소한 후 정상으로 돌아왔습니다.

![어제 오후 갑자기 운영 및 유지보수 부서로부터 데이터 플랫폼 서버의 CPU 사용률이 98.94%에 달했다는 알림 이메일을 받았습니다. 최근에는 이 활용률이 70% 이상을 계속해서 유지하고 있습니다. 얼핏 보면 하드웨어 자원이 병목 현상에 도달해 확장이 필요한 것처럼 보입니다. 그러나 신중하게 생각해 본 결과 우리 비즈니스 시스템은 동시성이나 CPU 집약적인 애플리케이션이 아니라는 사실을 알게 되었습니다. 이 활용률은 너무 과장되어 있으며 하드웨어 병목 현상에 너무 빨리 도달할 수 없습니다. 어딘가에 비즈니스 코드 로직에 문제가 있을 것입니다.

2. 문제 해결 아이디어

2.1 부하가 높은 프로세스 pid

찾기

먼저 서버에 로그인하고 top 명령어를 이용해 서버의 구체적인 상황을 확인한 후, 구체적인 상황을 토대로 분석하고 판단하세요.

我去,Linux 系统 CPU 100% 打满了!

부하 평균 및 부하 평가 기준(8코어)을 관찰하면 서버의 부하가 높은 것을 확인할 수 있습니다.

我去,Linux 系统 CPU 100% 打满了!각 프로세스의 리소스 사용량을 관찰하면 프로세스 ID가 682인 프로세스의 CPU 비율이 더 높다는 것을 알 수 있습니다

2.2 특정 이상업체 찾기

여기서 pwdx 명령을 사용하여 pid를 기반으로 비즈니스 프로세스 경로를 찾은 다음 담당자와 프로젝트를 찾을 수 있습니다.

我去,Linux 系统 CPU 100% 打满了!이 프로세스는 데이터 플랫폼의 웹 서비스에 해당한다고 결론을 내릴 수 있습니다.

2.3 비정상적인 스레드와 특정 코드 줄 찾기

기존 솔루션은 일반적으로 4단계로 구성됩니다.

1. P: 1040 // 먼저 프로세스 로드별로 정렬하여 maxLoad(pid)를 찾습니다.

2.top -Hp 프로세스 PID: 1073 // 관련 로드 스레드 PID를 찾습니다

3.printf “0x%x” 스레드 PID: 0x431 // 나중에 jstack 로그 검색을 준비하기 위해 스레드 PID를 16진수로 변환합니다

4. jstack 프로세스 PID | vim +/hex 스레드 PID – // 예: jstack 1040|vim +/0x431 –

그러나 온라인 문제 위치의 경우 매초가 중요하며 위의 4단계는 여전히 너무 번거롭고 시간이 많이 걸립니다. 이전에 Taobao를 소개한 Oldratlee는 위의 프로세스를 show-busy-java-threads.sh라는 도구로 캡슐화했습니다. 이러한 유형의 문제는 온라인에서 쉽게 찾을 수 있습니다.

我去,Linux 系统 CPU 100% 打满了!

시스템에서 시간 도구 메서드의 실행 CPU가 상대적으로 높다는 결론을 내릴 수 있습니다. 특정 메서드를 찾은 후 코드 로직에 성능 문제가 있는지 확인하세요.

※ 온라인 문제가 더 시급하다면 2.1과 2.2를 생략하고 2.3을 직접 실행해도 됩니다. 여기에서는 완전한 분석 아이디어를 제시하기 위해 다각도로 분석했습니다.

3. 근본 원인 분석

이전 분석과 문제 해결을 통해 마침내 과도한 서버 부하와 CPU 사용을 유발하는 시간 도구 문제를 발견했습니다.

  • 예외 메소드 논리: 는 타임스탬프를 해당하는 특정 날짜 및 시간 형식으로 변환하는 것입니다.
  • 상위 레이어 호출: 이른 아침부터 현재 시간까지의 모든 초를 계산하고 해당 형식으로 변환한 후 집합에 넣어 결과를 반환합니다.
  • 로직 레이어: 데이터 플랫폼의 실시간 보고서 쿼리 로직에 해당합니다. 실시간 보고서는 고정된 시간 간격으로 제공되며 하나의 쿼리에 여러(n)개의 메서드 호출이 있습니다.

그러면 현재 시각이 오전 10시라면 쿼리 하나에 대한 계산 횟수는 106060n회 = 36,000n회이고, 시간이 지날수록 그 횟수가 늘어난다는 결론을 내릴 수 있습니다. 단일 쿼리가 자정에 가까워질수록 선형적으로 증가합니다. 실시간 쿼리, 실시간 알람 등 모듈에서 대량의 쿼리 요청이 발생하면 이 메소드를 여러 번 호출해야 하므로 많은 양의 CPU 리소스를 점유하여 낭비하게 됩니다.

4. 솔루션

문제를 찾은 후 가장 먼저 고려해야 할 사항은 계산 횟수를 줄이고 예외 방법을 최적화하는 것입니다. 조사 결과, 로직 계층에서 사용될 때 이 메서드에서 반환된 집합 컬렉션의 내용은 사용되지 않고 집합의 크기 값만 사용되는 것으로 나타났습니다. 로직을 확인한 후 새로운 방식(현재 초 - 그날 이른 아침의 초)을 통해 계산을 단순화하고, 호출된 방식을 대체하여 과도한 계산 문제를 해결합니다. 온라인 접속 후 서버 부하 및 CPU 사용량을 관찰한 결과, 비정상적인 기간과 비교하여 서버 부하 및 CPU 사용량이 30배 감소한 후 정상으로 돌아왔습니다.

我去,Linux 系统 CPU 100% 打满了!

5. 요약

  • 코딩 과정에서는 비즈니스 로직을 구현하는 것 외에도 코드 성능을 최적화하는 데에도 집중해야 합니다. 비즈니스 요구 사항을 실현하는 능력과 이를 더욱 효율적이고 우아하게 달성하는 능력은 실제로 엔지니어의 능력과 영역이 완전히 다른 두 가지 표현이며, 후자는 엔지니어의 핵심 경쟁력이기도 합니다.
  • 코드가 작성된 후에는 더 많은 검토를 수행하고 더 나은 방식으로 구현할 수 있는지 더 생각해 보세요.
  • 온라인 질문의 작은 세부사항도 놓치지 마세요! 세부 사항은 악마입니다. 기술 학생들은 지식에 대한 갈증과 우수성을 추구하는 정신을 가져야만 계속해서 성장하고 발전할 수 있습니다.

위 내용은 가자, Linux 시스템 CPU가 100% 가득 찼다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

VSCODE에 필요한 컴퓨터 구성 VSCODE에 필요한 컴퓨터 구성 Apr 15, 2025 pm 09:48 PM

대 코드 시스템 요구 사항 : 운영 체제 : Windows 10 이상, MacOS 10.12 이상, Linux 배포 프로세서 : 최소 1.6GHz, 권장 2.0GHz 이상의 메모리 : 최소 512MB, 권장 4GB 이상의 저장 공간 : 최소 250MB, 권장 1GB 및 기타 요구 사항 : 안정 네트워크 연결, Xorg/Wayland (LINUX)

VSCODE는 확장자를 설치할 수 없습니다 VSCODE는 확장자를 설치할 수 없습니다 Apr 15, 2025 pm 07:18 PM

VS 코드 확장을 설치하는 이유는 다음과 같습니다. 네트워크 불안정성, 불충분 한 권한, 시스템 호환성 문제, C 코드 버전은 너무 오래된, 바이러스 백신 소프트웨어 또는 방화벽 간섭입니다. 네트워크 연결, 권한, 로그 파일, 업데이트 대 코드 업데이트, 보안 소프트웨어 비활성화 및 대 코드 또는 컴퓨터를 다시 시작하면 점차 문제를 해결하고 해결할 수 있습니다.

vScode를 Mac에 사용할 수 있습니다 vScode를 Mac에 사용할 수 있습니다 Apr 15, 2025 pm 07:36 PM

VS 코드는 Mac에서 사용할 수 있습니다. 강력한 확장, GIT 통합, 터미널 및 디버거가 있으며 풍부한 설정 옵션도 제공합니다. 그러나 특히 대규모 프로젝트 또는 고도로 전문적인 개발의 경우 VS 코드는 성능 또는 기능 제한을 가질 수 있습니다.

VScode 란 무엇입니까? VScode 란 무엇입니까? Apr 15, 2025 pm 06:45 PM

VS Code는 Full Name Visual Studio Code로, Microsoft가 개발 한 무료 및 오픈 소스 크로스 플랫폼 코드 편집기 및 개발 환경입니다. 광범위한 프로그래밍 언어를 지원하고 구문 강조 표시, 코드 자동 완료, 코드 스 니펫 및 스마트 프롬프트를 제공하여 개발 효율성을 향상시킵니다. 풍부한 확장 생태계를 통해 사용자는 디버거, 코드 서식 도구 및 GIT 통합과 같은 특정 요구 및 언어에 확장을 추가 할 수 있습니다. VS 코드에는 코드에서 버그를 신속하게 찾아서 해결하는 데 도움이되는 직관적 인 디버거도 포함되어 있습니다.

vscode를 사용하는 방법 vscode를 사용하는 방법 Apr 15, 2025 pm 11:21 PM

Visual Studio Code (VSCODE)는 Microsoft가 개발 한 크로스 플랫폼, 오픈 소스 및 무료 코드 편집기입니다. 광범위한 프로그래밍 언어에 대한 가볍고 확장 성 및 지원으로 유명합니다. VSCODE를 설치하려면 공식 웹 사이트를 방문하여 설치 프로그램을 다운로드하고 실행하십시오. VScode를 사용하는 경우 새 프로젝트를 만들고 코드 편집, 디버그 코드, 프로젝트 탐색, VSCODE 확장 및 설정을 관리 할 수 ​​있습니다. VSCODE는 Windows, MacOS 및 Linux에서 사용할 수 있으며 여러 프로그래밍 언어를 지원하며 Marketplace를 통해 다양한 확장을 제공합니다. 이점은 경량, 확장 성, 광범위한 언어 지원, 풍부한 기능 및 버전이 포함됩니다.

Apr 16, 2025 pm 07:39 PM

메모장은 Java 코드를 직접 실행할 수는 없지만 다른 도구를 사용하여 명령 줄 컴파일러 (Javac)를 사용하여 Bytecode 파일 (filename.class)을 생성하면 달성 할 수 있습니다. Java Interpreter (Java)를 사용하여 바이트 코드를 해석하고 코드를 실행하고 결과를 출력하십시오.

Linux의 주요 목적은 무엇입니까? Linux의 주요 목적은 무엇입니까? Apr 16, 2025 am 12:19 AM

Linux의 주요 용도에는 다음이 포함됩니다. 1. 서버 운영 체제, 2. 임베디드 시스템, 3. 데스크탑 운영 체제, 4. 개발 및 테스트 환경. Linux는이 분야에서 뛰어나 안정성, 보안 및 효율적인 개발 도구를 제공합니다.

git의 창고 주소를 확인하는 방법 git의 창고 주소를 확인하는 방법 Apr 17, 2025 pm 01:54 PM

git 저장소 주소를 보려면 다음 단계를 수행하십시오. 1. 명령 줄을 열고 리포지토리 디렉토리로 이동하십시오. 2. "git remote -v"명령을 실행하십시오. 3. 출력 및 해당 주소에서 저장소 이름을 봅니다.

See all articles