У меня нет простого и быстрого решения для вас, но у меня есть идея для чего-то, что должно хотя бы работать. Сначала я перечислю некоторые тривиальные вещи, которые вы должны проверить - я предполагаю, что вы уже сделали их, но это не повредит, чтобы быть уверенным. Вы не упомянули, какую ОС вы используете, но так как это не Ubuntu, я думаю, Windows. Если это не так, измените детали в этом решении для вашей ОС (например, вместо PowerShell используйте bash или что-то еще, замените утилиты эквивалентными и т. Д.).
Простые тесты
- Убедитесь, что у вас нет чего-то установленного и специально настроенного для ограничения скорости загрузки, например NetLimiter.
- Проверьте использование сети всеми вашими запущенными процессами, например, предложенным atype, и убедитесь, что все низко.
- Запустите,
tracert
чтобы увидеть, действительно ли задержка является внутренней (а не, скажем, в вашем роутере). Вы сказали, что могли бы получить хорошие скорости для своего NAS (что фактически делает менее вероятным, что это внутренняя проблема), поэтому, возможно, есть другая точка в вашем маршруте, которая по какой-то причине перекрывает вашу пропускную способность.
Сложный тест для поиска виновного процесса / услуги
Это требует немного кодирования - но ничего особенного.
По сути, идея состоит в том, чтобы приостановить каждый запущенный процесс / службу по одному и посмотреть, улучшится ли ваша скорость загрузки. Для этого вам нужно будет использовать Windows API, как показано в приведенном здесь примере (просто измените GetDiskFreeSpaceW
функцию на ту, которая вам нужна).
Процессы
- Перечислите все запущенные процессы с помощью Get-Process .
Цикл по списку и для каждого процесса:
Убедитесь, что это не процесс, выполняющий сценарий, по сравнению с
$pid
(вам также может понадобиться проверить процессы родителя / предка; я не уверен).Приостановите процесс, используя
DebugActiveProcess
функцию Windows API. Кроме того, это может оказаться полезным.Подождать несколько секунд здесь, вероятно, хорошая идея, но, возможно, можно пропустить это.
Теперь, когда процесс отключен, проверьте пропускную способность загрузки. Я нашел эту страницу с несколькими примерами того, как это сделать в 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 могут быть неудачными (на самом деле, вы должны сделать это в любом случае, и, возможно, распечатать предупреждение когда это произойдет и продолжится).
Я знаю, что все это больше работы, чем вы рассчитывали, но это лучшая идея, которая у меня есть для вас. Я надеюсь, что это поможет вам решить вашу проблему.