Não tenho uma solução simples e rápida para você, mas tenho uma ideia para algo que deveria pelo menos funcionar. Primeiro, vou listar algumas coisas triviais que você deve verificar - suponho que você já as tenha feito, mas não faz mal ter certeza. Você não mencionou qual sistema operacional está usando, mas como não é Ubuntu, estou supondo que o Windows esteja funcionando. Se não estiver, modifique os detalhes desta solução para seu sistema operacional (por exemplo, em vez de usar o PowerShell bash ou qualquer outra coisa, substitua os utilitários por outros equivalentes, etc.).
Testes simples
- Verifique se você não tem algo instalado e propositadamente configurado para limitar a velocidade de download, como o NetLimiter.
- Verifique o uso da rede de todos os seus processos em execução , como o tipo sugerido, e verifique se tudo está baixo.
- Execute
tracert
para ver se a interrupção é realmente interna (e não, digamos, no roteador). Você disse que poderia obter boas velocidades para seu NAS (o que, na verdade, torna menos provável que seja um problema interno), então talvez haja outro ponto em sua rota que esteja sufocando sua largura de banda por algum motivo.
Teste complicado para encontrar o processo / serviço culpado
Isso requer um pouco de codificação - nada demais, no entanto.
Basicamente, a ideia é suspender todos os processos / serviços em execução, um de cada vez, e verificar se a velocidade de download melhora. Para isso, você precisará usar a API do Windows, conforme mostrado no exemplo aqui (apenas mude a função GetDiskFreeSpaceW
para qualquer função que você precise).
Processos
- Listar todos os processos em execução com Get -Processo .
-
Faça um loop sobre a lista e para cada processo:
-
Verifique se este não é o processo que está executando o script, comparando com
$pid
(talvez você também precise verificar processos pai / ancestral; não tenho certeza). -
Suspenda o processo usando o
DebugActiveProcess
Função da API do Windows. Além disso, isso pode ser útil. -
Esperar alguns segundos aqui provavelmente é uma boa ideia, mas pode ser normal pular isto.
-
Com o processo agora desativado, teste sua largura de banda de download. Eu encontrei esta página com alguns exemplos de como fazer isso no PowerShell, e isso parece a maneira mais simples:
$a=Get-Date; Invoke-WebRequest http://client.akamai.com/install/test-objects/10MB.bin|Out-Null; "$((10/((Get-Date)-$a).TotalSeconds)*8) Mbps"
Você também pode tentar usar este teste de velocidade script ; é em Python, então você deve ser capaz de rodá-lo em outro sistema operacional se precisar.
-
Se a largura de banda ultrapassar o limite desejado (digamos, 1 Mbps; decidir por si mesmo), esse processo estará limitando a velocidade de download. Imprima seu nome ou ID de processo ou o que for e pare o loop.
-
Retomar o processo invocando o DebugActiveProcessStop função da API do Windows.
-
Serviços
É possível que o que está limitando sua velocidade de download seja um serviço e não um processo. Nesse caso, você pode fazer a mesma coisa que eu sugeri para processos, somente você precisa usar diferentes funções de API ( Suspender-Serviço e Resume-Service ) e você não precisa verificar se não está se suspendendo (já que o script não é um serviço).
Advertências
Pode haver processos e serviços críticos do sistema que você deve evitar parar e possivelmente não conseguir. No caso do primeiro, você precisará fazer uma lista de exclusões, e no caso deste último, você precisará levar em conta que suas chamadas de API podem falhar (na verdade, você deve fazer isso de qualquer maneira, e talvez imprimir um aviso quando isso acontece e continua).
Eu sei que tudo isso é mais trabalho do que você esperava, mas é a melhor ideia que tenho para você. Espero que ajude você a resolver seu problema.