У меня нет простого и быстрого решения для вас, но у меня есть идея для чего-то, что должно хотя бы работать. Сначала я перечислю некоторые тривиальные вещи, которые вы должны проверить - я предполагаю, что вы уже сделали их, но это не повредит, чтобы быть уверенным. Вы не упомянули, какую ОС вы используете, но так как это не Ubuntu, я думаю, Windows. Если это не так, измените детали в этом решении для вашей ОС (например, вместо PowerShell используйте bash или что-то еще, замените утилиты эквивалентными и т.д.).
Простые тесты
- Убедитесь, что у вас нет чего-то установленного и специально настроенного для ограничения скорости загрузки, например NetLimiter.
- Проверьте использование сети всеми вашими запущенными процессами, например, предложенным atype, и убедитесь, что все низко.
- Запустите
tracert чтобы увидеть, является ли задержка действительно внутренней (а не, скажем, в вашем роутере). Вы сказали, что могли бы получить хорошие скорости для своего NAS (что фактически делает менее вероятным, что это внутренняя проблема), поэтому, возможно, есть другая точка в вашем маршруте, которая по какой-то причине перекрывает вашу пропускную способность.
Сложный тест для поиска виновного процесса / услуги
Это требует немного кодирования - но ничего особенного.
По сути, идея состоит в том, чтобы приостановить каждый запущенный процесс / службу по одному и посмотреть, улучшится ли ваша скорость загрузки. Для этого вам нужно использовать Windows API, как показано в примере здесь (просто измените функцию GetDiskFreeSpaceW на любую функцию, которая вам нужна).
Процессы
- Перечислите все запущенные процессы с помощью Get-Process.
Цикл по списку и для каждого процесса:
Убедитесь, что это не процесс, выполняющий скрипт, по сравнению с $pid (вам также может понадобиться проверить родительские / родительские процессы; я не уверен).
Приостановите процесс, используя функцию Windows API DebugActiveProcess. Кроме того, это может оказаться полезным.
Подождать несколько секунд здесь, вероятно, хорошая идея, но, возможно, можно пропустить это.
Теперь, когда процесс отключен, проверьте пропускную способность загрузки. Я нашел эту страницу с несколькими примерами того, как это сделать в PowerShell, и это кажется самым простым способом:
$a=Get-Date; Invoke-WebRequest http://client.akamai.com/install/test-objects/10MB.bin|Out-Null; "$((10/((Get-Date)-$a).TotalSeconds)*8) Mbps"
Вы также можете попробовать использовать этот скрипт теста скорости ; он в Python, поэтому вы должны иметь возможность запустить его на другой ОС, если вам нужно.
Если пропускная способность превышает желаемый порог (скажем, 1 Мбит / с; решите сами), тогда этот процесс ограничивает скорость загрузки. Распечатайте его имя или идентификатор процесса или что-то еще и остановите цикл.
Возобновите процесс, вызвав функцию DebugActiveProcessStop в Windows API.
Сервисы
Возможно, что то, что ограничивает вашу скорость загрузки, это сервис, а не процесс. В этом случае вы можете сделать то же самое, что я предложил для процессов, только вам нужно использовать различные функции API (Suspend-Service и Resume-Service), и вам не нужно проверять, что вы не приостанавливаете себя (так как скрипт это не услуга).
Предостережения
Там могут быть критические системные процессы и службы, которые вы должны избегать остановки, а возможно, даже не можете. В первом случае вам необходимо составить список исключений, а во втором - принять во внимание, что ваши вызовы API могут быть неудачными (на самом деле, вы должны сделать это в любом случае, и, возможно, распечатать предупреждение когда это произойдет и продолжится).
Я знаю, что все это больше работы, чем вы надеялись сделать, но это лучшая идея, которая у меня есть для вас. Я надеюсь, что это поможет вам решить вашу проблему.