Alto uso de CPU do processo de liberação

3

Eu sei que o processo flush é garbage collector do kernel, mas no meu caso em dois servidores esse processo é realmente intesivo à CPU. Na maior parte do tempo, usa 80-100% da CPU.

 2898 root      20   0     0    0    0 R   78  0.0   2900:22 flush-0:21

O que pode causar isso? Eu pensei em memória corrompida, mas em dois servidores ao mesmo tempo? Eu acho que isso começou a acontecer depois da atualização do kernel. Talvez haja algum bug conhecido?

Editar:

Informação atualizada. É o Gentoo Linux de 64 bits, a versão do kernel é 2.6.39-gentoo-r2. Tem 8 GB de RAM. Não há muita atividade IO.

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               5.01        87.19         5.55  166452685   10596484
sdb               5.01        87.30         5.55  166662767   10596484
md0              10.05       160.74         2.75  306883505    5258392
md1               3.61        13.74         2.10   26229593    4006684

O mais estranho é que a atividade de IO em sda / sdb, estas são partições de troca, que estão desativadas.

Estamos usando apenas o processo uwsgi e alguns scripts Python em execução no crontab.

iostat -x 5

Linux 2.6.39-gentoo-r2 (python-1)   07/27/11    _x86_64_    (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          44.98    0.00    3.73    0.81    0.00   50.48

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               1.37     0.70    4.35    0.67    87.16     5.55    37.00     0.08   15.16   15.61   12.21   3.07   1.54
sdb               1.37     0.70    4.35    0.67    87.27     5.55    36.99     0.07   14.84   15.22   12.35   3.11   1.56
md0               0.00     0.00    9.36    0.69   160.67     2.76    32.51     0.00    0.00    0.00    0.00   0.00   0.00
md1               0.00     0.00    3.11    0.50    13.76     2.09     8.79     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          68.24    0.00   25.01    0.30    0.00    6.45

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.20    1.20    0.80     4.80     4.00     8.80     0.01    7.10    7.50    6.50   7.10   1.42
sdb               0.00     0.20    1.00    0.80     4.80     4.00     9.78     0.01    7.00    6.00    8.25   7.00   1.26
md0               0.00     0.00    0.00    0.60     0.00     2.40     8.00     0.00    0.00    0.00    0.00   0.00   0.00
md1               0.00     0.00    2.00    0.00     8.80     0.00     8.80     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          68.24    0.00   21.13    1.18    0.00    9.45

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    1.20    0.00     6.40     0.00    10.67     0.01    6.50    6.50    0.00   6.50   0.78
sdb               0.00     0.00    1.40    0.00     7.20     0.00    10.29     0.02   11.43   11.43    0.00  11.43   1.60
md0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
md1               0.00     0.00    2.60    0.00    13.60     0.00    10.46     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          60.73    0.00   22.34    2.75    0.00   14.18

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    5.40    0.00    22.40     0.00     8.30     0.08   14.22   14.22    0.00   6.04   3.26
sdb               0.20     0.00    3.80    0.00    36.80     0.00    19.37     0.03    7.74    7.74    0.00   7.74   2.94
md0               0.00     0.00    7.00    0.00    48.80     0.00    13.94     0.00    0.00    0.00    0.00   0.00   0.00
md1               0.00     0.00    2.40    0.00    10.40     0.00     8.67     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          74.22    0.00   20.08    1.25    0.00    4.45

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.20     2.20   10.80    0.60    92.00    11.20    18.11     0.07    5.81    5.78    6.33   5.81   6.62
sdb               0.60     2.20   11.60    0.60   144.80    11.20    25.57     0.08    6.92    6.83    8.67   6.25   7.62
md0               0.00     0.00   22.00    2.40   226.40     9.60    19.34     0.00    0.00    0.00    0.00   0.00   0.00
md1               0.00     0.00    1.20    0.00    10.40     0.00    17.33     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          69.17    0.00   21.25    0.85    0.00    8.72

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.60    0.00     2.40     0.00     8.00     0.00    6.00    6.00    0.00   6.00   0.36
sdb               0.00     0.00    0.80    0.00     7.20     0.00    18.00     0.01    9.75    9.75    0.00   9.75   0.78
md0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
md1               0.00     0.00    1.40    0.00     9.60     0.00    13.71     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          56.99    0.00   22.66    3.63    0.00   16.73

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    1.60    1.20     8.00     4.80     9.14     0.02    8.00   10.62    4.50   7.21   2.02
sdb               0.00     0.00    1.40    1.20     7.20     4.80     9.23     0.02    8.38   10.71    5.67   8.15   2.12
md0               0.00     0.00    0.40    0.80     1.60     3.20     8.00     0.00    0.00    0.00    0.00   0.00   0.00
md1               0.00     0.00    2.60    0.00    13.60     0.00    10.46     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          68.65    0.00   25.95    1.55    0.00    3.85

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.40    45.80   43.20   19.40   445.60   260.80    22.57     0.48    7.71    9.05    4.73   4.67  29.26
sdb               1.00    45.80   48.00   19.40   607.20   260.80    25.76     0.56    8.26    9.70    4.70   4.06  27.36
md0               0.00     0.00  102.40   64.40  1020.00   257.60    15.32     0.00    0.00    0.00    0.00   0.00   0.00
md1               0.00     0.00    6.80    0.00    33.60     0.00     9.88     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          67.86    0.00   22.76    2.03    0.00    7.35

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               8.80     1.00   74.20    0.80   590.40     7.20    15.94     0.26    3.46    3.44    4.50   3.07  23.06
sdb               2.20     1.00   77.80    0.80   552.00     7.20    14.23     0.31    3.94    3.92    6.00   3.30  25.96
md0               0.00     0.00  115.20    1.40   907.20     5.60    15.66     0.00    0.00    0.00    0.00   0.00   0.00
md1               0.00     0.00   48.00    0.00   234.40     0.00     9.77     0.00    0.00    0.00    0.00   0.00   0.00
    
por ThomK 27.07.2011 / 12:06

1 resposta

5

flush não é "coleta de lixo no kernel". Não tenho certeza de onde você leu, mas C não tem coletor de lixo. Não há gerenciamento automático de memória. Os programadores C precisam gerenciar suas próprias alocações de memória. Enfim ...

flush é o processo que o subsistema de memória virtual usa para gravar páginas sujas no disco. Isso é chamado de pdflush ou bdflush nos kernels EL.

Quando você executa qualquer IO (não direto), o arquivo que você acessa vai para o pagecache. Se você ler um arquivo de texto do disco, esse arquivo de texto agora existe no disco e na memória cache. Se você fizer algumas alterações e salvar esse arquivo, a chamada real do sistema write() feita pelo editor de texto será concluída com relação à cópia do arquivo na memória. Dessa forma, a chamada do sistema retorna rapidamente e seu editor de texto pode voltar a aceitar sua entrada, em vez de pausar enquanto grava dados no disco rígido (relativamente) lento. As páginas de memória que esse arquivo de texto modificado ocupa agora são chamadas de "páginas sujas". O kernel se preocupa em colocar o bloco real gravando no disco mais tarde, isso é chamado de "syncing" ou "flushing dirty pages".

Você esperaria ver um processo de flush obter alto uso da CPU, às vezes, porque o processo executará IO em disco e provavelmente gastará a maior parte do tempo no iowait.

Não há nada para se preocupar. Seu sistema está se comportando como qualquer outro sistema Linux.

    
por 20.05.2013 / 14:57