2013-03-04 3 views
2

У меня проблема с ActiveState Perl 5.16.2 (32-разрядная версия) на Windows Server 2008 (64-разрядная версия) с IIS 7.5. Perl запускается с использованием PerlIS.dll с фильтром ISAPI в IIS.Ошибка ActiveState Perl в IIS при большой нагрузке

Возможно, проблема связана с большой нагрузкой и/или параллельными соединениями, которые генерируют кажущиеся случайными сообщения об ошибках.

Вот несколько ошибок выборки:

*** '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. 

Скрипт выполняется является очень простой тест скрипт, использующий множество библиотек:

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!"; 

При запросе этот сценарий несколько раз я могу генерировать ошибку довольно часто, но нет явной картины того, когда или что ее вызывает. Мне даже удалось получить ошибку, используя только единственную последнюю строку в качестве сценария:

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. 

Я должен запустить скрипт тысячи раз из нескольких потоков из моих ПК для генерации этой ошибки, и она запускается только несколько раз. Я считаю, что это вызвано одновременным доступом.

Из этой ошибки кажется, что он не читал весь файл, когда начал его разбирать?

Эта ошибка раздражает меня безумием! На сервере с большой нагрузкой он часто генерирует ошибки, а иногда весь пул приложений в IIS аварийно завершает работу и должен быть перезапущен.

Кто-нибудь видел это раньше? Есть ли известная работа? Желательно, чтобы я остался с ISAPI, так как другие параметры (PerlEX и FastCGI не тестировались с текущим кодом).

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

До сих пор я пытался:

  • расщепления приложений в разных пулах приложений (только положительный эффект, что разбившийся приложение теперь ограничивается текущим пула приложений)
  • добавление нескольких рабочих процессов единый пул приложений (сделанные ошибки, но не реже исчезает)
  • настройка процессора сродства к истинным
  • настройке пула приложений рециркуляции и очень высокие и очень низкий, чтобы не видимому эффекта
  • , используя все виды «классических»/«конвейера» и настройки ASP.NET, несмотря зная, что они, вероятно, не имеют ничего общего с ним
  • Perl 5,14 НЕ имеет эту проблему, только Perl 5,16

Любой получил больше идей?

+0

Вы когда-нибудь исправляли это? – albertjan

ответ

0

В моем случае (MacOS) ошибка отображается случайным образом в STDOUT-> flush(), когда число потоков больше 120. Я удалил его в среде потоков, и проблема исчезла.

Смежные вопросы