2013-03-04 3 views
2

IIS 7.5이 설치된 Windows 2008 Server (64 비트)에서 ActiveState Perl 5.16.2 (32 비트)를 실행하는 데 문제가 있습니다. Perl은 IIS의 ISAPI 필터와 함께 PerlIS.dll을 사용하여 실행됩니다.부하가 많은 상태에서 ActiveState Perl이 IIS에서 충돌 함

무작위 오류 메시지를 생성하는로드 및 동시 연결과 관련된 문제가있는 것으로 보입니다. 내가 오류를 생성 할 수있는 여러 번이 스크립트를 요청할 때

use strict; 
use Net::LDAP; 
require Archive::Zip; 
require CAM::PDF; 
require DBI; 
require Excel::Writer::XLSX; 
require HTTP::Request; 
require LWP::UserAgent; 
require MIME::Base64; 
require MIME::QuotedPrint; 
require PDF::API2; 
require PHP::Serialization; 
require Socket; 
require Win32::Process; 

print "HTTP/1.1 200 OK\nContent-Type: text/plain\n\nI'm OK!"; 
:

*** 'C:\inetmli\wwwroot\ldope\index.cgi' error message at: 2013/02/28 13:01:07 
Variable "%Config" is not imported at C:/Perl/lib/Config.pm line 53. 
Variable "%Config" is not imported at C:/Perl/lib/Config.pm line 94. 
Global symbol "%Config" requires explicit package name at C:/Perl/lib/Config.pm line 53. 
Global symbol "%Config" requires explicit package name at C:/Perl/lib/Config.pm line 94. 
Compilation failed in require at C:/Perl/lib/Errno.pm line 8. 
BEGIN failed--compilation aborted at C:/Perl/lib/Errno.pm line 8. 
Compilation failed in require at C:/Perl/lib/IO/Socket.pm line 18. 
BEGIN failed--compilation aborted at C:/Perl/lib/IO/Socket.pm line 18. 
Compilation failed in require at C:/Perl/site/lib/Net/LDAP.pm line 9. 
BEGIN failed--compilation aborted at C:/Perl/site/lib/Net/LDAP.pm line 9. 
Compilation failed in require at C:\inetmli\wwwroot\test\index.cgi line 4. 
BEGIN failed--compilation aborted at C:\inetmli\wwwroot\test\index.cgi line 4. 

*** 'C:\inetmli\wwwroot\ldope\index.cgi' error message at: 2013/02/28 13:01:07 
String found where operator expected at (eval 4) line 2, near "croak 'usage: $io->getline()'" 
    (Do you need to predeclare croak?) 
String found where operator expected at (eval 4) line 8, near "croak 'usage: $io->getlines()'" 
    (Do you need to predeclare croak?) 
String found where operator expected at (eval 4) line 10, near "croak 'Can\'t call $io->getlines in a scalar context, use $io->getline'" 
    (Do you need to predeclare croak?) 
syntax error at (eval 4) line 2, near "croak 'usage: $io->getline()'" 
syntax error at (eval 4) line 8, near "croak 'usage: $io->getlines()'" 
syntax error at (eval 4) line 10, near "croak 'Can\'t call $io->getlines in a scalar context, use $io->getline'" 
Compilation failed in require at C:/Perl/lib/IO/Socket.pm line 12. 
BEGIN failed--compilation aborted at C:/Perl/lib/IO/Socket.pm line 12. 
Compilation failed in require at C:/Perl/site/lib/Net/LDAP.pm line 9. 
BEGIN failed--compilation aborted at C:/Perl/site/lib/Net/LDAP.pm line 9. 
Compilation failed in require at C:\inetmli\wwwroot\test\index.cgi line 4. 
BEGIN failed--compilation aborted at C:\inetmli\wwwroot\test\index.cgi line 4. 

*** 'C:\inetmli\wwwroot\ldope\index.cgi' error message at: 2013/02/28 13:01:07 
Can't locate loadable object for module main in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at C:/Perl/lib/DynaLoader.pm line 99, <DATA> line 635. 
    DynaLoader::croak('Can\'t locate loadable object for module main in @INC (@INC c...') called at C:/Perl/lib/DynaLoader.pm line 161 
    DynaLoader::bootstrap('main') called at C:/Perl/lib/DynaLoader.pm line 106 
    DynaLoader::bootstrap_inherit('main') called at C:/Perl/lib/POSIX.pm line 0 
    require POSIX.pm called at C:/Perl/lib/POSIX.pm line 0 
    PDF::API2::Util::BEGIN() called at C:/Perl/lib/POSIX.pm line 0 
    eval {...} called at C:/Perl/lib/POSIX.pm line 0 
    require PDF/API2/Util.pm called at C:/Perl/lib/POSIX.pm line 0 
    PDF::API2::BEGIN() called at C:/Perl/lib/POSIX.pm line 0 
    eval {...} called at C:/Perl/lib/POSIX.pm line 0 
    require PDF/API2.pm called at C:\inetmli\wwwroot\test\index.cgi line 13 
Compilation failed in require at C:/Perl/site/lib/PDF/API2/Util.pm line 31, <DATA> line 635. 
BEGIN failed--compilation aborted at C:/Perl/site/lib/PDF/API2/Util.pm line 31, <DATA> line 635. 
Compilation failed in require at C:/Perl/site/lib/PDF/API2.pm line 9, <DATA> line 635. 
BEGIN failed--compilation aborted at C:/Perl/site/lib/PDF/API2.pm line 9, <DATA> line 635. 
Compilation failed in require at C:\inetmli\wwwroot\test\index.cgi line 13, <DATA> line 635. 

실행되는 스크립트는 많은 라이브러리를 사용하여 매우 간단한 테스트 스크립트입니다 : 여기

몇 가지 샘플 오류가 있습니다 꽤 자주 있지만, 언제 또는 어떤 원인이 있는지에 대한 명백한 패턴이 없습니다. 난 스크립트로 단지 하나의 마지막 줄을 사용하여 오류 관리 :

print "HTTP/1.1 200 OK\nContent-Type: text/plain\n\nI'm OK!"; 

과는 오류 :

*** 'C:\inetmli\wwwroot\ldope\index.cgi' error message at: 2013/02/28 12:26:25 
syntax error at C:\inetmli\wwwroot\test\index.cgi line 1, near "K!" 
Can't find string terminator '"' anywhere before EOF at C:\inetmli\wwwroot\test\index.cgi line 26, <DATA> line 635. 

내가 여러 스레드에서 시간의 스크립트 수천을 실행해야 내 PC가이 오류를 생성하고 몇 번만 트리거합니다. 나는 그것이 동시 접근으로 촉발 될 것으로 믿는다.

그 오류로 인해 파싱을 시작할 때 전체 파일을 읽지 못했던 것 같습니다.

이 버그는 정신 이상에 괴롭습니다. 로드가 많은 서버에서는 오류가 자주 발생하고 IIS의 전체 응용 프로그램 풀이 충돌하여 다시 시작해야하는 경우가 있습니다.

이전에 본 사람이 있습니까? 주변에 알려진 일이 있습니까? 가능한 한 다른 옵션 (PerlEX 및 FastCGI는 현재 코드로 테스트되지 않음)이 있기 때문에 ISAPI를 사용하고 싶습니다.

내 문제를 해결하는 데 도움이나 조언을 주신 데 대해 매우 감사드립니다. 이후 웹에서 아무것도 찾지 못했을 수도 어쩌면이 겉으로보기에 임의의 오류 메시지와 함께 투쟁하는 다른 사람을 도울 수 있습니다.

은 지금까지 나는 시도했다 :

  • 분할 응용 프로그램을 다른 응용 프로그램 풀에
  • 가 여러 작업자 프로세스를 추가 (만 긍정적 인 효과는 추락 응용 프로그램이 지금 현재 응용 프로그램 풀에 한계가 있다는 것입니다) 하나의 응용 프로그램 풀 재활용 응용 프로그램 풀을 설정하는 진정한
  • -
  • 설정 프로세서 선호도 (오류가 희귀하지만 퀘스 트 로그에서 사라질하지 만든) 모두 뚜렷한 효과가 매우 높은 매우 낮은
  • 그들은 아마도 그것과 아무 상관이 없다 아는에도 불구하고 "고전적인"/ "파이프 라인"및 ASP.NET 설정의 모든 종류를 사용
  • 펄 5.14이 문제를 5.16

누구나 가지고 만 펄이없는 더 이상 아이디어가 없습니까?

+0

해결해 봤습니까? – albertjan

답변

0

나의 경우 (MacOS) 오류가 무작위로 STDOUT-> flush()에 나타납니다. 스레드 환경에서 제거하고 문제가 사라집니다.