Depuração da saturação de rede percebida

2

Estou tendo um problema de rede em que uma máquina está dizendo que está enviando dados a uma taxa de 150 Mbit / s, mas a outra máquina está recebendo apenas 100 Mbit / s. O aplicativo de envio eventualmente falha, reclamando de falta de memória (na verdade, é um dsp personalizado, portanto, não adianta entrar em mensagens de erro).

Por isso, suspeito que a máquina receptora não esteja lidando com a carga corretamente, mas não tenho muita experiência em depurar esse tipo de situação.

Estou usando vmstat , mas não tenho ideia se algum dos números é alarmante ou não:

r  b swpd     free   buff   cache  si  so  bi  bo    in     cs us sy id wa st
0  0    0 13317200 262808 2311648   0   0   0   0  1131   3403  4  1 96  0  0
0  0    0 13309140 262808 2311652   0   0   0   9  2092   9235 10  2 89  0  0
0  0    0 13295748 262808 2311652   0   0   0   0  4521  22710 14  4 82  0  0
5  0    0 13279620 262808 2311652   0   0   0   0 13835  66325 30 10 60  0  0
6  0    0 13257432 262808 2311656   0   0   0   0 20092  92365 43 14 43  0  0
3  0    0 13232756 262808 2311660   0   0   0   0 22522 117367 49 17 34  0  0
3  0    0 13207832 262808 2311664   0   0   0  10 23419 149649 54 20 26  0  0
7  0    0 13159720 262808 2311668   0   0   0   8 23816 168436 56 21 23  0  0
8  0    0 13122148 262808 2311668   0   0   0   0 26267 168578 54 20 26  0  0
8  0    0 13119544 262808 2311668   0   0   0   0 30498 164004 53 24 24  0  0
7  0    0 13117312 262808 2311668   0   0   0   0 29853 163340 55 23 23  0  0
8  0    0 13116832 262808 2311664   0   0   0   3 29942 162609 55 22 24  0  0
8  0    0 13118824 262808 2311668   0   0   0   0 30098 162232 55 21 24  0  0
8  0    0 13118212 262808 2311668   0   0   0   0 29213 159902 45 18 37  0  0
8  0    0 13116352 262808 2311668   0   0   0   3 29552 161978 55 21 24  0  0
7  0    0 13117468 262808 2311664   0   0   0   9 30218 162704 56 22 22  0  0
5  0    0 13116972 262808 2311672   0   0   0   0 30172 164399 57 19 24  0  0
8  0    0 13115608 262808 2311672   0   0   0   8 30068 163894 56 18 26  0  0
0  0    0 13181080 262808 2311676   0   0   0   0 19062 151066 46 20 34  0  0
6  0    0 13186536 262808 2311676   0   0   0   0  6812  85690 15 19 66  0  0
1  0    0 13186784 262808 2311676   0   0   0   0  6733  82150 19 22 59  0  0
0  0    0 13203400 262808 2311716   0   0   0   9  2659  33015  5  5 90  0  0

Também verifiquei sockstat , mas não sei se esses números são preocupantes:

> cat /proc/net/sockstat
sockets: used 920
TCP: inuse 82 orphan 0 tw 0 alloc 91 mem 8228
UDP: inuse 271 mem 20
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0

Aqui está a memória do buffer TCP (tentei defini-los como valores que vi em outra máquina no laboratório, onde eles foram praticamente triplicados sem alteração):

> sysctl -a | grep tcp.*mem
net.ipv4.tcp_mem = 69888        93184   139776
net.ipv4.tcp_wmem = 4096        16384   16777216
net.ipv4.tcp_rmem = 4096        87380   16777216

Quanto ao hardware, eu tenho 8 núcleos disso:

> cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 23
model name      : Intel(R) Xeon(R) CPU           E5472  @ 3.00GHz
stepping        : 10
cpu MHz         : 2403.000
cache size      : 6144 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
bogomips        : 5999.77
clflush size    : 64
cache_alignment : 64
address sizes   : 38 bits physical, 48 bits virtual

Quais outros utilitários eu posso usar para depurar isso? E se alguém tiver algum bom recurso para esse tipo de depuração, eu ficaria grato!

    
por Fylke 18.07.2011 / 18:22

2 respostas

1

O que isso mostra? sudo sysctl -a | grep tcp.*mem

Além disso: sudo ethtool ethWhateverYoursIs

Acredito que, de alguma forma, o aplicativo de envio não está respeitando o controle de fluxo TCP e, eventualmente, fica sem buffer de memória TCP e falha.

    
por 18.07.2011 / 19:08
3

Eu estou supondo que o remetente tem uma placa de 1Gbit e que o tráfego que está enviando não é TCP, caso contrário, nunca seria mais rápido do que o receptor pode receber. A "melhor" solução é provavelmente fazer com que o aplicativo obtenha alguns acks que ele não está enviando muito rápido, mas você também pode verificar se o receptor realmente está rodando 100 Mbits ao invés de 1 Gbit. Você também pode ver netstat -i nos dois sistemas para ver se há erros ou quedas.

EDIT: Com base no seu comentário, eu sugiro que o TCP não está funcionando corretamente (o que faria sentido se o seu aplicativo está vazando memória, há quase certamente um bug), OU suas ferramentas de medição não são precisas. O que você está usando para medir seu tráfego? Você pode executar netstat -i -c para uma atualização contínua (uma vez por segundo) para ver o que o sistema acha que está enviando e recebendo.

    
por 18.07.2011 / 18:44