Simone: Speicherverwaltung (RAM) per PHP

HI,

Gibt es eine Möglichkeit per PHP den verbrauchten Speichbedarf in der Laufzeit eines Skriptes abzufragen ?

Beispiel:

$variable1 belegt 1MB Arbeitspeicher.
$variable2 belegt 0.5MB Arbeitspeicher.

Ziel ist es ein Skript, wo sich ein großer Array aufbaut, zu überwachen und evtl. eine Abruchbedingung zu formulieren wenn eine Maximumwert erreicht ist.

Danke Simone

  1. HI,

    Hab was gefunden ;))

    http://de3.php.net/manual/de/function.memory-get-usage.php

    Simone

  2. Moin!

    Ziel ist es ein Skript, wo sich ein großer Array aufbaut, zu überwachen und evtl. eine Abruchbedingung zu formulieren wenn eine Maximumwert erreicht ist.

    Normalerweise werden PHP-Skripte, die zuviel Speicher verbrauchen ohnehin automatisch abgeschossen.
    Bitte erläutere ggf. warum Dir die Möglichkeiten der Einstellungen in der PHP.ini nicht zusagen oder ob Dir die Möglichkeiten diese zur Laufzeit oder innrehalb eines Verzeichnisses zu manipulieren nicht ausreichen.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    1. Hi, fastix

      Um Einstellung in der ini zu machen brauche ich die Recht.
      ...

      Normalerweise werden PHP-Skripte, die zuviel Speicher verbrauchen ohnehin automatisch abgeschossen.

      Memory Limit ereicht und Fehlermeldung ....
      das ist nicht optimal :(
      selbst die Ausgabe buffern geht nicht.

      Ich arbeite zur Zeit an einer Volltext Suchfunktion.
      Das Skript erreich annährend die Zugriffszeiten wie ein File basierende Lösung.
      Nur das die ganze sache per Mysql funktioniert. Aber enorm große Arrays bilden kann.

      Begrenze ich die Zugriffszeit und die Zugriffsgröße lauft das Skript auch auf ServerX stabil.

      Simone

      1. Moin!

        Ich arbeite zur Zeit an einer Volltext Suchfunktion.

        Würde ich auch gerne, aber ich werde im Moment für das Seminare halten bezahlt :)

        Das Skript erreich annährend die Zugriffszeiten wie ein File basierende Lösung.

        Gratuliere. Aber Performance ist gerde bei Servern immer auch eine Frage des Speicherverbrauches pro Prozeß. Du bemerkst es gerade und solltest über einen Kompromis nachdenken.

        Nur das die ganze sache per Mysql funktioniert. Aber enorm große Arrays bilden kann.

        Hm. Gibt es einen Grund die Arrays (z.B. in Form von temporären Tabellen) nicht im der DBMS zu lassen? Ich meine ausser: "Es ist schon so viel fertig"
        Natürlich ist mir klar, dass dies die Performance- Probleme nur an eine andere Stelle verschiebt, andererseits sind 10 MB in der Datenbank sicherlich was anderes als in PHP- Arrays. Ich kenne natürlich auch die Zugriffshäufigkeit nicht...

        Was gibt es für einen Grund die Menge der zurückgegebenen Ergebnisse nicht mit LIMIT zu begrenzen? Und eventuell zunächst nur eine ID zurückzuliefern und die eigentlichen Daten genau dann per Abfrage über die indexierte ID zu holen, wenn sie auch gebraucht werden und durch den Puffer zu jagen? Insgesamt klingt es ohnehin ein wenig so, als würdest Du einfach zu viele Daten aus der Datenbank rausholen und dann innerhalb der Skripte das tun, was besser die DB tun sollte: aussortieren.

        Konkreteres liese sich sagen, wenn ich die Datenbanken und das Skript kennen würde. So kann ich nur raten (Ich meine allgemeinen Rat geben). Die Lösung mit der gesuchten Funktion kennst Du ja schon. Ach so: Das Resultat der Datenbankabfrage steht sicher auch schon in der Speicherrechnung...

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  3. Hello,

    Gibt es eine Möglichkeit per PHP den verbrauchten Speichbedarf in der Laufzeit eines Skriptes abzufragen ?

    Ja, neuere PHP-Versionen geben Dir die Möglichkeit.
    Du kannst dadurch Deine Speicher-Strategie im Script steuern.
    Ab PHP-Version 5.x ist es auch normal, dass die Redundanzen füe die globalen und die superglobalen Arrays endlich abgeschaltet und abschaltbar sind.

    Solange eine Hochsprache Speicherbegrenzungen hat, müssen ernsthafte Programmierer die Stati auch abfragen können, da stimme ich Dir zu!

    Schau mal unter:
    http://de2.php.net/manual/de/function.memory-get-usage.php

    Und über ini_get() kannst Du ja den verfügbaren Speicher abfragen.

    Nur geh bitte bei allen PHP-Versionen unter 5.x davon aus, dass sie ggf. die doppelte Menge des erwarteten Bedarfs verballern.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau