문제

Perl 코드 톤으로 선사 시대 웹 사이트를 유지해야합니다. 새 서버로 이동 한 후에는 퍼지가 있습니다 :

동일한 클라이언트의 여러 요청이 페이지에서 실행되면 (GD를 사용한 이미지 생성)이 스크립트는 서로 변수를 덮어 씁니다. 이상한 결과가 발생합니다.

빠른 해결 방법으로 ipache에서 maxrequestsperchild= 1을 설정합니다. 그러나 이제는 사물이 크롤링으로 속도가 느려집니다 ...

요청을 분리하는 방법이 있습니까? 나를 도울 수있는 mod_perl 또는 apache 매개 변수

Apache :

Server version: Apache/2.2.15 (Unix)
Server built:   Apr  3 2014 23:56:16
Server's Module Magic Number: 20051115:25
Server loaded:  APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
.

perl -v

This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
.

이를위한 모든 솔루션은 매우 높이 평가됩니다.)


편집 : mod_perl로 물건을 수정하는 적절한 방법을 찾을 수는 없지만 다음 해결 방법은 다음과 같습니다.

  • mod_perl
  • 를 비활성화합니다
  • 사용 mod_cgi
  • 를 활성화합니다
  • addHandler CGI-script .pl
  • suexec
  • 를 비활성화합니다

SueXec이 활성화되면 스크립트 헤더의 조기 종료를 주었기 때문에 마지막 사람이 필요했습니다.

도움이 되었습니까?

해결책

아니요, "요청을 분리하는"할 수있는 일은 아무것도 없습니다. " 단일 Perl 인터프리터 프로세스에서 실행되는 모든 스크립트는 동일한 환경을 공유 할 것이고 환경이 지속적이지 않은 mod_perl에서 공유합니다. ModPerl::Registry를 설정하여 자신의 서브 루틴에 포함 해야하는 (아직없는 경우 아직하지 않은 경우) 이름 공간 문제를 제거하지만 스크립트가 염두에 두어야합니다 (*). 'RE는 여전히 적어도 어느 정도까지 수정해야합니다.

http://perl.apache.org/docs/ 2.0 / 사용자 / 소개 / start_fast.html # Registry_Scripts

스크립트가 모든 모듈을 사용하여 공유되는 전역 상태가있는 SOAP :: Lite와 같은 특정 모듈과 같은 특정 모듈을 사용하는 경우,

그래서 아니요, 불행히도 스크립트가 변경하지 않고 스크립트가 괜찮을지 확인하기 위해 할 수있는 방법은 없습니다. 일부는 괜찮을지도 모르며, 다른 사람들은 그렇지 않을 것입니다. 별도의 mod_perl 서버 외에 정규 Apache CGI 서버를 설정하고 점차적으로이를 넘어서서 마이그레이션해야합니다. 일반 CGI 서버에서 성능을 얻지는 못하지만 문제가 없습니다.

(*) 특히, 이것은 많은 사람들의 기억으로부터, 많은 달 전에, 전역 변수를 설정하지 않아도 항상 my를 사용하여 변수를 선언하고, CGI 모듈 (또는 mod_perl API)을 사용하여 요청 상호 작용 및 같은 것들을 사용해야합니다. 그.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top