2010-01-31 4 views
1

Windows 2000을 실행하는 느린 임베디드 PC가 있는데 서비스를 안정적으로 시작하는 데 문제가 있습니다. 'net start xxx'명령과 'xxx service is starting'메시지를 발행하는 사이에 아주 현저한 지연이 있습니다. 이로 인해 서비스가 시작되지 않습니다.net start 명령이 지연 되었습니까?

내 서비스가 정기적으로 '시작'명령을받지 못함 (이 문제를 기록하고 있으며 결코 발생하지 않음을 알 수 있음).

훨씬 더 빠른 XP 상자에서이 작업을 반복했지만 지연 시간은 훨씬 짧습니다. 그러나 느리게 시작을 시뮬레이트하기 위해 의도적으로 Onstart 처리기에 절전 모드 (60000)를 추가했습니다.

net start 명령이 'xxx 서비스를 시작할 수 없습니다 (약 20 초 후)에도 서비스가 계속 켜져 있고 실제로 시작됩니다. 이 시간 동안 서비스 관리자는 내 수면 (60000)이 완료되고 서비스 관리자 보고서가 시작될 때까지 '시작 중'이라고보고합니다.

또한 'ServicesPipeTimeout'레지스트리 항목을 65000으로 설정하려고했는데 아무런 차이가 없었습니다. -O - 예 재부팅했습니다 .-).

왜 이런 일이 발생하는지 알 수있는 사람이 있습니까? 내 'ServicesPipeTimeout'레지스트리 항목을 65000으로 설정 했는데도 net start가 20 초 후 실패합니다. -O.

이 'net start'명령이 실행되기 전에 시작 명령을 내 보내면 내 서비스가 실제로 시작됩니다. 이것이 내가 'ServicesPipeTimeout'레지스트리 항목을 65000으로 설정하려고 시도한 이유입니다.하지만 전혀 차이가없는 것처럼 보입니다.

NB 내 서비스 응용 프로그램은 .NET Framework V2에서 대상으로하는 VS2008을 사용하여 C#으로 작성되었습니다. 이전 2000 박스가 지원할 수있는 모든 것입니다.

많은 감사 - 지금까지 잘하면 ....

감사

그레이엄

답변

1

글쎄, 정말 시간 제한을 제어 ServicePipeTimeout입니다. 확실하지 않은 것은이 타임 아웃 타이머가 똑딱 거리기 시작할 때입니다. OnStart()가 호출되지 않는다는 사실은 SCM이 프로세스를 생성 할 때 시작된다는 것을 나타냅니다. 다음에 발생할 수있는 정신적 도약은 레지스트리 값에 관계없이 30 초 제한 시간이 프로세스 시작 시간에 적용된다는 것입니다.

.NET 콜드 스타트 ​​시간이 30 초보다 길면 상자 모양이 매우 어둡습니다. 콜드 스타트 ​​시간은 하드 디스크 성능에 의해 좌우되며, 대략 85 %는 DLL을 찾고로드하는 데 소모됩니다. 일반적으로. 상자에 하드 디스크의 조각 모음을 한 번도 설치하지 않은 상태에서 최근에 .NET을 설치 한 경우가 있습니다. 이렇게하면 .NET 파일의 클러스터가 디스크 전체에 흩어져 많은 읽기 헤드 이동이 필요하게됩니다. 이렇게하면 모든 클러스터가 다른 트랙에있는 경우 초 당 킬로바이트만큼 낮은 데이터 처리량을 크게 줄일 수 있습니다.

드라이브를 조각 모음하는 것만 큼 간단 할 수 있습니다. -O :이에 대한 몇 가지 더 많은 작업을 수행하고 실제로 닷넷은 시간이 걸리는하지, 그것 servicecontroller 인터페이스있다

, superuser.com

0

흠에서 그것에 대해 질문을한다.

이 문제를 해결하려면 .Net 2를 사용하여 '컨트롤러'응용 프로그램을 작성하고 보류가 'sc'호출에 있습니다.시작 '- 이것은 첫 번째 로그 항목 바로 다음에 호출되었지만 ~ 30 초 후에 예외가 발생했습니다.

02 2 월 2010 07 : 15 : 26 : 752, CarwashClient가 중지되었습니다. 02 Feb 2010 07:15:57 : 556, StartService() : 예외 : 컴퓨터 '.'에서 CarwashClient 서비스를 시작할 수 없습니다. 02 Feb 2010 07 : 15 : 57 : 586, StartService() : 예외 : 서비스가 시작 또는 제어 요청에 적시에 응답하지 않았습니다.

이제 컨트롤러 앱이 .Net을 사용하므로 필요한 라이브러리가 이미로드되었을 것입니다.

내 서비스는 OnStart 이벤트를 보지 못했습니다. 또한 로그에 아무것도 나타나지 않고 로그에 아무 것도 나타나지 않습니다.

내 서비스도 정의 된 종속성이 없습니다. OnStart 이벤트가 발생하지 않습니다. -O.

이제 시간 제한 예외가 발생하는 경우 컨트롤러를 3 번 ​​다시 시도하도록 컨트롤러를 다시 작성했습니다. 상자에 다시 돌아올 수있을 때 나중에 다시 시도 할 것입니다 ....

분명히 servicecontroller 라이브러리에서 계속 진행되는 주요로드 지연이 있습니다. -O.

제기 된 다른 점에 대답하려면 임베디드 PC에서 단 300MHz 프로세서 만 :-). 그럼에도 불구하고 - 그렇게 느리지 않아야합니다. 조각 모음에 대한 좋은 지적이지만, 지금까지 두 개의 상자 중 두 곳에서 일어났습니다. -O.

감사

그레이엄