SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > Apache HTTP-Server

Apache HTTP-Server Alles was Ihr über den Apache diskutieren möchtet, gehört hierein

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 10.12.2008, 17:48:12
McB_sser McB_sser ist offline
Anfänger
 
Registriert seit: Apr 2008
Beiträge: 66
Apachee Rechenleistung auf 100 % bringen

Hallo,

momentan plagt mich ein kleines Problem, ich habe ein rechen fressenden php Script erstellt und mein CPU duckert bei durchschnittlich 30 % rum.
Mein Script soll Landflächen Generieren in einer bestimmten Feldmenge. Ist der Prozess erfolgreich schreibt er es in eine MySQL DB.
Das kleinste ist ~30.000 Felder und das Größte ~4,5 Mio. Felder bzw. Einträge in der DB. Ich habe jetzt mit den kleinsten angefangen und nach ca. 30 min habe ich ca. 5.500 Einträge (Felder) um so mehr Einträge um so länger dauert es, eh wieder ein neuer hinzu kommt. Also wäre es Cool wenn der CPU voll genutzt werden würde. Die Frage ist wie mach ich das?

Ich habe ein Phenom 9950 X4 2,6 GHz momentan sieht es so aus als würde er nur ein Kern verwenden. Als System habe ich Vista Ultimate 64 drauf und nutze das XAMPP Paket.

Ich habe in übrigen eine ATI 4870 X2 Grafikkarte DX10 Fähig wäre lustig wenn man die Berrechnungen auch der Grafikkarte mit anhängen könnte *grins*
Mit Zitat antworten
  #2  
Alt 10.12.2008, 18:00:36
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
AW: Apachee Rechenleistung auf 100 % bringen

php ist nicht für mehrkern- / multi- CPUs optimiert. von daher... no way. das müsste dir allerdings als nutzer einer 4-kern-cpu bekannt vorkommen, oder .-

cx
Mit Zitat antworten
  #3  
Alt 10.12.2008, 18:11:18
McB_sser McB_sser ist offline
Anfänger
 
Registriert seit: Apr 2008
Beiträge: 66
AW: Apachee Rechenleistung auf 100 % bringen

danke für die schnelle Antwort. Naja nur bedingt, ich habe das System noch nicht all-zu lange und habe erst seit ein paar Tagen xampp etc. Dort Installiert. vorher habe ich ein einkerner gehabt bzw. habe ich immer noch (Ubuntu).

Konnte ja sein das es bereits Möglichkeiten gibt von den ich nichts weiss.
Mit Zitat antworten
  #4  
Alt 10.12.2008, 18:22:12
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Apachee Rechenleistung auf 100 % bringen

Das Script in ein gutes dutzend Teile splitten und alle auf der Kommandozeile gleichzeitig starten. Das sollte die Auslastung hoch treiben. Bzw die Last auf alle Kerne verteilen.
Mit Zitat antworten
  #5  
Alt 10.12.2008, 18:30:37
McB_sser McB_sser ist offline
Anfänger
 
Registriert seit: Apr 2008
Beiträge: 66
AW: Apachee Rechenleistung auf 100 % bringen

das ist eine gute idee, ich habe das Script so entworfen das wenn die Zeitbegrensung eintritt ich quasi von der gleichen Stelle wieder anfangen kann.

jetzt habe ich nur noch eine kleine frage dazu. Wenn ich jetzt den Script meinetwegen 4 mal öffne und alles parallel berechnen lasse kann es vorkommen das ich Doppeleinträge habe?

z. B.
CPU Kern 1
0 0
0 1
1 1
-1 0

CPU Kern 2
-1 -1
1 0
0 0
1 -1

die sollen Quasi in der DB vergleichen ob bereits in der Variation schon existirt und wenn nicht eintragen... könnte es passieren das der eine (Kern 1) grad fertig ist mit Kontrollieren und der andere Kern (2) die 0 0 einträgt und der wiederum (Kern 1) grad die 0 0 Notiert?

Kann das dann vorkommen? oder Läuft trotz allem alles nach und nach ab?
Mit Zitat antworten
  #6  
Alt 10.12.2008, 18:33:46
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Apachee Rechenleistung auf 100 % bringen

Ja!
RaceConditions können durchaus auftreten.
Das kannst du mit Transaktionen oder Tablelocks unterbinden.

In 4 Teile hacken reicht übrigens nicht unbedingt.
Mit Zitat antworten
  #7  
Alt 10.12.2008, 18:35:49
Crisps Crisps ist offline
Junior Member
 
Registriert seit: Oct 2008
Alter: 47
Beiträge: 274
AW: Apachee Rechenleistung auf 100 % bringen

Warum denkst du, dass es primär an PHP liegt?

So viele Einträge brauchen normalerweise ihre Zeit bis sie in die DB geschrieben wurden. Wie sieht denn der PHP Code aus der die Query generiert? Die Query selbst zu sehen (wenn nötig abgekürzt) wäre auch interessant - Ich glaube, das ganze liese sich noch etwas optimieren.

Geändert von Crisps (10.12.2008 um 18:36:33 Uhr)
Mit Zitat antworten
  #8  
Alt 10.12.2008, 18:37:48
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: Apachee Rechenleistung auf 100 % bringen

wenn du mehrere kerne hast und jeden kern voll auslasten willst, brauchst du ein script, was

a) auch wirklich rechenleistung benötigt. wenn du z.b. nur daten auf die platte schreibst (oder in eine datenbank), wird das kaum die cpu, sondern vielmehr die platte belasten.
b) mehrere prozesse/threads. darauf ist php nicht mal nicht optimiert, sondern einfach nicht gemacht. such dir eine sprache, die für sowas gemacht ist (z.B. mein aktueller favorit für sowas: erlang)

willst du allerdings eigentlich, dass dein script schneller läuft, poste es hier und wir können dir sagen, wie es schneller werden kann.
Mit Zitat antworten
  #9  
Alt 10.12.2008, 18:50:27
McB_sser McB_sser ist offline
Anfänger
 
Registriert seit: Apr 2008
Beiträge: 66
AW: Apachee Rechenleistung auf 100 % bringen

ok, hier wies in etwa aussehen soll genneriert in ein array mit 500 Feldern der rote ist die mitte also 0|0 (xy)
Terraformer

und hier der Code
PHP-Code:
<?php
   
##############################################################
   ## Teraformer
   ##############################################################
      ## Gesammt Flaeche: 7.200 x 7.200 = 51.840.000 Felder
      ## a°b°: 360 : 7.200 = 0,05 (0,05 x 0,05) je Feld
      ## NS WO: 7.200 : 2 = 3.600 (3.600 (180°) x 3.600 (180°))
      ###########################################################

   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   // Einstellungen
      // Standard Einstellungen
      
$Felder       7200 7200// Maximale Anzahl der Felder
      //$Felder = 20 * 20; // TEST TEST TEST
      // die kommenden drei Angaben muss zusammen 100 ergeben.
      
$Land_Konti   28;          // Fuer Konti in Prozent
      
$Land_Inseln  2;           // Fuer Inseln in Prozent
      
$Wasser       70;          // Fuer Wasser in Prozent

      // Anzahl der Kontinente und Groesse in Prozent, muss insgesammt 100 Prozent ergeben.
      
$Kontinente = array(0  => 30,
                          
1  => 20,
                          
2  => 10,
                          
3  => 8,
                          
4  => 12,
                          
5  => 5,
                          
6  => 15);
      
// Anzahl der Inseln und Groesse in Prozent, muss insgesammt 100 Prozent ergeben.
      
$Inseln =     array(0  => 3,
                          
1  => 3,
                          
2  => 4,
                          
3  => 5,
                          
4  => 5,
                          
5  => 6,
                          
6  => 6,
                          
7  => 7,
                          
8  => 7,
                          
9  => 8,
                          
10 => 8,
                          
11 => 9,
                          
12 => 9,
                          
13 => 10,
                          
14 => 10);
      
// Einstellungen importieren
         // require("../Konfiguration.php");
         
$DBK_Host "127.0.0.1";
         
$DBK_Benutzer "##########";
         
$DBK_Passwort "##########";
         
$DBK_Datenbank "##########";
        
// DB verbinden
         
mysql_connect($DBK_Host$DBK_Benutzer$DBK_Passwort) or die(mysql_error());
         
mysql_select_db($DBK_Datenbank) or die(mysql_error());
   
// Einstellungen
   /////////////////

   /////////////////////
   // Funktionen
      
function Zufalls_Zahl($Start$Stop)
         {
            
srand((double)microtime() * 1000000);
            return 
rand ($Start$Stop);
         };
         
      function 
Terraformer($Land)
         {
            
$sql "INSERT INTO
                       terraformer
                              (x, y)
                       VALUES ('0','0')"
;
            
$query mysql_query($sql) or die (mysql_error());
            while(
$Terra_Insgesammt != $Land)
               {
                  
$weiter True;
                  while(isset(
$weiter))
                     {
                        
$sql "SELECT
                                   COUNT(*) AS Eintraege
                                FROM
                                   terraformer
                                LIMIT 1"
;
                        
$query mysql_query($sql) or die (mysql_error());
                        while(
$DB mysql_fetch_array($query))
                           {
$Terra_Pos Zufalls_Zahl(1$DB[Eintraege]);};
                        
$sql "SELECT
                                   ID, x, y
                                FROM
                                   terraformer
                                WHERE
                                   ID = '$Terra_Pos'
                                LIMIT 1"
;
                        
$query mysql_query($sql) or die (mysql_error());
                        while(
$DB mysql_fetch_array($query))
                           {
$x_Wert $DB[x]; $y_Wert $DB[y];};
                        unset(
$weiter);
                        if(
Zufalls_Zahl(12) == 1)
                           {
                              
$Terra_x_neu intval($x_Wert+(Zufalls_Zahl(-11)));
                              
$Terra_y_neu intval($y_Wert);
                              
$sql "SELECT
                                         x, y
                                      FROM
                                         terraformer"
;
                              
$query mysql_query($sql) or die (mysql_error());
                              while(
$DB mysql_fetch_array($query))
                                 {
                                    if(
$Terra_x_neu == $DB[x] and $Terra_y_neu == $DB[y])
                                       {
$weiter True;};
                                 };
                           }
                        else
                           {
                              
$Terra_x_neu intval($x_Wert);
                              
$Terra_y_neu intval($y_Wert+(Zufalls_Zahl(-11)));
                              
$sql "SELECT
                                         x, y
                                      FROM
                                         terraformer"
;
                              
$query mysql_query($sql) or die (mysql_error());
                              while(
$DB mysql_fetch_array($query))
                                 {
                                    if(
$Terra_x_neu == $DB[x] and $Terra_y_neu == $DB[y])
                                       {
$weiter True;};
                                 };
                           };

                     };
                     
// NEU: neues Feld hinzufuegen bzw. Koordinaten.
                     
$sql "INSERT INTO
                                terraformer
                                    (x, y)
                             VALUES ('$Terra_x_neu','$Terra_y_neu')"
;
                     
$query mysql_query($sql) or die (mysql_error());
                     
$sql "SELECT
                                COUNT(*) AS Eintraege
                             FROM
                                terraformer
                             LIMIT 1"
;
                     
$query mysql_query($sql) or die (mysql_error());
                     while(
$DB mysql_fetch_array($query))
                        {
$Terra_Insgesammt $DB[Eintraege];};
               };
         };
   
// Funktionen
   /////////////////////
   ///////////////////////////////////////////////////////////////////////
   // Vorverarbeitung bzw. POST, GET eingeleitette Schritte
      
if(isset($_POST[Terraformer]))
         {
Terraformer($_POST[Terraformer]);};

      if(isset(
$_POST[Loeschen]))
        {
           
$sql "DELETE FROM terraformer;";
           
$query mysql_query($sql) or die (mysql_error());
        };
   
// Vorverarbeitung bzw. POST, GET eingeleitette Schritte
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   // Variablensammlung
      // DB Eintraege gesammt
      
$sql "SELECT
                 COUNT(*) AS Eintraege
              FROM
                 terraformer
              LIMIT 1"
;
      
$query mysql_query($sql) or die (mysql_error());
      while(
$DB mysql_fetch_array($query))
         {
$Terra_Insgesammt $DB[Eintraege];};

      
// Optionen fuer Select
      
unset($n);
      
$Kontinente_Select "<optgroup label=\"Kintinente\">";
      foreach(
$Kontinente as $Kontinente_value)
         {
            
$n++;
            unset(
$Felder_Option);
            
$Felder_Option = ($Felder/100*$Land_Konti)/100*$Kontinente_value;
            
$Kontinente_Select .= "<option value=\"$Felder_Option\">$n.) $Kontinente_value % (".number_format($Felder_Option0',''.' )." Felder)</option>";
         };
      
$Kontinente_Select .= "</optgroup>";
      unset(
$n);
      
$Inseln_Select "<optgroup label=\"Inseln\">";
      foreach(
$Inseln as $Inseln_value)
         {
            
$n++;
            unset(
$Felder_Option);
            
$Felder_Option = ($Felder/100*$Land_Inseln)/100*$Inseln_value;
            
$Inseln_Select .= "<option value=\"$Felder_Option\">$n.) $Inseln_value % (".number_format($Felder_Option0',''.' )." Felder)</option>";
         };
      
$Inseln_Select .= "</optgroup>";
   
// Variablensammlung
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   //

   //
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
   // Ausgabe

     
echo "<h1>Terraformer</h1>";
     echo 
"<form method=\"POST\">
              <select name=\"Terraformer\" size=\"1\">
                 $Inseln_Select
                 $Kontinente_Select
              </select>
              <input type=\"submit\" value=\"Senden\">
           </form>"
;
     echo 
"<BR>";
     echo 
"<form method=\"POST\">
              Einträge in DB: $Terra_Insgesammt<BR>
              <input type=\"submit\" name=\"Loeschen\" value=\"Löschen\">
           </form>"
;
   
// Ausgabe
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
?>
Mit Zitat antworten
  #10  
Alt 10.12.2008, 18:55:35
McB_sser McB_sser ist offline
Anfänger
 
Registriert seit: Apr 2008
Beiträge: 66
AW: Apachee Rechenleistung auf 100 % bringen

achja für die DB:

CREATE TABLE Terraformer (
ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
x INT NULL,
y INT NULL,
PRIMARY KEY(ID)
);
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


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


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt