Konfiguration von APC

Konfiguration von APCDie Standardkonfiguration von APC ist für die meisten Systeme gut geeignet. Möchte man dennoch etwas an der Konfiguration ändern, muss man die im folgenden beschriebenen Optionen einfach in eine PHP-Konfigurationsdatei (beispielsweise php.ini oder apc.ini) eintragen.

Die drei wichtigsten Einstellungen sind wohl die Größe des Zwischenspeichers, die Überwachung des Hochladevorgangs von Dateien, und ob APC bei jeder Anfrage überprüfen soll, ob eine Datei modifiziert wurde.

Die Größe des Zwischenspeichers

Die Größe des Zwischenspeichers lässt sich über die Konfigurationsoptionen apc.shm_size und apc.shm_segments einstellen. Erstere legt fest wie groß ein gemeinsames Speichersegment (Shared Memory) sein darf, letztere legt fest aus wie vielen solchen Segmenten der Zwischenspeicher besteht. Bei manchen Betriebssystemen können solche Speichersegmente nur wenige Megabytes groß sein, weswegen entweder mehrere Segmente verwendet werden müssen, oder die Betriebssystemkonfiguration angepasst werden muss. Linux hat standardmäßig eine maximale Segmentgröße von 32 MiB, BSD von 4 MiB.

; 2 Segmente von je 30 MiB = 60 MiB
apc.shm_size = 30
apc.shm_segments = 2

Hochladen von Dateien

Ist apc.rfc1867 eingeschaltet (On), legt APC beim Hochladen von Dateien einen Eintrag im Zwischenspeicher ab, der Informationen über den Hochladevorgang enthält. Mit diesen Daten lässt sich beispielsweise eine Fortschrittsanzeige realisieren. Damit APC einen solchen Eintrag erstellt, muss das Formular allerdings ein Feld mit einem bestimmten Namen, standardmäßig APC_UPLOAD_PROGRESS, haben. APC erstellt dann einen Eintrag im Zwischenspeicher mit dem Namen upload_<Schlüssel> wobei der Schlüssel dem Wert der value-Eigenschaft des Formularfeldes entspricht.

; Es sollen Informationen über den Hochladevorgang gespeichert werden.
apc.rfc1867 = On
; Benutze upload_ als Präfix für den Eintrag im Zwischenspeicher.
apc.rfc1867_prefix = upload_
; Name des versteckten Formularelementes, welches diese Funktionalität aktiviert.
apc.rfc1867_name APC_UPLOAD_PROGRESS
; Wie oft sollen die Informationen aktualisiert werden?
; 0 = So oft wie möglich. (Kann den Hochladevorgang verlangsamen)
; % = % der Dateigröße (z.B. 2% = alle 2% wird aktualisiert)
; <Zahl>< ,k,m,g> Nach  Bytes, Kilobytes, Megabytes oder Gigabytes.
apc.rfc1867 = 50k

Mehr Informationen zu dieser Funktion finden sich im Artikel Fortschrittsanzeige beim Hochladen von Dateien.

Wurde die Datei modifiziert?

Die Option apc.stat gibt an, ob bei jedem Aufruf überprüft werden soll, ob die Datei im Zwischenspeicher auch der Datei auf der Festplatte entspricht. Ist diese Option abgeschaltet (Off), wird keine Überprüfung durchgeführt, was zwar die Geschwindigkeit merklich verbessert, es aber auch nötig macht den Zwischenspeicher neu aufzubauen, damit die Änderungen am Quelltext einer Datei wirksam werden.

apc.stat = On

Auch wenn diese Option abgeschaltet ist, werden mit relativem Pfad inkludierte Dateien beim Inkludieren vorher überprüft. Bei absoluten Pfaden (also solchen die mit einem / beginnen), ist das nicht der Fall.

Viele gleichzeitige Zugriffe

Beim Starten von stark ausgelasteten Servern bzw. wenn viele Dateien modifiziert wurden, kann es passieren, dass mehrere Prozesse versuchen die gleiche Datei für den Zwischenspeicher zu kompilieren. Mittels apc.write_lock wird festgelegt, dass in diesem Fall nur ein Prozess die Datei zwischenspeichert, während die anderen Prozesse die noch nicht-zwischengespeicherte Datei einfach nur ausliefern. Ist die Option abgeschaltet, müssten die anderen Prozesse auf den ersten warten.

Überschreiben von Dateien

Wenn man eine Datei überschreibt, kann es passieren, das genau in dem Moment ein Zugriff auf diese Datei erfolgt. In dem Fall würde der Benutzer wahrscheinlich eine fehlerhafte Seite sehen (zum Teil die neue Datei, zum Teil noch die alte). Die Option apc.file_update_protection schützt davor, das eine erst zum Teil auf die Festplatte geschriebene Datei zwischengespeichert wird. Der Benutzer der in dem ungünstigen Moment auf die Datei zugreift bekommt zwar trotzdem eine fehlerhafte Seite ausgeliefert, aber die fehlerhafte Seite landet nicht im Zwischenspeicher.

; Um in den Zwischenspeicher zu kommen muss eine Datei min. 2 Sekunden alt sein.
apc.file_update_protection = 2

Auf Systemen mit hoher Festplattenauslastung ist es sinnvoll diesen Wert noch etwas zu erhöhen. Wenn man sich sicher ist, das Dateien immer atomar überschrieben werden, kann dieser Wert auf 0 gesenkt werden. (Beispielsweise wenn man die neue Datei erst in eine temporäre Datei schreibt und sie dann umbenennt.)

Lebenszeit von Dateien

Da die Größe des Zwischenspeichers begrenzt ist, könnte es unter Umständen passieren, dass dieser voll wird und kein Platz mehr für neue Dateien/Variablen ist. APC bietet allerdings die Möglichkeit Dateien oder Variablen auf die eine bestimmte Zeit lang nicht mehr zugegriffen wurde, aus dem Zwischenspeicher zu nehmen, um wieder Platz zu schaffen. Diese Funktion wird durch die Optionen apc.ttl (für Dateien) und apc.user_ttl (für Variablen) beeinflusst, welche festlegen, wie lange eine Datei/Variable nicht mehr aufgerufen werden darf bevor sie entfernt wird. Ist dieser Wert 0, ist die Funktion abgeschaltet. In diesem Fall wird der Zwischenspeicher komplett geleert, wenn er voll ist.

Außerdem gibt es noch apc.gc_ttl, wodurch bestimmt wird, wie oft APC den Zwischenspeicher auf veraltete Dateien überprüft, bzw. diese löscht.

apc.ttl = 0
apc_user_ttl = 0
apc.gc_ttl = 3600

Filtern von Dateien

Standardmäßig speichert APC alle aufgerufenen PHP-Dateien im Zwischenspeicher. Mithilfe von Filtern kann man aber einstellen, das nur bestimmte Dateien zwischengespeichert werden, bzw. bestimmte Dateien nicht in den Zwischenspeicher kommen. Dazu wird die Option apc.filters verwendet, diese erwartet eine durch Komma getrennte Liste von regulären Ausdrücken. Ein + oder ein – vor jedem Ausdruck legt fest ob auf den Ausdruck passende Dateien zwischengespeichert werden (+) oder nicht gespeichert werden (-). Wird das Plus/Minus weggelassen, wird Minus angenommen.

Die Option apc.cache_by_default gibt an ob APC standardmäßig alle PHP-Dateien zwischenspeichert, oder keine. Mit apc.max_file_size können außerdem Dateien ab einer bestimmten Größe vom Zwischenspeicher ausgeschlossen werden.

; Alle Dateien zwischenspeichern
apc.cache_by_default = 1
; Ausser: Dateien in /nicht_zwischenspeichern/ und
; die Datei mit dem Namen blablabla.php
apc.filters = "/nicht_zwischenspeichern/.*,blablabla\.php"
; Keine Datei groesser als 1 MB
apc.max_file_size = 1M

Hinweis: Beim Inkludieren von Dateien wird dieser Filter auf den Dateinamen der in der include-Anweisung steht angewendet, nicht auf den absoluten Pfad der Datei.

Tabelle: Alle Optionen

In dieser Übersicht stehen noch mal alle Optionen, mit den Standardwerten und einer sehr kurzen Beschreibung. Eine ausführlichere Beschreibung der Optionen findet sich im PHP-Handbuch. Wenn bei Zeitangaben keine Einheit dabei steht, sind Sekunden gemeint.

Option Standardwert Beschreibung
apc.enabled 1 APC aktivieren (1) bzw. deaktivieren (0).
apc.enable_cli 0 Schaltet APC auch für die Kommandozeile an. (Eigentlich nur für Testzwecke sinnvoll.)
apc.shm_size 30 Größe eines Speichersegmentes in MiB.
apc.shm_segments 1 Anzahl von Speichersegmenten für den Zwischenspeicher (Segmente * Segmentgröße = Größe des Zwischenspeichers)
apc.num_files_hint 1000 Hinweis für APC, wie viele Dateien ungefähr im Zwischenspeicher gelagert werden. Wenn man sich nicht sicher ist, kann man hier auch 0 eintragen.
apc.user_entries_hint 4096 Hinweis, wie viele Variablen im Zwischenspeicher gespeichert werden. Auch hier kann 0 eingetragen werden, wenn man sich nicht sicher ist.
apc.ttl 0 Wie lange eine Datei nicht mehr aufgerufen werden darf bevor sie aus dem Zwischenspeicher entfernt wird. (0 = Funktion deaktiviert)
apc.user_ttl 0 Wie <apc.ttl>, nur für Variablen.
apc.gc_ttl 3600 Gibt an, in welchen Zeitabständen veraltete Dateien aus dem Zwischenspeicher entfernt werden.
apc.cache_by_default 1 Standardmäßig alle/keine Datei zwischenspeichern.
apc.filters “” Filter (welche Datei zwischengespeichert wird/welche nicht.)
apc.max_file_size 1M Max. Dateigröße. Größere Dateien kommen nicht in den Zwischenspeicher.
apc.stat 1 Bei jedem Aufruf überprüfen ob die Datei im Zwischenspeicher auch der auf der Festplatte entspricht.
apc.write_lock 1 Bei mehreren gleichzeitigen Zugriffen auf eine nicht-zwischengespeicherte Datei: Ein Prozess kompiliert, die anderen liefern die Datei so aus anstatt darauf zu warten, das der erste Prozess fertig wird.
apc.stat_ctime 0 Normalerweise wird nur überprüft, wann die Datei zuletzt verändert wurde, ist diese Option eingeschaltet wird auch überprüft wann die Datei erstellt wurde. (Behebt einige Probleme mit svn/rsync.)
apc.file_update_protection 2 Dateien erst ab einem Alter von X Sekunden zwischenspeichern.
apc.rfc1867 0 Hochladevorgang von Dateien überwachen.
apc.rfc1867_prefix upload_ Präfix für den Eintrag im Zwischenspeicher.
apc.rfc1867_name APC_UPLOAD_PROGRESS Name des versteckten Formularelements.
apc.rfc1867_freq 0 Frequenz der Aktualisierungen.
apc.include_once_override 0 include_once- und require_once-Anweisungen optimieren.
apc.report_autofilter 0 Aufgrund von Problemen mit früher/später Bindung nicht-zwischengespeicherte Dateien protokollieren.
apc.mmap_file_mask NULL Die Dateimaske für mktemp, anhand der entschieden wird, ob das Speicherabbild Shared Memory- oder dateisystemgestützt ist.
apc.localcache 0 Aktiviert einen Sperr-freien “shadow-cache” (Prozess-lokal). Dadurch wird das Warten auf die Sperre beim Schreiben in den Zwischenspeicher vermindert.
apc.localcache.size 512 Größe des “shadow-cache”, es wird empfohlen hier die Hälfte von apc.num_files_hint zu verwenden.
apc.coredump_unmap 0 APC versucht bei einem fatalen Fehler zu verhindern, das der Zwischenspeicher mit im Speicherauszug (der für Zwecke der Fehlerdiagnose erstellt wird) landet. Bei einem großen Zwischenspeicher kann ein fataler Fehler sonst die Systemstabilität beeinträchtigen. Diese Funktion ist allerdings auch nicht ganz ungefährlich, da sie im Falle eines fatalen Fehlers zu undefiniertem Verhalten führen kann.

Einige Optionen sind veraltet, und sollten nicht mehr verwendet werden.

  • apc.optimization
  • apc.slam_defense (anstatt dessen sollte apc.write_lock verwendet werden.)

Informationen

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (3 Bewertungen, Durchschnitt: 5,00 von 5)
Loading ... Loading ...
Kategorie: PHP
Ansichten: 5.337

Kommentare

Bisher wurden 3 Kommentare geschrieben.

Kommentar schreiben

XHTML: Folgende Elemente sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Angetrieben durch Wordpress Thema erstellt von Antu