Eu tenho alto status io. Gravações altas. Mas quais arquivos estão sendo gravados?

14
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          11.50    0.02    5.38    0.07    0.00   83.04

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdc               0.01    89.92    0.26   41.59     3.36   457.19    22.01     0.23    5.60   0.09   0.38
sdb               0.10    15.59    0.40   14.55     8.96   120.57    17.33     0.04    2.91   0.07   0.11
sda               0.13    45.37    0.96    8.09    20.06   213.56    51.63     0.02    2.64   0.16   0.14
sde               0.01    31.83    0.09   11.34     0.94   103.56    18.29     0.04    3.52   0.14   0.16
sdd               0.01    48.01    0.13   19.81     1.58   202.16    20.44     0.11    5.62   0.13   0.25

Existe uma maneira de saber quais arquivos estão sendo gravados? 457 kB / s

Também esta outra máquina linux tem o mesmo problema.

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          20.50    0.00   46.48   20.74    0.00   12.28

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.17    11.61    0.99    3.51    36.65    59.43    42.70     0.10   23.20   3.84   1.73
sdb               0.55   224.18   24.30   97.45   246.48  1287.12    25.19     3.96   32.53   7.88  95.91
sdd               0.53   226.75   25.56   90.96   283.50  1271.69    26.69     3.43   29.44   8.22  95.75
sdc               0.00     1.76    0.28    0.06     4.73     7.26    70.41     0.00   12.00   2.12   0.07
dm-0              0.00     0.00    1.11   14.77    36.41    58.92    12.01     1.00   62.86   1.09   1.74
dm-1              0.00     0.00    0.04    0.12     0.17     0.49     8.00     0.00   21.79   2.47   0.04
dm-2              0.00     0.00    0.01    0.00     0.05     0.01     8.50     0.00    7.90   2.08   0.00

1200 solicitação de gravação por segundo para um servidor que não hospeda nada

user4951
fonte

Respostas:

8

Bem, você pode tentar os seguintes comandos que funcionaram para mim no RHEL6:

1) Qualquer que seja o dispositivo que você vê na saída "iostat" executando mais E / S, use-o com o fuserseguinte comando:

fuser -uvm device

2) Você obterá uma lista de processos com o nome de usuário causando mais E / S. Selecione esses PIDS e use-o no lsofcomando da seguinte maneira:

lsof -p PID | more

3) Você obterá uma lista de arquivos / diretórios junto com o usuário executando o máximo de E / S.

Ravi Trivedi
fonte
root @ host [~] # fusor -uv / home4 root @ host [~] # fuser -uvm / home4 COMANDO DE ACESSO DO PID DO USUÁRIO / home4: newgames 18297 ..c .. (newgames) php cuntschi 18407 ..c .. ( cuntschi) php newgames 18457 ..c .. (newgames) php
user4951
5

Parece que não há ferramentas para descobrir a taxa de transferência de E / S por arquivo, exceto dentro do processo usando o arquivo. Mas existem maneiras de descobrir a taxa de transferência de E / S do processo.

iotop - É um utilitário top / iftop que mostra a taxa de transferência de E / S do processo.

Depois de apontar qual processo está com E / S pesada, use o seguinte para descobrir qual arquivo está sendo usado

lsof -c <process name>

Isso deve limitar o escopo e ajudar a apontar a fonte.

John Siu
fonte
como obter o processo? Também não produzem nada. Algo está escrevendo tantas coisas e eu não sei o que
user4951
Desculpe, eu coloquei o utilitário io errado. Deveria ser iotop, não iostat. Corrigi minha resposta.
John Siu
(1) Você também pode atualizar qual distro (redhat / centos / ubuntu ...) você está executando? (2) Esta é uma instalação nova? (3) Algum compartilhamento de arquivos como o samba em execução?
John Siu
3

Você pode usar inotifywaitfrom inotify-toolspara descobrir exatamente em qual arquivo está sendo gravado. Isso não informa a quantidade de dados que está sendo gravada, mas pelo menos indica em quais arquivos estão sendo gravados.

Como exemplo, este comando imprimirá o nome do arquivo assim que qualquer um for criado, modificado ou excluído em /tmp:

$ sudo inotifywait -e modify -e attrib -e move -e create -e delete -m -r /tmp
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/tmp/ CREATE test
/tmp/ MODIFY test

Infelizmente, você precisará adivinhar em qual diretório os arquivos estão sendo gravados. Isso falhará se você tentar usá-lo no diretório raiz, embora aparentemente isso possa ser substituído:

$ sudo inotifywait -e modify -e attrib -e move -e create -e delete -m -r /
Setting up watches.  Beware: since -r was given, this may take a while!
Failed to watch /; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches'.
adittes
fonte
2

Use systemtap para monitorar cada syscall de gravação / gravação. Você pode fazer algumas contas e verá qual arquivo / fd obtém mais bytes.

Erben Mo
fonte