Apache mit PHP langsam

sergey

Member
Hallo,

dies ist meine erste OpenBSD Installation, zuvor hatte ich bereits einige
Erfahrung mit Mac OS X Server (nicht nur GUI, sondern auch Shell) und
CentOS / RHEL.

habe da folgendes Problem bzw. folgende Situation...

Die Situation:
- Reverse DNS Lookups funktionieren (getestet mit dig)
- Server hat eine Verbindung nach draussen (getestet mit ping)
- Forwared DNS Resolve ist auch OK (getestet mit ping, lynx, etc..)

Die Probleme...

Bei eingeschaltener LookupHosts Direktive:
- Apache ist bei HTML-Seiten schnell
- Reverse DNS Hostnames werden NICHT geloggt, nur IPs
- Apache ist bei PHP Skripten extrem langsam (bis zu 1 Minute)
- Messung der Execution-Time mit microtime() ist normal
===> Apache verursacht das (vielleicht in Kombination mit PHP)

Bei ausgeschaltener LookupHosts Direktive:
- Apache ist sowohl bei PHP also auch bei HTML normal (schnell)

Abschliessend noch ein paar Infos:
- Persistent Connections sind ausgeschaltet
- der Server hat zwei LAN Adapter, einer davon wird derzeit nicht verwendet
- SWAPen ist ausgeschlossen, getestet mit top
- OpenBSD 4.2 stable, GENERIC.MP (Multiprocessor) Kernel
- der Server ist am Netz, aber ist noch nicht in Production Betrieb gestellt
- Hardware: Dual-CPU Pentium-III , dzt. 512MB RAM, 2x 36GB SCSI
 
Verwendest du PHP als CGI-Sprache oder als Modul? Verwendest du den Apache 1.3 aus dem Basis-System oder die aktuelle stabile Version?
 
Hallo, danke für dein Interesse an meinem Problem.

Apache ist die 1.3.29 aus dem 4.2er stable Release und PHP ist auch
das unmodifizierte OpenBSD Package. PHP wird als Modul verwendet.

Alleine ein Aufruf einer phpinfo() Seite dauert ca. 1-2 Minuten.
Darüber hinaus kann Apache keine Hostnames loggen, egal ob es sich
um PHP Skripte oder HTML Seiten handelt, es werden immer nur IPs geloggt.

ayiecu88eclb85ek1.jpg
 
Schalt mal das logging von hostnamen ab. Wenn es dann schneller wird, weißt du schon mal, dass dein Problem dort zu suchen ist.
 
Habe ich bereits, dort liegt auch das Problem (beim Apachen)
Ich will aber Hostnamen loggen, bzw. brauchen meine PHP Skripte auch
$_SERVER["REMOTE_HOST"] benutzen.

Das Abschalten des Logging ist ein Workaround, aber keine permanente Lösung
des eigentlichen Problems.

Nochwas:
Ein PHP Skript, dass gethostbyaddr() benutzt verlangsamt dann
nicht nur die Apache Ausgabe, sondern auch die Execution TIme selbst.

Irgendwie besteht da ein Problem mit Reverse-DNS Auflösung - oder
nur teilweise, weil dig ja funtktioniert.

yyyy = Hostname, xxxx = User, xx.xx.xx.xx = mein DNS
Code:
yyyy:~ xxxx$ ping bsdforen.de
PING bsdforen.de (212.204.60.79): 56 data bytes
64 bytes from 212.204.60.79: icmp_seq=0 ttl=52 time=37.084 ms
64 bytes from 212.204.60.79: icmp_seq=1 ttl=52 time=36.380 ms
64 bytes from 212.204.60.79: icmp_seq=2 ttl=52 time=36.741 ms
--- bsdforen.de ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 36.380/36.735/37.084/0.287 ms
yyyy:~ xxxx$ dig -x 212.204.60.79

; <<>> DiG 9.3.4 <<>> -x 212.204.60.79
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52895
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;79.60.204.212.in-addr.arpa.    IN      PTR

;; ANSWER SECTION:
79.60.204.212.in-addr.arpa. 86400 IN    PTR     bsdforen.de.

;; Query time: 68 msec
;; SERVER: xx.xx.xx.xx#53(xx.xx.xx.xx)
;; WHEN: Thu Apr 10 01:27:50 2008
;; MSG SIZE  rcvd: 69

yyyy:~ xxxx$

Diese Ausgabe bedeutet eigentlich, dass sowohl Fordward als auch Reverse aufgelöst werden kann.
Nur der Apache kann nicht reverse auflösen.
 
Nochwas...

PHP kann rDNS auflösen wenn man es von der Shell startet!

Code:
yyyy:~ xxxx$ cat test.php
<?
$ip="212.204.60.79";
echo "TEST... Host von ".$ip." ist ".gethostbyaddr($ip)."\n";
?>
yyyy:~ xxxx$ php test.php
TEST... Host von 212.204.60.79 ist bsdforen.de
yyyy:~ xxxx$


Das Ergebnis wenn man es als PHP-Skript mit Apache PHP Modul benutzt:
TEST... Host von 212.204.60.79 ist 212.204.60.79
 
Zuletzt bearbeitet:
So, ich glaube ich habe jetzt das Problem gefunden.

Die "resolv.conf" im chroot-Jail /var/www/etc/resolv.conf war nicht
dieselbe wie /etc/resolv.conf (die war noch auf 192.168.1.xxx eingestellt!)

Wie gesagt, meine erste OpenBSD Installation.

Vielleicht ein Tipp, das in die Netzwerk FAQ zu schreiben.
 
Zurück
Oben