Команда net start задерживается? - PullRequest
1 голос
/ 31 января 2010

У меня есть несколько медленно встраиваемых ПК под управлением Windows 2000, и у меня возникают проблемы с надежным запуском службы. Существует ОЧЕНЬ заметная задержка между выполнением команды «net start xxx» и сообщением «служба xxx запускается». Это приводит к тому, что мой сервис не запускается.

Мой сервис регулярно даже не получает команду «Пуск» (я регистрирую это и вижу, что это никогда не происходит).

Я пытался повторить это на гораздо более быстром XP-боксе, но задержка, конечно, НАМНОГО короче. Однако я специально добавил в свой обработчик Onstart режим сна (60000) для имитации медленного запуска.

В этом (XP) поле - даже если команда net start возвращает 'служба xxx не может быть запущена (приблизительно через 20 с лишним секунд), служба, похоже, продолжает работу и действительно запускается. В течение этого времени диспетчер службы сообщает о «запуске» - пока не завершится мой сон (60000) и не начнутся отчеты диспетчера службы.

Я также пытался установить для параметра реестра «ServicesPipeTimeout» значение 65000 - и это, похоже, не имело никакого значения: -O - да, я сделал перезагрузку; -).

Кто-нибудь знает, почему это происходит, пожалуйста? Несмотря на то, что я установил для своей записи реестра «ServicesPipeTimeout» значение 65000 - запуск сети завершается примерно через 20 секунд: -O.

Может показаться, что если мне удастся выполнить команду запуска до истечения времени ожидания этой команды «net start» - моя служба действительно запустится. Вот почему я попытался установить для параметра реестра «ServicesPipeTimeout» значение 65000, но, похоже, это не имеет значения.

NB. Моё сервисное приложение написано на C # с использованием VS2008, нацеленного на .Net Framework V2 - вот и все, что могут поддерживать старые блоки 2000.

Большое спасибо - надеюсь, когда-нибудь ....

Привет

Graham

Ответы [ 2 ]

1 голос
/ 31 января 2010

Ну, это действительно ServicePipeTimeout, который контролирует время ожидания. Что не ясно, так это когда таймер таймаута начинает тикать. Тот факт, что OnStart () не вызывается, указывает на то, что он запускается, когда SCM создает процесс. Следующий умственный скачок, который можно сделать, заключается в том, что 30-секундный тайм-аут все еще применяется ко времени запуска процесса, независимо от значения реестра.

Коробка в очень плохом состоянии, если время холодного запуска .NET превышает 30 секунд. Время холодного запуска определяется производительностью жесткого диска, примерно 85% времени уходит на поиск и загрузку DLL. Обычно. Это возможно, если на коробке никогда не было дефрагментированного жесткого диска, и вы недавно установили на него .NET. Это может привести к тому, что кластеры файлов .NET будут разбросаны по всему диску, что потребует много перемещений считывающих головок. Это может значительно снизить пропускную способность данных, вплоть до килобайта в секунду, если каждый кластер находится на отдельной дорожке.

Исправить это можно так же просто, как дефрагментировать диск. Задавайте вопросы об этом на superuser.com

0 голосов
/ 02 февраля 2010

Хммм,

Я проделал еще некоторую работу над этим, и это не совсем .Net, который требует времени, его интерфейс servicecontroller: -O.

Чтобы обойти эту проблему, написали приложение «Controller» (используя .Net 2), и задержка в вызове «sc.start» - он был вызван сразу после первой записи в журнале, но я получил исключение ~ 30 секунд спустя

02 февраля 2010 г. 07: 15: 26: 752, клиент CarwashClient остановлен 02 февраля 2010 г. 07: 15: 57: 556, StartService (): Исключение: Не удается запустить службу CarwashClient на компьютере '.'. 02 февраля 2010 г. 07: 15: 57: 586, StartService (): исключение: служба не ответила на запрос запуска или управления своевременно

Теперь - поскольку приложение контроллера использует .Net, большинство необходимых библиотек уже были бы загружены.

Мой сервис никогда не видел событие OnStart - оно также регистрируется, и в журнале ничего не появляется.

Мой сервис также не имеет определенных зависимостей - он просто не получает событие OnStart: -O.

Теперь я переписал свой контроллер, чтобы повторить попытку 3 раза в случае, если он получает исключение тайм-аута. Попробую еще раз позже, когда смогу вернуться на коробку ....

Очевидно, что с библиотекой servicecontroller происходит некоторая серьезная задержка загрузки: -O.

Чтобы ответить на другие вопросы, это всего лишь 300 МГц процессор во встроенном ПК :-). Несмотря на это - это не должно быть так медленно. Хороший аргумент в отношении дефрагментатора, но пока что он произошел на двух из двух коробок: -O.

Спасибо

Graham

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...