Quero medir a largura de banda do meu servidor remailer implementado em Python, o que significa que quero medir quantos bytes meu servidor está processando por segundo. Então, como eu planejava fazer isso: por um período fixo de tempo (por exemplo 300sec
), estou medindo o número de received bytes
e sent bytes
. Após esse período de tempo calculo a proporção: bytes_received / bytes_sent
. No entanto, não tenho certeza se é isso que quero, porque me dá uma proporção (que geralmente fica em torno de 1 a 1,5), o que significa que processo todas ou quase todas as mensagens que recebi em algum período de tempo, mas Quero medir quantos bytes processei. Ficarei muito grato se alguém puder me aconselhar como posso medir minha largura de banda.
Responder1
Acho que o que você precisa é fazer isso:
bytes_recebidos= bytes_recebidos300s - bytes_recebidos0s
bytes_enviados= bytes_enviados300s - bytes_enviados0s
total_bytes_processados= bytes_recebidos - bytes_enviados
Isso lhe daria o número total de bytes processados durante o período de 300s.
Responder2
Você pode usar psutil.net_io_counters() para calcular a largura de banda durante um período de tempo. Você tirará um instantâneo em 0 segundos e um instantâneo em 300 segundos.
def get_bandwidth():
# Get net in/out
net1_out = psutil.net_io_counters().bytes_sent
net1_in = psutil.net_io_counters().bytes_recv
time.sleep(300) # Not best way to handle getting a value 300 seconds later
# Get new net in/out
net2_out = psutil.net_io_counters().bytes_sent
net2_in = psutil.net_io_counters().bytes_recv
# Compare and get current speed
if net1_in > net2_in:
current_in = 0
else:
current_in = net2_in - net1_in
if net1_out > net2_out:
current_out = 0
else:
current_out = net2_out - net1_out
network = {"traffic_in": current_in, "traffic_out": current_out}
# Return data in bytes
return network