2008-09-16 8 views
3

이것은 공유 호스팅 환경입니다. 나는 서버를 제어하지만 반드시 내용은 아니다. Perl 스크립트를 사용하는 클라이언트가 있는데,이 스크립트는 때때로 제어 할 수 없게되고 프로세스가 종료 될 때까지 프로세서의 50 %를 빨아들입니다.IIS에서 Perl 스크립트의 실행 시간을 어떻게 제한 할 수 있습니까?

ASP 스크립트를 사용하면 스크립트를 실행할 수있는 시간을 제한 할 수 있으며 IIS는 90 초 후에 종료합니다. Perl 스크립트는 cgi 프로세스로 실행 중이므로 (실제로 스크립트를 실행하는 외부 프로세스를 시작하기 때문에) Perl 스크립트에서는 작동하지 않습니다.

마찬가지로 작업자 프로세스에서 과다한 리소스 소비를 찾는 기술은 소비되는 리소스 (프로세서)가 WP 자체가 아닌 자식 프로세스에서 씹어 내고 있기 때문에이를 볼 수 없습니다.

IIS가 너무 오래 실행되는 Perl 스크립트 (또는 다른 cgi 유형 프로세스)를 중단하도록하는 방법이 있습니까? 방법??

+0

구성 방법에 대한 자세한 정보를 제공 할 수 있습니까? –

답변

1

UNIX 스타일 시스템에서 ALRM 이벤트를 트래핑하는 신호 처리기를 사용한 다음 알람 기능을 사용하여 시간 초과가 예상되는 작업을 시작하기 전에 타이머를 시작합니다. 작업이 완료되면 알람 (0)을 사용하여 알람을 끄고 정상적으로 종료합니다. 그렇지 않으면 신호 처리기가 정상적으로 모든 것을 종료하기 위해 알람을 처리합니다.

필자는 잠시 동안 Windows에서 perl로 작업하지 않았고 Windows는 다소 POSIXy이지만 이것이 작동한다는 것을 보장 할 수는 없습니다. 당신은 당신의 플랫폼에서 신호가 지원되는지 또는 어느 정도까지 지원되는지보기 위해 perl 문서를 점검해야 할 것이다.

alarm()을 사용한 신호 처리 및 이런 종류의 자체 파괴 프로그래밍에 대한 자세한 내용은 Perl Cookbook에서 찾을 수 있습니다. 여기에 간단한 예를 들어 다른 게시물에서 해제하고 약간 수정 한 것 :

"CPU 제한을 IIS를위한"인터넷 검색
eval { 
    # Create signal handler and make it local so it falls out of scope 
    # outside the eval block 
    local $SIG{ALRM} = sub { 
     print "Print this if we time out, then die.\n"; 
     die "alarm\n"; 
    }; 

    # Set the alarm, take your chance running the routine, and turn off 
    # the alarm if it completes. 
    alarm(90); 
    routine_that_might_take_a_while(); 
    alarm(0); 
}; 
0

이 안타 제공 :

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/38fb0130-b14b-48d5-a0a2-05ca131cf4f2.mspx?mfr=true

는 "CPU 모니터링 기능 모니터를 자동으로 종료 CPU 시간을 많이 소비하는 작업자 프로세스로, 개별 응용 프로그램 풀에 대해 CPU 모니터링을 사용할 수 있습니다. "

http://technet.microsoft.com/en-us/library/cc728189.aspx

"CPU 모니터링을 사용하여, 당신은 CPU 사용에 대한 작업자 프로세스를 모니터링하고 선택적으로 많은 양의 CPU 시간을 소비하는 작업자 프로세스를 종료 할 수 있습니다. CPU 모니터링은 작업자 프로세스 격리 모드에서만 사용할 수 있습니다."

1

ASP 스크립트 시간 초과는 모든 스크립팅 언어에 적용됩니다. ASP 페이지에서 스크립트가 실행 중이면 스크립트 시간 초과로 인해 문제가되는 페이지가 닫힙니다.

1

이 일에 업데이트 ...

그것은이 특정 스크립트를 분명히 약간의 버그가 있음을 밝혀, 그리고 Googlebot이 "그것의 버튼을 눌러"미친을 구동 할 수있는 초자연적 인 능력을 가지고있다. 이 스크립트는 캘린더 링을하는 오래된 상용 응용 프로그램입니다. 분명히 "다음 달"과 "지난 달"에 대한 링크를 표시하며, "다음 달"을 너무 많이 따라 가면 절벽에서 떨어질 것입니다. 그러나 결과 페이지에는 여전히 "다음 달"링크가 포함됩니다. Googlebot은 계속해서 스크립트를 죽이고 프로세서를 씹습니다.

이상하게도 Disallow : /를 사용하여 robots.txt를 추가하면 문제가 해결되지 않습니다.Googlebot이 이미 스크립트를 보류했거나 느슨하게하지 않았거나 단순히 robots.txt를 무시하고있었습니다.

어쨌든 Microsoft의 Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)는 perl.exe 프로세스의 환경을보다 자세히 볼 수있게 해 주므로 큰 도움이되었습니다. 그 결과 Googlebot이 내 문제.

일단 내가 알았 으면 (그리고 robots.txt가 문제를 해결하지 못한다고 결정한) IIS를 사용하여 직접이 사이트의 모든 트래픽을 * .googlebot.com에서 차단할 수있었습니다.이 경우에는 잘 작동합니다. Google이이 콘텐츠를 색인화할지 여부는 신경 쓰지 않기 때문에

모든 아이디어를 게시 해 주셔서 감사합니다.

에릭 롱맨

관련 문제