25.8 APC 

Version: 2.0.4 | Lizenz: PHP-Lizenz |
»APC« ist die Abkürzung für »Alternative PHP Cache«. Bei APC handelt es sich um einen Cache, wie der Name schon vermuten lässt. Allerdings handelt es sich nicht um einen Cache, der komplett fertig gerenderte Dateien speichert, sondern um einen, der den Bytecode, der aus dem PHP-Quelltext erzeugt wird, im Arbeitsspeicher hält. Dadurch muss der Server den PHP-Quelltext nicht jedes Mal neu übersetzen, sondern kann auf die bereits übersetzten Daten zurückgreifen.
APC legt die Daten im Shared Memory, also im Arbeitsspeicher des Servers, ab, wodurch ein schneller Zugriff gewährleistet wird. Um die Verwaltung der Daten im Cache müssen Sie sich nicht weiter kümmern. Sollte eine Datei geändert werden, stellt APC das automatisch fest und liest die geänderte Variante ein. Bitte beachten Sie, dass die veraltete Version im Speicher verbleibt, bis die Garbage Collection diese entfernt.
Zurzeit ist noch keine PHP 5-Version von APC verfügbar, und es ist zum jetzigen Zeitpunkt auch noch nicht absehbar, wie lange es noch dauern wird, bis APC portiert ist.
Nachdem Sie APC installiert und eingebunden haben, ist die Arbeit an sich schon erledigt. APC benötigt keine Konfiguration und fängt automatisch an, die Systemperformance zu optimieren. Auch wenn es nicht unbedingt nötig ist, können Sie das System natürlich konfigurieren. Die Einstellungen müssen allesamt über Direktiven in der php.ini vorgenommen werden:
apc.enabled – Mit dieser Direktive können Sie steuern, ob APC aktiv ist. Der Default-Wert 1 schaltet das System ein. Weisen Sie der Direktive eine 0 zu, wird das System ausgeschaltet.
apc.shm_size – Hiermit können Sie steuern, wie groß der Speicherbereich in Megabyte ist, der zum Caching genutzt werden soll. Der Default-Wert hierbei ist 30, wobei die Größe durch das Betriebssystem bestimmt wird. Auf BSD und OS X kann ein solches Segment maximal 4 Megabyte groß sein. Eine Tabelle dazu, welches System welche Größe zulässt, gibt es leider nicht.
apc.shm_segments – Möchten Sie mehr als ein Shared-Memory-Segment für den Cache belegen, können Sie das mit dieser Direktive steuern. Der Standardwert ist 1, was definiert, dass ein Segment belegt wird. Auf Systemen, die nur kleine Shared-Memory-Segmente zulassen, macht es Sinn, mehrere Segmente zu nutzen.
apc.optimization – Normalerweise versucht APC nicht, den Code zu optimieren, was dem Vorgabewert 0 entspricht. Weisen Sie dieser Direktive eine 1 zu, versucht APC den kompilierten Code zu optimieren, bevor er im Cache abgelegt wird.
apc.num_files_hint – Mit diesem Wert legen Sie fest, wie viele Dateien von dem System verwaltet werden können. Das System legt zwei von diesen Verwaltungseinheiten an, so dass mit dem Default-Wert 1000 insgesamt 2000 Dateien verwaltet werden können.
apc.gc_ttl – Diese Direktive definiert, in welchen Zeitabständen die Garbage Collection durchgeführt wird. Hierbei handelt es sich um die »Müllabfuhr«, die den Cache von veralteten Einträgen befreit. Die Standardeinstellung 3600 entspricht 3600 Sekunden, also einer Stunde. Sollten Sie ein System nutzen, bei dem Dateien sich oft ändern, kann es hilfreich sein, die Zeit für die Garbage Collection herunterzusetzen.
apc.filters – Standardmäßig behält APC alle PHP-Dateien im Cache. Um zu verhindern, dass bestimmte Dateien gecacht werden, können Sie diese Direktive nutzen. Sie akzeptiert einen oder mehrere reguläre Ausdrücke in erweiterter POSIX-Schreibweise, wie sie auch von PHP bei regulären Ausdrücken genutzt wird. Übergeben Sie mehrere Ausdrücke, so sind diese jeweils durch ein Komma voneinander zu trennen. So könnten Sie mit der Zeile
verhindern, dass alle Dateien, die im Ordner nocache liegen, und alle Dateien, in deren Namen das Wort download vorkommt, gecacht werden.
Aber es ist nicht so, dass APC gar keine Funktionen mit sich bringt. Die wichtigste ist sicher erstmal apc_cache_clear(). Mit ihr können Sie den gesamten Cache auf einmal löschen. Das kann dann hilfreich sein, wenn Sie eine sehr große Anzahl von Dateien von dem Server neu geschrieben haben und verhindern wollen, dass die veralteten Kompilate bis zur nächsten Garbage Collection im Speicher des Servers verbleiben.
Zusätzlich sind noch apc_cache_info() und apc_sma_info() definiert, die Ihnen Informationen zum Cache bzw. zum Shared Memory des Servers liefern. Beide Funktionen liefern ein verschachteltes Array mit Daten zurück.
Das Array, das von apc_cache_info() bereitgestellt wird, enthält einige allgemeine Informationen und darüber hinaus Daten zu jedem gecachten Eintrag. Der Schlüssel 'num_slots' enthält die Anzahl der Slots, die zum Speichern von Cache-Einträgen definiert ist. Es handelt sich also um das Doppelte des Wertes, der der Direktive apc.num_files_hint zugewiesen wurde. Die beiden Elemente 'num_hits' und 'num_misses' enthalten die Anzahl der Treffer und die der Misses, geben also an, wie oft eine Datei aus dem Cache gelesen werden konnte und wie oft eine Datei nicht gefunden wurde und neu geladen werden musste. Die Schlüssel 'cache_list' und 'deleted_list' verweisen jeweils auf ein Array, in dem für jeden der vorhandenen bzw. gelöschten Cache-Einträge ein Eintrag vorhanden ist. Diese Einträge bieten sehr detaillierte Informationen wie zum Beispiel den Inode, unter dem die Datei abgespeichert ist. In solcher Tiefe werden die Informationen sicher selten benötigt. Hilfreich können aber sicher die Schlüssel 'filename', 'mktime' und 'creation_time' sein. Der erste enthält den Dateinamen inklusive des Pfades. Die beiden anderen verweisen jeweils auf einen Timestamp, der Ihnen mitteilt, wann die Datei und wann der Eintrag im Cache erstellt wurden. Interessant kann sicher auch noch 'num_hits' sein. Hier wird gezählt, wie oft der Eintrag angefordert wurde.
Das Array, das von der Funktion apc_sma_info() zurückgegeben wird, enthält im Schlüssel 'num_seg' die Anzahl der Speicherblöcke, die im Shared Memory reserviert sind. Die Größe eines Segments ist unter dem Schlüssel 'seg_size' abgelegt, und die Gesamtgröße des verfügbaren Speichers ist im Element 'avail_mem' abgelegt. Unter dem Schlüssel 'num_slots' finden Sie ein numerisches Array, in dem jedes Speichersegment über einen Eintrag verfügt, in dem Größe und ähnliche Daten zu finden sind.
Im normalen Alltag werden Sie diese beiden Funktionen kaum brauchen. Registrieren Sie allerdings Performance-Probleme, können sie sehr hilfreich sein, um Probleme aufzuspüren und die Einstellungen zu optimieren.