У меня нет простого и быстрого решения для вас, но у меня есть идея для чего-то, что должно хотя бы работать. Сначала я перечислю некоторые тривиальные вещи, которые вы должны проверить - я предполагаю, что вы уже сделали их, но это не повредит, чтобы быть уверенным. Вы не упомянули, какую ОС вы используете, но так как это не 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 могут быть неудачными (на самом деле, вы должны сделать это в любом случае, и, возможно, распечатать предупреждение когда это произойдет и продолжится).
Я знаю, что все это больше работы, чем вы надеялись сделать, но это лучшая идея, которая у меня есть для вас. Я надеюсь, что это поможет вам решить вашу проблему.