저는 Centos 6.10을 실행하는 대학 서버를 사용하고 있습니다. 시스템이 유휴 작업 상태에 있는 시간을 계산하려고 합니다. /proc/stat 의사 파일을 보고 있습니다. 매뉴얼 페이지에 따르면 첫 번째 행의 네 번째 열은 시스템이 유휴 상태였던 시간(100분의 1초)이어야 합니다.
내가 겪고 있는 문제는 이 값이 매우 크다는 것입니다. 초 수를 얻기 위해 100으로 나누고 그 결과를 60^2*24(하루의 초)로 나누어 일 수를 구하면 시스템 가동 시간보다 긴 답을 얻습니다.
간단히 말해서, 이 값(내가 계산한 방식)은 시스템이 부팅된 시간보다 오랫동안 유휴 상태였다는 것을 알려줍니다.
답변1
모든 CPU의 유휴 시간의 합입니다.
첫 번째 cpu
줄 /proc/stat
뒤에는 가 옵니다 cpu0
. cpu1
각 줄은 다음과 유사합니다.온라인CPU. 이것은 최신 버전의proc(5)
맨페이지.
/proc/uptime
모든 CPU가 온라인 상태일 수는 없지만 첫 번째 /system 항목의 유휴 값(두 번째 필드의 초 수와 동일)은 모든 CPU에 대해 계산됩니다.가능한중앙 처리 장치[1].
따라서 이를 CPU 수로 나누어서 얻을 수 있습니다.무엇평균과 같습니다.
현재의 가능한 개방형 및 오프라인 CPU 번호를 얻는 한 가지 방법은 파일 /sys/devices/system/cpu/
디렉터리를 살펴보는 것입니다.
[1] 구경해 보세요fs/proc/stat.c소스에서:
static int show_stat(struct seq_file *p, void *v)
{
...
for_each_possible_cpu(i) {
...
idle += get_idle_time(kcs, i);
...
seq_put_decimal_ull(p, "cpu ", nsec_to_clock_t(user));
...
seq_put_decimal_ull(p, " ", nsec_to_clock_t(idle));
...
for_each_online_cpu(i) {
...
seq_printf(p, "cpu%d", i);
...
idle = get_idle_time(kcs, i);
...
seq_put_decimal_ull(p, " ", nsec_to_clock_t(idle));