Linux 서버에서 몇 개의 코어를 사용하고 있습니까?


30

bash에서 사용자가 Linux 서버에서 현재 사용중인 CPU 코어 수를 어떻게 알 수 있는지 궁금합니다.

서버에 상당한 양의 백그라운드 작업을 제출하고 있습니다. 따라서 제출 한 실행중인 작업 (프로세스)이 너무 많은 경우 작업을 제출하기 전에 bash 스크립트를 작성하고 싶습니다. 사용자는 작업에 사용할 수있는 코어가 충분합니다. 작업에서 현재 사용중인 코어 수를 알려주는 bash 명령이 무엇인지 알고 싶습니다.

감사합니다.

답변:


39

CPU 당 CPU 코어 를 얻으려면 :

grep "^core id" /proc/cpuinfo | sort -u | wc -l

또는 실제 CPU 를 얻으려면 :

grep "^physical id" /proc/cpuinfo | sort -u | wc -l

주어진 사용자에 대해 이것을 확인하는 방법?
makis

26

도움이되는지 모르겠지만 mpstat유틸리티를 사용하여 개별 프로세서 (또는 코어)별로 CPU 사용량을 분석 할 수 있습니다 . 예를 들면 다음과 같습니다.

$ mpstat -P ALL 1

12:49:59 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
12:50:00 PM  all    7.89    0.00    1.25    0.88    0.00    0.00    0.00   89.97   1359.00
12:50:00 PM    0   14.00    0.00    0.00    0.00    0.00    0.00    0.00   86.00   1043.00
12:50:00 PM    1   15.84    0.00    7.92    3.96    0.00    0.99    0.00   71.29    297.00
12:50:00 PM    2    3.96    0.00    0.00    1.98    0.00    0.99    0.00   93.07      0.00
12:50:00 PM    3    3.96    0.00    0.99    2.97    0.00    0.00    0.00   92.08      0.00
12:50:00 PM    4    4.00    0.00    0.00    0.00    0.00    0.00    0.00   96.00      0.00
12:50:00 PM    5    4.95    0.00    0.99    0.00    0.00    0.00    0.00   94.06     18.00
12:50:00 PM    6   10.89    0.00    0.99    0.00    0.00    0.00    0.00   88.12      0.00
12:50:00 PM    7    5.05    0.00    0.00    0.00    0.00    0.00    0.00   94.95      0.00

이 예에서 해당 CPU의 볼 수 0, 1, 그리고 6그들의 나머지보다 더 많은 일을하고있다. 때로는 단일 CPU가 100 % 가까이에 있고 다른 CPU는 0에 있다는 것을 알 수 있습니다. 이는 단일 스레드이며 한 번에 하나의 CPU 만 사용할 수있는 프로그램 (또는 프로그램의 일부)의 표시 기일 수 있습니다.

mpstatFedora, RHEL 또는 CentOS 시스템에 설치하려면 을 사용하십시오 yum install sysstat.


이 답변을 제공해 주셔서 감사합니다. 제 동료들은 "top"명령을 사용하여 mpstat 명령을 보여줄 때까지 프로세서 사용률에 대한 모든 잘못된 결론을 내 렸습니다.
Nav

우분투에서는 사용할 수 없습니다 : # aptitude search mpstat #.
Alix Axel

2
@AlixAxel aptitude search systat대신 시도하십시오 .
매트 솔 니트

@MattSolnit : 여전히 운이 없습니다.
Alix Axel

mpstat는 sysstat 데비안우분투 패키지 에서 제공됩니다 . 대부분의 데비안 파생 배포판은 동일한 패키지 이름을 사용할 것으로 예상합니다. 데비안에서 파생 된 배포판에서 시작하십시오 apt-cache search --full mpstat.
CVn

2

프로세스를 특정 CPU에 고정하지 않도록 명시 적으로 구성하지 않으면 모든 코어가 항상 사용중인 것으로 가정 할 수 있습니다. 스케줄러는 사용 가능한 다음 코어에 프로세스를 할당합니다. 예를 들어, "시스템 모니터"(그놈의 일부)는 내 컴퓨터의 4 코어 모두에서 거의 동일한 부하를 보여줍니다.


서버에 상당한 양의 백그라운드 작업을 제출하고 있으므로 다른 사용자가 수행해야하므로 실행중인 작업 (프로세스)이 제출 한 작업이 너무 많은 경우 작업을 제출하기 전에 bash 스크립트를 작성하고 싶습니다. 작업에 사용하기에 충분한 코어. 그래서 나는 bash 명령이 현재 내 작업에서 얼마나 많은 코어를 사용할 수 있는지 알고 싶습니다.
Tim

3
나는 당신이 내 대답을 이해했다고 생각하지 않습니다. 사용중인 코어 수는 항상 사용 가능한 총 코어 수입니다. 작업 제출을 제한해야하는지 여부를 판별하기 위해 전체 시스템로드를 요소로 사용하십시오.
EmmEff

고맙습니다! 전체 시스템로드를 확인합니다. 동료 중 한 명이 다른 사람이 곧 작업을 수행하고 내 작업이 꽤 오래 지속될 것임을 알기 때문에 모든 코어를 다 사용할 수 없다고 들었습니다. 또한 사용중인 코어를 제한해야한다고 생각하십니까?
Tim

2

코어 사용 방법을 알려주는 응답이 여기에 표시됩니다.

그러나 이것은 실제로 당신에게 서비스를 제공하지 않습니다. 당신은 유지하지 않는 기본적인 가정을 만들었습니다. 당신의 직업은 스스로를 일부 핵심 집단으로 묶는 경향이 있습니다.

대신, 어떤 방식 으로든 "고정 된"상태를 유지하는 것을 구현하지 않으면 작업이 모든 코어에 분산됩니다. (참고 : 권장하지 않습니다. "없는 경우")

다른 전략은 다음과 같습니다. 특정 시스템에서 다른 사용자가 더 많은 작업을 추가 할 수 있다고 생각할 때 LOAD 레벨이 무엇인지 식별하십시오. 그런 다음로드 레벨이 해당 한계 아래로 내려갈 때 새 백그라운드 작업 만 제출하는 무언가를 빌드하십시오.

이런 방식으로이 솔루션은 코어 수에 독립적이며 휴대 성이 뛰어나고 유연하며 "조정"하기도 쉽습니다.


방금 다른 포스터의 답변에 추가 한 의견을 발견했습니다. 이는 동료가 말한 내용 때문임을 나타냅니다. 실제로 오해는 당신의 것이 아니라 그의 오해입니다. 미안합니다!
pbr

고맙습니다! "다른 사용자가 더 많은 작업을 추가 할 수 있다고 생각할 때 LOAD 레벨이 무엇인지 특정 시스템에 대해 확인하십시오." 나머지 CPU이지만 현재로드에서 실행중인 작업이 상당한 양을 차지하면 나머지 CPU 사용을 포기해야 할 것입니다. 그래도 여전히 총 ​​실행중인 작업의 CPU 사용량을 추정 할 필요가 없다고 생각하십니까?

아니요, 실제로 현재 부하가 작업과 다른 작업의 양을 구분하는 것이 타당하지 않다고 생각합니다. 단순성을 고려하십시오. 귀하의 직업은 훌륭한 시민이 되려고 노력하며, 부하가 허용 가능한 수준보다 낮은 경우에만 제출하십시오. 아이디어는 남은 용량을 모두 사용하지는 않습니다. 다른 미래의 사용자를 바인드 상태로 둡니다. 이상적으로는 모든 사용자가 동일한 논리를 사용합니다.
pbr

2

Linux 및 OS X에서 작동하도록하려면 다음을 수행하십시오.

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

1

다음을 실행하여 대략적인 견적을 얻을 수 있습니다. top 하고 ' U'를 누르고 사용자 이름을 지정한 다음 상위 프로세스의 CPU 사용률을 추가 .


bash 스크립트에서 사용하고 싶기 때문에 숫자를 알려주는 bash 명령을 알고 싶습니다.
Tim

@Tim top은 -b 스위치를 사용하여 배치 모드로 실행할 수 있습니다. 필요한 반복 횟수를 얻으려면 -n 스위치와 함께 사용하십시오.
nagul

1
사용자가 제출 한 모든 작업 (프로세스)에서 사용하는 코어 수를 얻기위한 코드 예제를 제공 할 수 있습니까?
Tim

@Tim 방망이가 아닙니다. top다른 사람이 이미 수행했는지 확인 하려면 출력 또는 Google을 구문 분석하여 이러한 스크립트를 작성해야 합니다. 그러나 컨텍스트 전환이 발생하는 속도에 따라 매 실행마다 다른 출력을 얻을 것이라고 생각하기 때문에 노력의 가치가 있다고 확신하지 않습니다. 시스템로드 상태가 충분하지 않습니까? 프로세스 대기열 (CPU에서 대기중인 프로세스)을 처리하는 데 필요한 가상 코어 수를 효과적으로 알려줍니다.
nagul

@ nagul : 예 시스템로드가 좋고 나는 또한 그것을 확인합니다. 그러나 어떤 사람들은 다른 사람들이 곧 직장을 운영한다는 것을 알고 있기 때문에 모든 핵심을 다 쓸 수 없다고 계속 말합니다. 따라서 사용중인 코어를 제한해야한다고 생각합니다. 그건 그렇고, CPU와 메모리로드를 확인하고 사용량에 따라 작업을 동적으로 제출하는 온라인 스크립트 어딘가를 보셨습니까? 나는 그들을 오랫동안 찾고 있었다. 감사!
Tim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.