Podešavanje APC. Keširanje u PHP-u.
!!! Pažnja !!! ne koristite APC ako imate PHP verziju 5.5 ili noviju, jer OPCache zamenjuje APC i ugrađen je u PHP.
21. marta 2013. objavljena je PHP 5.5 beta 1 verzija sa "Zend OPCache" - izgleda da će ovo postati zamena za APC jer je uključen u PHP jezgro i moraće da se održava za svako novo izdanje.
APC - alternativni PHP keš, koji čuva operativni kod u PHP kešu, ili kako ga programeri opisuju: "APC je slobodan, otvoren i pouzdan sistem za keširanje i optimizaciju PHP međukoda".
PHP je programski jezik visokog nivoa. Kao i svi jezici visokog nivoa, može biti preveden za različite platforme. CMS sistemi poput Drupala sastoje se od stotina, ako ne i hiljada PHP skripti, a modularna priroda ovih sistema znači da pri svakom učitavanju stranice može biti učitano stotine ovih skripti. Za razliku od ostalih jezika visokog nivoa, PHP se izvršava "na letu", tj. skripta se prevodi u bajtkod tokom izvršenja. Tu APC pomaže: APC može sačuvati kopiju prevedene skripte u memoriji i učiniti je dostupnom, što znatno smanjuje resurse potrebne za Drupal. (Napomena: u nekim jezicima se ovo automatski radi - Python skripta na Apache serveru se prosleđuje Python interpreteru, ostavljajući prevedenu verziju skripte blizu same skripte koju web server koristi za buduće pristupe)
APC se lako podešava. Prvo ga treba instalirati:
sudo apt-get install php-pear
sudo apt-get install php5-dev apache2-prefork-dev build-essential
sudo pecl install apc
Zatim treba kopirati fajl apc.php koji je priložen uz tutorijal na server, a zatim restartovati Apache:
sudo /etc/init.d/apache2 restart
Sada možete otvoriti fajl http://test/apc.php i pogledati statistiku APC-a.
Prikazaće se statistika. Kao što vidite, na dijagramima nije sjajno. Ima mnogo "MISS"-eva (nedostataka fajlova u kešu) i malo "HIT"-ova (pronađenih u kešu). Takođe, fragmentacija u APC memoriji je visoka, što ukazuje na neefikasno korišćenje APC-a. Razlozi su:
Nedovoljno memorije: ako imate 8 MB za APC, a veličina učitanih skripti je 12 MB, memorije neće biti dovoljno i pojaviće se novi "MISS"-evi.
Fragmentacija: možda imate 32 MB memorije za APC, ali fajlovi zauzimaju 40 MB. Nisu svi fajlovi u upotrebi, neki moduli se retko učitavaju. Usled podešavanja APC-a, ti fajlovi mogu zauzimati prostor u kešu dok su aktivni fajlovi uskraćeni. Fajlovi se ne upisuju u keš uvek kao celi blokovi; veliki fajl može biti podeljen u dva dela, što ostavlja praznine u memoriji.
Sada da pogledamo APC konfiguracione opcije. Fajl konfiguracije za APC u Debian/Ubuntu sistemima je u /etc/php5/conf.d/apc.ini:
apc.enabled=1
APC je uključen. Ovo je važna opcija jer isključivanje APC-a može dovesti do pada performansi na produkcijskom serveru.
apc.shm_segments=1
apc.shm_size=32
Ove opcije određuju koliko memorije će biti dodeljeno APC-u. apc.shm_segments=1 znači jedan segment memorije, apc.shm_size=32 znači 32 MB veličina segmenta. Možete povećati na 64 MB i restartovati Apache. Ako "MISS"-evi ostanu veliki, pokušajte sa 128 MB i tako dalje. Ovo je ključna opcija za rad APC-a.
apc.cache_by_default=1
;apc.filters=
APC radi za sve PHP skripte. Možete komentarisati liniju apc.filters.
apc.cache_by_default=0
apc.filters="+drupal6"
Ovim ograničavate keširanje samo na fajlove Drupala 6. Korisno je ako ne želite gubiti keš pri korišćenju drugih aplikacija kao PhpMyAdmin.
apc.stat=1
Ova opcija utiče na performanse. Kada je uključena, keš ostaje dok ga ne uklonite. Kada je isključena, APC proverava vreme izmene fajla i po potrebi osvežava keš. Za produkciju treba da bude uključena, ali za razvoj bolje je isključiti. Takođe, pri uključenom apc.stat je potrebno čistiti APC keš prilikom ažuriranja modula i jezgra Drupala.
apc.ttl=0
Ova opcija određuje posle koliko milisekundi keš treba da se obriše. 0 znači da se keš ne briše automatski. Obično se stavlja 0 jer ne želite da keš briše bitne podatke svakih nekoliko sati (default je 7200 sekundi tj. 2 sata).
apc.rfc1867=1
Ovu opciju uključite ako želite da APC prati status učitavanja fajlova u Drupalu.
apc.num_files_hint=2048
Ova opcija je korisna ako na serveru imate više sajtova ili više Drupal instalacija. Jedan Drupal može keširati preko 500 fajlova. Da se keš jednog sajta ne bi brisao fajlovima drugog, podesite veću vrednost (default je 1024).
Nakon izmena, restartujte server. Očekujte grafikone sa statistikom gde je broj "MISS"-eva blizu nule, a fragmentacija 0%.