CPU 기본 - 평균 부하 [Linux 성능 최적화]

평균 부하를 확인하려면 top 또는 uptime 명령을 사용하십시오.

$ uptime 
03:44:21 up 4 days, 15:31, 1 user, load average: 0.63, 0.83, 0.76
03:44:21 // 当前时间 
up 4 days, 15:31  // 系统运行时间 
1 user // 正在登录用户数 
load average: 0.63, 0.83, 0.76   //过去1分钟、5分钟、15分钟的平均负载

부하 평균은 얼마입니까?

평균 로드는 시스템이 단위 시간당 실행 가능 하고 중단 불가능한 상태에 있는 평균 프로세스 수 , 즉 활성 프로세스의 평균 수를 나타내며 CPU 사용량과 직접적인 관련이 없습니다.

(평균 활성 프로세스 수는 직관적으로 단위 시간당 활성 프로세스 수이지만 실제로는 활성 프로세스 수의 지수적 감쇠 평균입니다. 이는 시스템의 더 빠른 계산 방법이며 직접적으로 간주됩니다. 활성 상태로 평균 프로세스 수는 문제가 되지 않습니다.)

예를 들어 로드 평균은 2입니다.

CPU가 2개만 있는 시스템에서는 모든 CPU가 완전히 점유되었음을 의미합니다.

4개의 CPU가 있는 시스템에서 이는 CPU의 50%가 유휴 상태임을 의미합니다.

CPU가 1개만 있는 시스템에서는 프로세스의 절반이 CPU를 놓고 경쟁하지 않는다는 의미입니다.

메모:

Runnable 프로세스 : CPU를 사용 중이거나 CPU를 기다리는 프로세스(R 상태)를 말한다.

중단할 수 없는 상태의 평균 프로세스 : 커널 모드에서 중요한 프로세스에 있는 프로세스이며 이러한 프로세스는 중단할 수 없습니다. (D상태)

예를 들어, 가장 일반적인 것은 하드웨어 장치의 I/O 응답을 기다리는 것입니다. 또 다른 예로는 프로세스가 디스크에 데이터를 읽고 쓸 때 데이터의 일관성을 보장하기 위해 디스크에서 응답을 받기 전에 다른 프로세스나 인터럽트에 의해 중단될 수 없습니다. 중단할 수 없는 상태. 이때 프로세스가 중단되면 디스크 데이터와 프로세스 데이터 간의 불일치가 발생하기 쉽습니다. 무정전 상태는 실제로 프로세스 및 하드웨어 장치에 대한 시스템의 보호 메커니즘입니다.

합리적인 로드 평균은 얼마입니까?

이상적인 로드 평균은 CPU 수와 같습니다.

우선, 시스템에 CPU가 몇 개 있는지 알아야 합니다 . 이는 top 명령이나 /proc/cpuinfo 파일을 통해 읽을 수 있습니다.

grep 'model name'  /proc/cpuinfo | wc -l

로드 평균을 확인하려면 세 가지 값이 있습니다 . 세 가지 서로 다른 시간 간격의 평균은 시스템 부하 추세를 분석하기 위한 데이터 소스를 제공합니다 .

예를 들어 1분의 값은 15분의 값보다 훨씬 작습니다. 이는 최근 1분 동안 시스템의 부하가 감소하고 있으며, 지난 15분 동안 부하가 심했다는 것을 의미합니다.

실제 프로덕션 환경에서는 평균 부하가 CPU 수의 70%보다 높을 때 높은 부하 문제를 분석하고 해결해야 합니다. 로드가 너무 높으면 프로세스의 응답 속도가 느려져 서비스의 정상적인 기능에 영향을 미칠 수 있습니다.

하지만 이 수치가 절대적인 수치는 아닙니다. 시스템의 평균 부하를 모니터링한 다음, 더 많은 과거 데이터를 기반으로 부하의 변화 추세를 판단하는 것이 가장 좋습니다. 예를 들어 부하가 두 배로 증가한 등 부하가 뚜렷한 상승 추세를 보이는 경우 분석 및 조사를 수행합니다.

로드 평균 및 CPU 사용률

로드 평균이 높다는 것은 CPU 사용량이 높다는 것을 의미합니까?

평균 로드는 단위 시간당 실행 가능한 상태와 중단할 수 없는 상태의 프로세스 수를 나타냅니다. 모두 CPU를 사용하는 프로세스 뿐만 아니라 CPU를 기다리고 I /O를 기다리는 프로세스 도 포함됩니다 .

CPU 사용량은 단위 시간당 CPU 사용량에 대한 통계이며 반드시 평균 부하와 정확히 일치하지는 않습니다. 예를 들어:

  • CPU 집약적인 프로세스의 경우 많은 양의 CPU를 사용하면 평균 로드가 증가하며 현재 이 두 가지는 일관됩니다.
  • I/O 집약적인 프로세스의 경우 I/O를 기다리면 평균 로드도 증가하지만 CPU 사용량이 반드시 높지는 않습니다.
  • CPU를 기다리는 프로세스 스케줄링 수가 많으면 평균 부하도 증가하며 이때 CPU 사용량은 상대적으로 높을 것입니다.

(높은 로드 평균은 CPU를 많이 사용하는 프로세스로 인해 발생할 수 있습니다. 높은 로드 평균이 반드시 높은 CPU 사용량을 의미하는 것은 아니며 I/O가 더 바쁘기 때문일 수 있습니다.)

평균 하중 사례 분석

실험 전 준비

1머신 구성: 2CPU, 8GB 메모리

2 스트레스 및 sysstat 패키지를 미리 따르십시오.

스트레스는 평균 부하가 증가하는 시나리오를 시뮬레이션하기 위해 비정상적인 프로세스로 여기에서 사용되는 Linux 시스템 스트레스 테스트 도구입니다.

sysstat에는 시스템 성능을 모니터링하고 분석하기 위해 일반적으로 사용되는 Linux 성능 도구가 포함되어 있습니다. 우리는 mpstat와 pidstat를 사용할 것입니다.

  • Mpstat는 일반적으로 사용되는 멀티 코어 CPU 성능 분석 도구로, 각 CPU의 성능 지표와 모든 CPU의 평균 지표를 실시간으로 보는 데 사용됩니다.
  • pidstat는 일반적으로 사용되는 프로세스 성능 분석 도구로, CPU, 메모리, I/O, 컨텍스트 전환 등 프로세스의 성능 지표를 실시간으로 보는 데 사용됩니다.

3 가동 시간을 사용하여 테스트 전 평균 부하를 확인할 수 있습니다

$ uptime 
load average: 0.11, 0.15, 0.09

시나리오 1: CPU 집약적인 프로세스

스트레스 시뮬레이션 - 평균 로드를 보기 위한 가동 시간 - 각 CPU의 사용량을 보기 위한 mpstat - 특정 프로세스 사용량을 보기 위한 pidstat

#第一个终端:模拟一个CPU使用率100%的场景 
$ stress --cpu 1 --timeout 600 
#再开一个终端, -d 参数表示高亮显示变化的区域 
$ watch -d uptime 
..., load average: 1.00, 0.75, 0.39 
#第三个终端 mpstat查看CPU使用率的变化情况 
#-P ALL 表示监控所有CPU,后面数字5表示间隔5秒后输出一组数据 
$ mpstat -P ALL 5 
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU) 
13:30:06 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 
13:30:11 all 50.05 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00  49.95 
13:30:11 0    0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 
13:30:11 1  100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00  0.00

두 번째 터미널부터는 1분 평균 로드가 1.00으로 서서히 증가하고, 세 번째 터미널에서도 CPU 사용률은 100%이나 iowait는 0인 것을 알 수 있습니다. CPU 사용량이 100%로 인해 로드 평균이 높아졌음을 나타냅니다.

\

# 间隔5秒后输出一组数据 
$ pidstat -u 5 1 13:37:07 UID PID %usr %system %guest %wait %CPU CPU Command 
13:37:12 0  2962 100.00 0.00  0.00  0.00 100.00 1 stress

스트레스 프로세스의 CPU 사용량이 100%임을 알 수 있습니다.

\

시나리오 2: I/O 집약적인 프로세스

스트레스 시뮬레이션 - 평균 로드를 보기 위한 가동 시간 - 각 CPU의 사용량을 보기 위한 mpstat - 특정 프로세스 사용량을 보기 위한 pidstat

#stress 模拟I/O压力,即不停地执行sync 
$ stress -i 1 --timeout 600 
#第二个终端 
$ watch -d uptime 
..., load average: 1.06, 0.58, 0.37 
#第三个终端 #显示所有CPU的指标,并在间隔5秒输出一组数据 
$ mpstat -P ALL 5 13 
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU) 13:41:28 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 
13:41:33 all 0.21 0.00 12.07 32.67 0.00 0.21 0.00 0.00 0.00 54.84 
13:41:33  0 0.43 0.00 23.87 67.53 0.00 0.43 0.00 0.00 0.00  7.74 
13:41:33  1 0.00 0.00  0.81  0.20 0.00 0.00 0.00 0.00 0.00 98.99

1분 평균부하는 서서히 1.06에 도달하였고, CPU 시스템 중 하나의 사용률은 23.87, iowait는 67.53%에 도달하여 평균부하의 증가는 iowait의 증가에 따른 것임을 알 수 있다.

# 间隔5秒后输出一组数据,-u 表示CPU指标 
$ pidstat -u 5 1 
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU) 
13:42:08 UID PID %usr %system %guest %wait %CPU CPU Command 13:42:13  0 104  0.00 3.39  0.00  0.00  3.39  1  kworker/1:1H 
13:42:13  0 109  0.00 0.40  0.00  0.00  0.40  0  kworker/0:1H 
13:42:13  0 2997 2.00 35.53  0.00  3.99  37.52  1  stress 
13:42:13  0 3057 0.00 0.40  0.00  0.00  0.40  0  pidstat

여전히 스트레스 과정으로 인해 발생하고 있음을 알 수 있습니다.

시나리오 3: 프로세스 수가 많은 시나리오

스트레스 시뮬레이션 - 평균 로드를 보기 위한 가동 시간 - 특정 프로세스 사용량을 보기 위한 pidstat

#stress 模拟8个进程,超出了CPU运行能力就会出现等待CPU的进程 
$ stress -c 8 --timeout 600 
#系统只有两个CPU 
$ uptime 
..., load average: 7.97, 5.93, 3.02 
# 间隔5秒后输出一组数据 
$ pidstat -u 5 1 14:23:25 UID PID %usr %system %guest %wait %CPU CPU Command 
14:23:30 0  3190  25.00  0.00  0.00 74.80 25.00 0 stress 
14:23:30 0  3191  25.00  0.00  0.00 75.20 25.00 0 stress 
14:23:30 0  3192  25.00  0.00  0.00 74.80 25.00 1 stress 
14:23:30 0  3193  25.00  0.00  0.00 75.00 25.00 1 stress 
14:23:30 0  3194  24.80  0.00  0.00 74.60 24.80 0 stress 
14:23:30 0  3195  24.80  0.00  0.00 75.00 24.80 0 stress 
14:23:30 0  3196  24.80  0.00  0.00 74.60 24.80 1 stress 
14:23:30 0  3197  24.80  0.00  0.00 74.80 24.80 1 stress 
14:23:30 0  3200  0.00  0.20  0.00  0.20  0.20 0 pidstat

8개의 프로세스가 2개의 CPU를 놓고 경쟁하며 각 프로세스는 CPU 시간(%wait 열)을 최대 75%까지 기다립니다.

추천

출처blog.csdn.net/weixin_62173811/article/details/126336422