O uso total de CPU e uso de CPU sob lista de processos é diferente na implementação superior do FreeBSD?

2

Por alguma razão, o uso geral da CPU na minha máquina FreeBSD oscila entre 1% e 85%, mas a utilização da CPU na coluna de processos nunca chega a esse valor. Por exemplo, aqui o uso geral da CPU é de 83,5%, mas o uso da CPU na lista de processos é menor que 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

Como esses dois campos CPU são diferentes? O que pode causar esse comportamento? A máquina definitivamente responde mais lentamente nos momentos em que o uso total da CPU está em torno de 60 a 80%.

EDITAR:

Saída de top se os encadeamentos do kernel também forem mostrados ( Shift + s ):

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
    
por Martin 05.11.2014 / 11:45

1 resposta

2

Por padrão, top exibe apenas os processos usuário (ou seja, processos que não sejam o kernel e seus threads). É possível que o kernel esteja ocupado com disco / rede IO que não está aparecendo na exibição top . Você pode alternar a exibição de threads do kernel em top pressionando SHIFT s .

Você pode usar o utilitário vmstat para exibir estatísticas sobre (entre outras coisas) a atividade da rede e do disco desde o início do sistema. vmstat -i mostrará o número de interrupções recebidas por cada dispositivo desde o início e a taxa média por segundo em que foram recebidos. Use vmstat -p da para ver o que seus discos estão fazendo.

Outras ferramentas como iostat , systat e netstat também podem ser informativas.

Você pode aumentar a capacidade de resposta do seu sistema sob carga ajustando a configuração do agendador. Para alterá-lo agora, execute sysctl kern.sched.preempt_thresh=240 como root. Para que as mesmas configurações sejam aplicadas na inicialização, inclua-as em /etc/sysctl.conf também. Isso deve ajudar, mas observe que sua eficácia será limitada por sua carga de trabalho e características do hardware.

    
por 05.11.2014 / 12:08

Tags