runqueue가 CPU 켜기를 기다리는 프로세스 수 + 현재 실행 중인 프로세스 수이고 waitqueue가 I/O를 기다리는 프로세스 수인 경우, vmstat 출력에서 B가 R보다 크다는 것은 I/O가 있음을 의미합니다. CPU 제한이 아닌 제한이 있습니까? 아래 링크의 내용이 반대여서 혼란스럽습니다...http://nonfunctiontestingtools.blogspot.com/2013/03/vmstat-output-explained.html?m=1
"실행 가능한 스레드(r)를 CPU 수로 나눈 값이 1보다 큰 경우 -> 가능한 CPU 병목 현상(CPU가 충분하거나 있는 경우), (r)을 CPU 수(가동 시간의 논리적 CPU)와 비교해야 합니다. ) 더 많은 스레드.) 차단된 프로세스 열(b)에서 더 큰 숫자는 느린 디스크(r)가 항상 (b)보다 높아야 함을 나타냅니다. 그렇지 않은 경우 일반적으로 CPU 병목 현상이 있음을 의미합니다.
답변1
b
in 보다 높은 숫자는 r
CPU가 많이 유휴 상태임을 의미하므로 혼동됩니다. 문서에는 "I/O 병목 현상이 있음을 의미"해야 합니다.
페이지에는 r
CPU 수보다 더 높게 설정해서는 안 되며 r=16은 12-CPU 시스템에서 "심각한" 문제라고 나와 있습니다. 이것은 상당히 과장된 것입니다. 이는 단순히 CPU가 완전히 활용되고 일부 스레드가 대기 중임을 의미합니다. 일반적으로 큰 문제는 아닙니다.
마지막으로, 링크된 문서가 가끔 그러는 것처럼 스레드와 프로세스를 혼동하지 마십시오. r
및 열은 b
프로세스 수가 아닌 스레드 수를 표시합니다. 모든 프로세스가 단일 스레드인 것은 아닙니다.
답변2
내 생각엔 이 문장이 완전히 혼란스러운 것 같아.
그 당시에는 r > num_cpus
전체 시스템을 (그 순간) CPU에 바인딩된 것으로 간주하는 것이 합리적입니다.
r > b
하지만 특별한 의미 는 없는 것 같아요 .
또 다른 소스에서는 "[the] 열에 0이 아닌 숫자가 계속 나타나면 b
추가 조사를 할 수 있습니다 iostat
."라고 제안합니다. 여러 IO 대기열이 사용되고 있다는 사실을 알지 않는 한 이 상황을 IO 바인딩 시스템을 암시하는 것으로 간주하는 것이 더 합리적일 수 있습니다. .
iostat
%util
각 디스크 장치에 대해 하나의 열을 포함합니다 . 즉, %util
100이면 장치에는 항상 하나 이상의 프로세스가 대기하고 있음을 의미합니다. avgqu-sz
얼마나 많은 요청이 기다리고 있는지 보여줍니다.
AIO를 사용하는 프로그램은 한 번에 여러 요청을 제출할 수 있습니다. 이는 주로 MySQL InnoDB와 같은 데이터베이스에서 사용됩니다. 대부분의 프로그램은 캐싱을 지원하지 않기 때문에 Linux AIO를 사용하지 않습니다.