FreeBSD 최상위 구현의 총 CPU 사용량이 프로세스 목록의 CPU 사용량과 다릅니까?

FreeBSD 최상위 구현의 총 CPU 사용량이 프로세스 목록의 CPU 사용량과 다릅니까?

어떤 이유에서인지 내 FreeBSD 시스템의 전체 CPU 사용량은 1%에서 85% 사이에서 변동하지만 프로세스 열의 CPU 사용량은 결코 그 양에 도달하지 않습니다. 예를 들어, 여기서 전체 CPU 사용량은 83.5%이지만 프로세스 목록의 CPU 사용량은 2% 미만입니다.

last pid: 22965;  load averages:  1.45,  1.72,  3.06                                                                                                                                                                                                  up 151+20:08:57 12:32:38
137 processes: 2 running, 135 sleeping
CPU: 83.5% user,  0.0% nice, 12.8% system,  0.0% interrupt,  3.8% idle
Mem: 222M Active, 88M Inact, 315M Wired, 16M Cache, 110M Buf, 342M Free
Swap: 1996M Total, 30M Used, 1966M Free, 1% Inuse

  PID USERNAME    THR PRI NICE   SIZE    RES STATE    TIME    CPU COMMAND
22965 martin       1  96    0  7704K  4172K RUN      0:00  1.27% snmpset
 1234 root          1  44    0  3804K  1068K select  50:36  0.00% hald-addon-storage
 1204 haldaemon     1  44    0  7236K  2300K select  24:13  0.00% hald
 1135 root          1  44    0  3372K   928K nanslp   9:34  0.00% cron
46828 martin       1  44    0 11844K  4140K select   6:06  0.00% irssi
  407 _pflogd       1  44    0  3528K   604K bpf      5:41  0.00% pflogd
86984 root          1  44    0  5284K   996K select   5:14  0.00% gam_server
95843 martin       1  76    0  4560K  1192K wait     5:03  0.00% bash
 6714 martin       1  44    0  5748K  2512K select   4:46  0.00% screen
  775 root          1  44    0  3344K   532K select   3:48  0.00% syslogd

이 두 분야는 어떻게 CPU다른가요? 이 동작의 원인은 무엇입니까? 총 CPU 사용량이 60~80% 정도 되면 기기의 응답 속도가 확실히 느려집니다.

편집하다:

topShift + s또한 if 커널 스레드( ) 의 출력도 표시됩니다 .

last pid: 54866;  load averages:  0.62,  0.90,  1.02                                                                                                                                                                                                  up 153+19:26:17 11:49:58
208 processes: 3 running, 188 sleeping, 17 waiting
CPU: 75.3% user,  0.0% nice, 12.4% system,  0.0% interrupt, 12.4% idle
Mem: 395M Active, 154M Inact, 324M Wired, 16M Cache, 110M Buf, 94M Free
Swap: 1996M Total, 112M Used, 1883M Free, 5% Inuse, 8K In

  PID USERNAME    THR PRI NICE   SIZE    RES STATE    TIME    CPU COMMAND
   11 root          1 171 ki31     0K     8K RUN    2809.4 52.78% idle
54866 martin       1  96    0  6680K  3548K RUN      0:00  0.98% snmpset
15836 root          1  44    0   322M   307M select  31:51  0.29% Xorg
   12 root         17 -60    -     0K   136K WAIT   455:55  0.00% intr
   17 root          1  44    -     0K     8K syncer 162:57  0.00% syncer
 1234 root          1  44    0  3804K  1068K select  51:16  0.00% hald-addon-storage
    3 root          1  -8    -     0K     8K -       27:06  0.00% g_up
 1204 haldaemon     1  44    0  7236K  2268K select  24:32  0.00% hald
    4 root          1  -8    -     0K     8K -       23:52  0.00% g_down
   13 root          1 -16    -     0K     8K -       20:20  0.00% yarrow
   14 root         20 -64    -     0K   160K -       14:37  0.00% usb
    2 root          1  -8    -     0K     8K -       10:42  0.00% g_event

답변1

기본적 top으로사용자프로세스(즉, 커널 및 해당 스레드 이외의 프로세스) 커널이 디스크 또는 네트워크 IO로 인해 사용 중일 수 있지만 top디스플레이 에는 표시되지 않습니다 . top를 눌러 커널 스레드 표시를 전환 할 수 있습니다 SHIFTs.

vmstat유틸리티를 사용하면 시스템 시작 이후의 네트워크 및 디스크 활동(특히)에 대한 통계를 표시할 수 있습니다. vmstat -i시작 이후 각 장치가 수신한 인터럽트 수는 초당 인터럽트가 수신되는 평균 속도와 함께 표시됩니다. vmstat -p da디스크가 무엇을 하고 있는지 확인하는 데 사용됩니다 .

iostat, systat및 같은 다른 도구 netstat도 풍부한 정보를 제공할 수 있습니다.

스케줄러 구성을 조정하여 로드 시 시스템의 응답성을 향상시킬 수 있습니다. 지금 변경하려면 sysctl kern.sched.preempt_thresh=240루트로 실행하세요. 시작 시 동일한 설정을 적용하려면 /etc/sysctl.conf에 추가해야 합니다. 이는 도움이 되지만 워크로드 및 하드웨어 특성에 따라 효율성이 제한된다는 점을 염두에 두십시오.

관련 정보