php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.)
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) Probleme, Apache mit PHP oder MySQL zum Laufen zu bringen? Anpassung an .htaccess, httpd.conf oder php.ini funktionieren nicht? In diesem Forum könnt ihr eure Erfahrungen austauschen.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 14-12-2009, 19:37
JR-EWING
 Registrierter Benutzer
Links : Onlinestatus : JR-EWING ist offline
Registriert seit: Jul 2004
Ort: Kissing
Beiträge: 99
JR-EWING befindet sich auf einem aufstrebenden Ast
Standard curl_multi langsam

Hallo zusammen

ich experimentiere gerade mit Curl Multi herum um parallel Abfragen zu senden.
Ich habe einen eigenen Server und habe leider den Fall dass Multi Curl langsamer ist als der normale Aufruf.

Aber zuerst mal der Aufbau.....

Um das zu testet, habe ich das Script von PHP: curl_multi_add_handle - Manual
genommen und auf 30 Urls erweitert. Ich hab da Wikipedia, Amazon usw als Domains genommen.

Hier messe ich nun die Zeit. Danach mach ich das gleich nochmal, bloß mit normalen CURL Aufbau und vergleiche die Zeiten:

PHP-Code:
function curlopen($url) {
    
$ref " ";
    
$ch curl_init();
    
$user_agent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";

    
curl_setopt($chCURLOPT_URL$url);
    
curl_setopt($chCURLOPT_USERAGENT$user_agent);
    
curl_setopt($chCURLOPT_TIMEOUT10);
    
curl_setopt($chCURLOPT_CONNECTTIMEOUT10);
    
curl_setopt($chCURLOPT_HEADER0);
    if (
ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off')) {
        
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
    }
    
curl_setopt($chCURLOPT_REFERER$ref);
    
curl_setopt($chCURLOPT_RETURNTRANSFER1);

    
curl_setopt($chCURLOPT_INTERFACE$_SERVER['HTTP_HOST']);//select IP


    
$result curl_exec ($ch);
    
curl_close ($ch);
    return 
$result;

Hier schauen die Zeiten auch Top aus:

HTML-Code:
1260810149.7 : ---------- : ----------START MULTI

1260810155.89 : ---------- : ----------ENDE

1260810158.89 : ---------- : ----------START SINGLE

1260810180.45 : ---------- : ----------ENDE 
Sprich normales Curl 22 Sek und Multi nur 6 Sekunden. Das hab ich ja auch erwartet.

Wenn ich nun aber die Domains tausche und 30 mal die gleiche Domain auf meinem Server abfrage, ist die parallel Abfrage langsam als die sequenzielle.

HTML-Code:
1260812134.89 : ---------- : ----------START MULTI

1260812138.98 : ---------- : ----------ENDE

1260812141.98 : ---------- : ----------START SINGLE

1260812143.96 : ---------- : ----------ENDE 
Woran kann denn sowas liegen. Gibt es irgendwo ne Einstellung für Apache wieviele Anfragen er gleichzeitig machen kann, oder woran kann denn sowas noch liegen ?

Danke schon mal im voraus

Gruß Tom
__________________
Spambot Falle
Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.
Mit Zitat antworten
  #2 (permalink)  
Alt 14-12-2009, 19:45
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von JR-EWING Beitrag anzeigen
Danach mach ich das gleich nochmal, bloß mit normalen CURL Aufbau und vergleiche die Zeiten
Und damit dieser Versuchsaufbau sinnvoll sein kann, hast du natürlich schon ausgeschlossen, dass irgendwo (seitens cURL, PHP/Webserver, Zugangsprovider) Caching stattfindet?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 14-12-2009, 20:22
JR-EWING
 Registrierter Benutzer
Links : Onlinestatus : JR-EWING ist offline
Registriert seit: Jul 2004
Ort: Kissing
Beiträge: 99
JR-EWING befindet sich auf einem aufstrebenden Ast
Standard

Also ich hab Root Rechte und den auch selber eingerichtet.

Müsste er nicht bei beiden (multi und normal) cachen ?

es sind aber immer unterschiedliche Urls - also

domain-a.de/1.html
domain-a.de/2.html
domain-a.de/3.html
domain-a.de/4.html
domain-a.de/5.html
__________________
Spambot Falle
Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.
Mit Zitat antworten
  #4 (permalink)  
Alt 14-12-2009, 20:50
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von JR-EWING Beitrag anzeigen
es sind aber immer unterschiedliche Urls
Unterschiedlich zwischen was - zwei den beiden Testreihen, die du aufgebaut hast und nacheinander durchführst?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #5 (permalink)  
Alt 14-12-2009, 21:07
JR-EWING
 Registrierter Benutzer
Links : Onlinestatus : JR-EWING ist offline
Registriert seit: Jul 2004
Ort: Kissing
Beiträge: 99
JR-EWING befindet sich auf einem aufstrebenden Ast
Standard

ich hab das jetzt mal umgedreht.

Vorher
PHP-Code:
$test =  curlopen'http://188.40.xx.65/1.html');
$test =  curlopen'http://188.40.xx.65/2.html');
$test =  curlopen'http://188.40.xx.65/3.html');
$test =  curlopen'http://188.40.xx.65/4.html');
$test =  curlopen'http://188.40.xx.65/5.html');
....
curl_setopt($ch1CURLOPT_URL'http://188.40.xx.65/1.html');
curl_setopt($ch2CURLOPT_URL'http://188.40.xx.65/2.html');
curl_setopt($ch3CURLOPT_URL'http://188.40.xx.65/3.html');
curl_setopt($ch4CURLOPT_URL'http://188.40.xx.65/4.html');
curl_setopt($ch5CURLOPT_URL'http://188.40.xx.65/5.html'); 
Nachher

PHP-Code:
curl_setopt($ch1CURLOPT_URL'http://188.40.xx.65/1.html');
curl_setopt($ch2CURLOPT_URL'http://188.40.xx.65/2.html');
curl_setopt($ch3CURLOPT_URL'http://188.40.xx.65/3.html');
curl_setopt($ch4CURLOPT_URL'http://188.40.xx.65/4.html');
curl_setopt($ch5CURLOPT_URL'http://188.40.xx.65/5.html');
...
$test =  curlopen'http://188.40.xx.65/1.html');
$test =  curlopen'http://188.40.xx.65/2.html');
$test =  curlopen'http://188.40.xx.65/3.html');
$test =  curlopen'http://188.40.xx.65/4.html');
$test =  curlopen'http://188.40.xx.65/5.html'); 
ist aber egal wie rum - Multi ist langsamer

Wie gesagt bei anderen Urls also Google, Amazon, Ebay usw klappt es ja

Nur bei meiner Domain, ( für die ich aber das ganze leider brauche) die auf meinen Server liegt, leider nicht :-(
__________________
Spambot Falle
Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.
Mit Zitat antworten
  #6 (permalink)  
Alt 14-12-2009, 21:15
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von JR-EWING Beitrag anzeigen
ist aber egal wie rum - Multi ist langsamer
Gut - das schliesst zumindest schon mal Caching als ersten Hauptverdächtigen aus.

Zitat:
Nur bei meiner Domain, ( für die ich aber das ganze leider brauche) die auf meinen Server liegt, leider nicht :-(
Dann würde ich erst mal schauen, ob dein Server Requests mit einer Content-Length-Angabe ausliefert. Die ist nämlich notwendig, um mehrere HTTP-Requests über eine (aufrechterhaltene) Verbindung abwickeln zu können.

Wenn er das nicht tut, dann hat cURL auch mit multi-Funktionalität keine andere Möglichkeit, als für jede Ressource eine neue Verbindung aufzubauen.
Und dass das schnell in irgendwelche Limits läuft, ist nachvollziehbar.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #7 (permalink)  
Alt 14-12-2009, 21:53
JR-EWING
 Registrierter Benutzer
Links : Onlinestatus : JR-EWING ist offline
Registriert seit: Jul 2004
Ort: Kissing
Beiträge: 99
JR-EWING befindet sich auf einem aufstrebenden Ast
Standard

Sorry jetzt muss ich leider dumm fragen - du meinst sowas ?

Code:
HTTP/1.1 200 OK
Date: Mon, 14 Dec 2009 19:44:52 GMT
Server: Apache/2.2.9 (Debian)
    PHP/5.2.6-1+lenny3 with Suhosin-Patch
    mod_ssl/2.2.9 OpenSSL/0.9.8g
X-Powered-By: PHP/5.2.6-1+lenny3
Vary: Accept-Encoding
Content-Length: 1
also schaut so aus als würde mein Server das ausgeben. Ich hab jetzt auch mal die Anzahl der Anfragen auf 10 reduziert. Aber auch ohne Erfolg

HTML-Code:
1260820272.45 : ---------- : ----------START MULTI

1260820275.37 : ---------- : ----------ENDE

sleep(3)

1260820278.37 : ---------- : ----------START SINGLE

1260820278.85 : ---------- : ----------ENDE 
__________________
Spambot Falle
Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.

Geändert von AmicaNoctis (14-12-2009 um 21:56 Uhr) Grund: Umbrüche gesponsert
Mit Zitat antworten
  #8 (permalink)  
Alt 14-12-2009, 22:30
JR-EWING
 Registrierter Benutzer
Links : Onlinestatus : JR-EWING ist offline
Registriert seit: Jul 2004
Ort: Kissing
Beiträge: 99
JR-EWING befindet sich auf einem aufstrebenden Ast
Standard

hmmm ich hab jetzt das Script auch einmal auf einem anderen Server installiert.
Dort geht Multi richtig schnell - so wie es sein sollte.

Es scheint also wirklich ein Config Problem des Apache auf meinem Server zu sein.

Also Cache und Script Fehler kann ich daher ausschließen.

Gruß Tom
__________________
Spambot Falle
Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.
Mit Zitat antworten
  #9 (permalink)  
Alt 14-12-2009, 22:43
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Na dann schau dir mal an, wie viele parallele Connections dein APache erlaubt, wie viele permanente, etc.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #10 (permalink)  
Alt 15-12-2009, 00:01
JR-EWING
 Registrierter Benutzer
Links : Onlinestatus : JR-EWING ist offline
Registriert seit: Jul 2004
Ort: Kissing
Beiträge: 99
JR-EWING befindet sich auf einem aufstrebenden Ast
Standard

habe den Fehler gefunden:

Es lag an Werten in der http.conf vom Apache

HTML-Code:
MaxRequestsPerChild      0
Neuer Wert
HTML-Code:
MaxRequestsPerChild      50
und schon läuft es wie gewünscht.

HTML-Code:
1260827895.35 : ---------- : ----------START MULTI

1260827895.41 : ---------- : ----------ENDE

1260827898.41 : ---------- : ----------START SINGLE

1260827898.77 : ---------- : ----------ENDE 
wieder was gelernt....
__________________
Spambot Falle
Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.
Mit Zitat antworten
  #11 (permalink)  
Alt 15-12-2009, 00:29
JR-EWING
 Registrierter Benutzer
Links : Onlinestatus : JR-EWING ist offline
Registriert seit: Jul 2004
Ort: Kissing
Beiträge: 99
JR-EWING befindet sich auf einem aufstrebenden Ast
Standard

hm doch zu früh gefreut - war wohl ne Ausnahme
__________________
Spambot Falle
Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.
Mit Zitat antworten
  #12 (permalink)  
Alt 15-12-2009, 00:42
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Es kann sein, dass die CURL-Library das kaputtoptimiert. Normalerweise ist es teurer, eine neue Verbindung aufzubauen, als eine bestehende nochmal zu benutzen. Wenn du aber lokal arbeitest, könnte es sein, dass CURL merkt, dass es derselbe Server ist und daraufhin die bestehende Verbindung weiterbenutzt, statt für jeden Request eine neue aufzubauen. Da dann die Requests seriell erfolgen, dauert das länger.

Du könntest versuchen, einen "Connection: close"-Header zu setzen, aber ob CURL das merkt und das Verhalten dadurch ändert, kann ich jetzt nicht sagen. Einen Versuch ist es jedenfalls wert.

Generell ist das Problem aber eher theoretischer Natur, denn im Normalfall wirst du ja eher fremde (und auch verschiedene) Server mit CURL ansprechen und da macht dann ein keep-alive wieder Sinn.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #13 (permalink)  
Alt 15-12-2009, 01:06
JR-EWING
 Registrierter Benutzer
Links : Onlinestatus : JR-EWING ist offline
Registriert seit: Jul 2004
Ort: Kissing
Beiträge: 99
JR-EWING befindet sich auf einem aufstrebenden Ast
Standard

Ich hab leider wirklich das Problem, dass ich auf meinem Server bleibe :-(

Mit Connection Close meinst du jetzt in den normalen Curl Anweisungen - also sowas ?

PHP-Code:
    $header "Connection: close \r\n\r\n";
    
curl_setopt($chCURLOPT_CUSTOMREQUEST$header); 
das erzeugt mir jetzt ein Bad Request
__________________
Spambot Falle
Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.
Mit Zitat antworten
  #14 (permalink)  
Alt 15-12-2009, 01:10
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Connection ist ein Response Header, muss also vom Server gesetzt werden.

Wenn du auf lokale Ressourcen zugreifst, warum dann überhaupt CURL? Du hast doch das ganze Dateisystem vor deinen Füßen. Statt an der Nachbarwohnungstür zu klopfen, gehst du also lieber runter vor die Haustür und nutzt die Sprechanlage?

Edit:

Zitat:
Zitat von JR-EWING Beitrag anzeigen
PHP-Code:
    $header "Connection: close \r\n\r\n";
    
curl_setopt($chCURLOPT_CUSTOMREQUEST$header); 
das erzeugt mir jetzt ein Bad Request
Sollte es auch, mit CURLOPT_CUSTOMREQUEST kann man nur die Request-Methode setzen und nicht irgendwelche Header.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (15-12-2009 um 01:17 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 15-12-2009, 01:19
JR-EWING
 Registrierter Benutzer
Links : Onlinestatus : JR-EWING ist offline
Registriert seit: Jul 2004
Ort: Kissing
Beiträge: 99
JR-EWING befindet sich auf einem aufstrebenden Ast
Standard

Das Script das ich parallel 30fach aufrufen möchte, dient als Proxy Script das bestimmte APIs aufruft. Zugriff auf die API hab ich nur von meiner Server IP. Aber so kann ich die Api auch von anderen IPs nutzen.

Zitat:
Connection ist ein Response Header, muss also vom Server gesetzt werden.
wie mach ich das ?
__________________
Spambot Falle
Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
so langsam... Kropff Out of Order 25 17-01-2006 10:39
php langsam? Vanse Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) 6 05-09-2004 16:43
Datenbank ist zu langsam Burni SQL / Datenbanken 1 09-12-2003 23:28
zu langsam ? syco23 PHP Developer Forum 3 26-07-2003 20:42
Warum so langsam? lachesis SQL / Datenbanken 1 09-07-2003 14:27

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:42 Uhr.