Domanda

Devo mantenere un sito Web preistorico con tonnellate di codice perl. Dopo aver trasferito in un nuovo server, le cose sono state sfocate:

Quando più richieste dallo stesso client sono in esecuzione su una pagina (generando immagini con GD), tali script sovrascrivono le variabili a vicenda, portando a strani risultati.

Come una rapida soluzione alternativa ho impostato maxrequestsperchild= 1 in Apache, che fissa questo, ma ora le cose vengono rallentate a un gattonio ...

C'è un modo per separare le richieste? Qualsiasi parametro mod_perl o apache che potrebbe aiutarmi?

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
.

Qualsiasi soluzione per questo sarebbe molto apprezzata :)


.

Modifica: non riesco a trovare un modo corretto per risolvere le cose con mod_perl, ma i seguenti lavori di soluzione oraro:

    .
  • disabilita mod_perl
  • Abilita MOD_CGI
  • AddHandler CGI-Script .pl
  • Disabilita SUEXEC

L'ultimo è stato necessario perché mi ha dato "fine prematura delle intestazioni di script" quando Suexec è stato abilitato.

È stato utile?

Soluzione

No, non c'è nulla che tu possa fare per "separare le richieste". Tutti gli script in esecuzione in un singolo processo di interprete perl condivideranno lo stesso ambiente e sotto mod_perl che l'ambiente è persistente. Puoi provare a impostare ModPerl::Registry per eseguirli in (se non lo hai già) che dovrebbe avvolgerli nella propria subroutine ed elimina alcuni dei problemi dello spazio dei nomi, ma se gli script non sono scritti in mente (*) Dovrebbe ancora modificarli per almeno una certa misura.

http://perl.apache.org/docs/ 2.0 / Utente / Intro / Start_Fast.HTML # Registry_scripts

È inoltre possibile eseguire problemi quando gli script utilizzano moduli particolari come Sapone :: Lite che hanno uno stato globale che è condiviso su tutti i moduli che lo usa, sebbene sia un problema molto più rare.

Quindi no, sfortunatamente non c'è nulla che tu possa fare per garantire che gli script funzionino bene senza cambiarli. Alcuni potrebbero andare bene, altri non saranno. È necessario impostare un normale server Apache CGI oltre al server MOD_PERL separato e migrarli gradualmente. Non riceverai le prestazioni sul normale server CGI, ma non avrai anche i problemi.

(*) In particolare, e questa è dalla memoria da molte, molte lune fa, devono evitare di impostare le variabili globali, dichiarare sempre variabili con my, utilizzare il modulo CGI (o Mod_Perl API) per l'interazione richiesta, e cose come quello.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top