apache2, php4 als cgi und bin_fmt - 40MB pro Aufruf?

Apache, Lighttpd, nginx, Cherokee
Post Reply
alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover
Contact:
 

apache2, php4 als cgi und bin_fmt - 40MB pro Aufruf?

Post by alexander newald »

Hallo,

ich habe jetzt apache 2.0.46 und php 4.3.2 als cgi installiert. Ein einfaches

Code: Select all

<?php
print "OK";
?>
braucht knapp 40 MB bei der Ausführung! Ist das richtig?

Code: Select all

root     19871  0.1  2.9  6360 1796 ?        S    17:25   0:00 /usr/local/apache2/bin/httpd -k start
wwwrun   12551  0.2  2.7  6152 1660 ?        S    17:25   0:01  _ [httpd]
wwwrun   28602  0.0 30.7 39420 18720 ?       R    17:34   0:00  |   _ /usr/bin/php test.php
wwwrun   22349  0.0  5.3 62884 3228 ?        S    17:25   0:00  _ [httpd]
wwwrun   12084  0.0  5.3 62884 3228 ?        S    17:25   0:00  |   _ [httpd]
wwwrun   29407  0.0  5.3 62884 3228 ?        S    17:25   0:00  |       _ [httpd]
apache habe ich mit

Code: Select all

./configure                                                             
        --prefix=/usr/local/apache2                                     
        --sysconfdir=/etc/httpd                                         
        --enable-auth-anon                                              
        --enable-ext-filter                                             
        --enable-logio                                                  
        --enable-mime-magic                                             
        --enable-cern-meta                                              
        --enable-expires                                                
        --enable-headers                                                
        --enable-usertrack                                              
        --enable-unique-id                                              
        --enable-ssl                                                    
        --enable-dav                                                    
        --enable-info                                                   
        --enable-cgi                                                    
        --enable-dav-fs                                                 
        --enable-speling                                                
        --enable-rewrite                                                
        --enable-proxy                                                  
        --enable-proxy-connect                                          
        --enable-proxy-ftp                                              
        --enable-proxy-http                                             
        --enable-cache                                                  
        --enable-disk-cache                                             
        --enable-mem-cache                                              
        --enable-suexec                                                 
        --with-suexec-caller=wwwrun                                     
        --with-suexec-userdir=/home                                     
        --with-mpm=worker
und php mit

Code: Select all

./configure                                                     
        --prefix=/usr                                           
        --sysconfdir=/etc                                       
        --enable-discard-path                                   
        --enable-fastcgi                                        
        --with-openssl                                          
        --with-zlib                                             
        --enable-bcmath                                         
        --with-bz2                                              
        --enable-calendar                                       
        --enable-dba                                            
        --with-gdbm                                             
        --enable-dio                                            
        --enable-ftp                                            
        --with-gd                                               
        --with-jpeg-dir=/usr                                    
        --with-png-dir=/usr                                     
        --with-zlib-dir=/usr                                    
        --with-freetype-dir=/usr                                
        --enable-gd-native-ttf                                  
        --with-gettext                                          
        --enable-mbstring                                       
        --enable-mbregex                                        
        --with-mime-magic                                       
        --with-mysql                                            
        --disable-overload                                      
        --with-readline                                         
        --with-mm                                               
        --enable-sysvmsg                                        
        --enable-sysvsem                                        
        --enable-sysvshm                                        
        --with-expat-dir=/usr                                   
        --disable-debug                                         
        --enable-versioning                                     
        --enable-memory-limit
installiert.

In der httpd.conf steht für php nur

Code: Select all

AddHandler cgi-script .cgi .php .php3 .php4
drin.

php per bin_fmt habe ich mit

Code: Select all

cd /proc/sys/fs/binfmt_misc
echo ':PHP:E::php::/usr/bin/php:' > register
echo ':PHP3:E::php3::/usr/bin/php:' > register
echo ':PHP4:E::php4::/usr/bin/php:' > register
aktiviert.

Hat jemand eine Idee?
the-q
Posts: 18
Joined: 2002-09-03 21:38
 

Re: apache2, php4 als cgi und bin_fmt - 40MB pro Aufruf?

Post by the-q »

Gibt es einen Grund PHP per CGI zu integrieren und nicht als Modul?

Wenn ich es richtig sehe sind es etwas zwar etwas um die 18 MB realen Speicherverbrauchs, aber trotzdem, versuche es mal per Modul...
alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover
Contact:
 

Re: apache2, php4 als cgi und bin_fmt - 40MB pro Aufruf?

Post by alexander newald »

Ne, da hat man wieder die ganzen Probleme mit open_basedir, safe_mode etc.

Jep, sind 18 MB :oops: War dann wohl doch schon zu spät. Die Frage ist aber. "Braucht" php wirklich 18 MB oder habe ich da noch was falsch eingestellt?
arty
Userprojekt
Userprojekt
Posts: 729
Joined: 2002-06-12 10:11
Contact:
 

Re: apache2, php4 als cgi und bin_fmt - 40MB pro Aufruf?

Post by arty »

Hi,

PHP als CGI wird ja bei jedem Aufruf neu geladen und gestartet. Normalerweise sollte es aber so sein, dass das PHP Binary im RAM liegt und dann aufgerufen wird.

bye
arty
the-q
Posts: 18
Joined: 2002-09-03 21:38
 

Re: apache2, php4 als cgi und bin_fmt - 40MB pro Aufruf?

Post by the-q »

Was ist so schlimm an open_basedir? Warum sollten Kundenskripte ausserhalb von /home zugreifen müssen. Und selbst wenn, kannst Du ja einen Ordner innerhalb von home erstellen und dort ein paar Applikationen (z.B. ImageMagick) symlinken...

Link: http://www.php.net/manual/en/features.safe-mode.php

Glaube mir, PHP als CGI bringt immer mehr Probs als Lösungen!
alexander newald
Posts: 1117
Joined: 2002-09-27 00:54
Location: Hannover
Contact:
 

Re: apache2, php4 als cgi und bin_fmt - 40MB pro Aufruf?

Post by alexander newald »

Sehe ich anders, ist aber egal. Ich brauche das nun mal so und habe mich halt nur über die Speichernutzung gewundert
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim
 

Re: apache2, php4 als cgi und bin_fmt - 40MB pro Aufruf?

Post by oxygen »

Dann solltest du möglichst alle PHP Module als externe Module bauen und bei bedarf mit dl() laden. z.B. gd, bz2. Das spart Speicher.
memphis
Posts: 29
Joined: 2003-03-15 14:03
 

Re: apache2, php4 als cgi und bin_fmt - 40MB pro Aufruf?

Post by memphis »

Gibt es einen Grund PHP per CGI zu integrieren und nicht als Modul?
Und ob es einen Grund gibt: Sicherheit. Und das sollte jeder admin wissen. Wenn die setuid eines PHP Scripts = 0 ist so hat der Script zugriff auf das gesamte System und da PHP eigentlich schon eine Programmiersprache ist und nicht ein einfach Scriptparser, kann man mit PHP den ganzen Server übernehmen ... und dann ist der weg. Deshalb kann genau so ein Fall mithilfe von z.B. CGIWRAP (ja mit CGI Wrap als PHP Modul) oder suExec verhindert werden.

Es gibt noch einen 2. Grund: mit PHP als CGI kann man die einzelnen Benutzer auf dem Webserver speziell einstellen, kann sein, dass man mithilfe von AddHandler usw. es auch als Modul für jede WebPräsenz einstellen kann, aber das wäre alles Schwachsinn.

Ach so und noch was, STRATO z.B. benutzt auch PHP als CGI und bestimmt auch alle anderen großen Anbieter, warum, dass hab ich oben schon erklärt.

mfg

memphis
Post Reply