Apc keširanje. APC u PHP-u: Koncept, instalacija, upotreba APC-a. Omogućite APC podršku u Magentu


APC je skraćenica za Alternativno PHP keširanje. Ruski tekst je alternativni PHP cacher. Za šta se koristi? Kao i drugi popularni kešeri kao što su XCache i eAccelerator, koristi se za povećanje brzine PHP skripti. Ako imate sopstveni server i zabrinuti ste za performanse PHP skripti, onda APC može biti rešenje za vaš problem. U današnjem članku ćemo naučiti više o APC-u, naučiti kako ga instalirati i testirati i koristiti APC keširanje prilikom pisanja PHP skripti.

Šta je APC akcelerator?

AcceleratorAPC(Alternativni PHP keš) je besplatni i otvoreni keš kodova za PHP. Dizajniran je da bude besplatan, otvoren i stabilan okvir za keširanje i optimizaciju PHP izvornog koda. APC je u fazi razvoja. Trenutno podržava PHP 4 i PHP 5, uključujući 5.3. Pretpostavlja se da će biti uključen u standardnu ​​verziju PHP jezgra 6.
Kako se postiže brzina rada?PHP?
Kada dođe do kašnjenja u učitavanju vaše stranice, postavlja se pitanje - Zašto? Činjenica je da se prilikom izvršavanja standardnog poziva PHP skripte svaki put iznova kompajlira. Odnosno, isti posao se radi nekoliko puta. Ako se radi o malom projektu, usporavanja mogu biti mala, čak i nevidljiva. Ali ako imate veliki projekat (website), onda ste primijetili da prilikom pristupa postoji kašnjenje u učitavanju stranice, uprkos činjenici da je stranica dobro optimizirana u smislu html kompresije i css kompresije. Radi jasnoće, hajde da vidimo kako se izvršava standardni zahtev bez upotrebe PHP akceleratora:

Istovremeno, izvršenja su u toku kompilacija koda na svaki zahtev. Ovo traje dosta vremena za obradu zahtjeva, pa se stoga usporava. Da bi se ovo zaobišlo, izmišljeni su akceleratori, čiji je APC predstavnik. Oni keširaju prevedeni kod na disku, koji, kada se pristupi, ispisuje rezultat. Ovo povećava brzinu PHP-a. APC može raditi u dva načina rada, koji su konfigurisani u datoteci /etc/php.d/apc.ini, varijabla apc.stat. Varijabla može imati vrijednosti 1 i 0 (apc.stat=0 ili apc.stat=1). Kada koristite apc.stat=1 način rada, skripte rade nešto sporije dok provjeravaju modifikaciju datoteke, ali to izbjegava probleme kada se kod promijeni, ali izlaz rezultata ostaje isti. Stoga vam savjetujem da vrijednost varijable postavite na 1.
Nakon instaliranja APC akceleratora, šema izvršenja zahtjeva će biti sljedeća:

Instaliranje APC akceleratora

Pošto se ažurirane verzije dodaju u apt vrlo kasno. Stoga ćemo instalirati APC preko PECL-a:

Sudo apt-get remove --purge php-apc sudo apt-get install libpcre3-dev sudo pecl install apc
Tokom instalacije postavljamo sljedeću konfiguraciju (YMMV):
Omogući interno otklanjanje grešaka u APC-u : nema podrške Omogući po zahtjevu informacije o fajlovima o datotekama koje se koriste iz APC keša : ne Omogući zaključavanje okreta (EKSPERIMENTALNO) : ne Omogući zaštitu memorije (EKSPERIMENTALNO) : ne Omogući mutexove pthread (podrazumevano) : da Omogući čitanje pthread / brave za pisanje (EKSPERIMENTALNO) : br Sada treba da omogućite APC u postavkama, jer... ovo se ne radi automatski. Za ovo stvaramo apc.ini datoteku u odgovarajućem direktoriju: sudo vim /etc/php5/conf.d/apc.ini i upišite sljedeće postavke u ovu datoteku (preporučeno za rad sa Magento) extension=apc.so apc.enabled=1 apc.shm_size=512M apc.num_files_hint=10000 apc.user_entries_hint=10000 apc.max_file_size=5M apc.stat=0 apc.optimization=0 apc.shm_segments=0 apc.shm_segments apc.cache_by_default=1 apc.include_once_override=1

Omogućite APC podršku u Magentu

Otvorite Magento konfiguracijsku datoteku: vi app/etc/local.xml i dodajte sljedeći kod u globalni odjeljak:


apc fajl 0 1 MAGE_ ili apc baza podataka 0 1 MAGE_


Gdje između oznaka “Prefix” je naznačen kratak opis trgovine tako da je moguće koristiti APC za keširanje nekoliko trgovina izgrađenih na jednom Magentu.

Kako provjeriti rad APC-a?

Prije svega, trebali biste primijetiti da Magento PHP skripte počinju brže raditi. Koristi Firebug i dodatak za njega, na primjer YSlow, za procjenu brzine stranice. Firebug ekstenziju za Firefox možete preuzeti ovdje. Osim toga, možete koristiti datoteku apc.php tako što ćete je kopirati iz APC distribucijske mape u mapu javnost vašeg projekta: sudo cp /usr/share/php/apc.php /vaš put do javnog Sada možete otvoriti ovu datoteku u svom pretraživaču: http://yourhost.local/apc.php April 9, 2015 12:12 pm 1,889 pregleda | Bez komentara

Šta je APC?

APC je sistem za keširanje PHP koda koji vam omogućava da ubrzate svoju web stranicu. PHP je dinamički skriptni jezik na strani servera koji se mora raščlaniti, kompajlirati i izvršiti na serveru svaki put kada se traži stranica. Međutim, u mnogim slučajevima, zahtjevi se ponavljaju i stoga server u oblaku mora ponovo obraditi svaki od njih.

U ovom slučaju, APC, ili Alternative PHP Cache, dolazi u pomoć. Ovaj alat pohranjuje PHP kod u operativnu memoriju i preuzima ga po potrebi. U suštini, zaobilazi obradu i kompilaciju koda, minimizirajući opterećenje na serveru.

Ovaj vodič će pokazati instalaciju i konfiguraciju APC-a.

Bilješka: Da biste dovršili vodič, prvo morate imati root privilegije, kao i .

Instaliranje APC-a

Prije instaliranja APC keša, morate instalirati neke od njegovih ovisnosti. Da biste to učinili, koristite sljedeću naredbu:

sudo apt-get install php-pear php5-dev make libpcre3-dev

Zatim možete instalirati APC koristeći naredbu pecl:

sudo pecl install apc

Da biste dovršili instalaciju, potrebno je urediti php.ini datoteku:

dodajući sljedeći red na kraju:

extension=apc.so

Sačuvajte i zatvorite datoteku, a zatim ponovo pokrenite Apache:

sudo service apache2 restart

Da biste saznali da li je APC omogućen, otvorite stranicu sa informacijama o PHP-u. Ako ga nema, kreirajte praznu php datoteku u folderu /var/www:

nano /var/www/info.php

I dodajte ovaj kod u njega:

phpinfo();
?>

Sačuvajte i zatvorite datoteku, a zatim otvorite pretraživač. Sve informacije o trenutnoj PHP instalaciji će se pojaviti na ekranu. Ako je APC omogućen, stranica će to pokazati. Općenito, ne preporučuje se napuštanje ove datoteke, jer može omogućiti pristup osjetljivim podacima neovlaštenim korisnicima. Uklonite ga nakon provjere.

Postavljanje APC-a

Nakon instalacije, APC keš memorija počinje sa zadanim postavkama. Postoje dvije vrlo važne postavke u njegovim konfiguracijama. Dakle, otvorite datoteku php.ini:

sudo nano /etc/php5/apache2/php.ini

Ispod prethodno dodane linije koja uključuje APC, dodajte sljedeći red:

apc.shm_size = 64

Ovo će dodijeliti 64MB RAM-a za APC keširanje. Ovisno o zahtjevima ili ograničenjima virtuelnog privatnog servera, ova vrijednost može varirati.

Ispod morate dodati još jednu liniju:

Postavka apc.stat provjerava skriptu na svaki zahtjev da provjeri promjene. Ako je promijenjen, on će ga ponovo kompajlirati i keširati novu verziju. Ovo je standardno ponašanje APC-a. Vrijednost 0 u ovoj liniji će reći APC-u da ne provjerava promjene u skripti. Ovo poboljšava performanse, ali postoji i loša strana: ako postoje promjene u PHP skripti, one neće biti napravljene dok se cloud server ne pokrene ponovo. Stoga se postavljanje vrijednosti na 0 preporučuje samo na lokacijama koje su u proizvodnji.

Sada kada je APC keš instaliran i pokrenut, možete provjeriti njegov status i performanse. Pronađite datoteku apc.php u fascikli /usr/share/php/ i premestite je u fasciklu kojoj može da pristupi pretraživač - na primer, www.

Ponašanje ovih funkcija zavisi od podešavanja u php.ini.

Iako su zadane postavke APC-a prikladne za većinu instalacija, neke aplikacije mogu zahtijevati više finog podešavanja.

Prilikom konfigurisanja APC-a, postoje dvije glavne tačke na koje treba obratiti pažnju. Prvi je koliko memorije treba staviti na raspolaganje APC-u, a drugi je da li će APC provjeriti da li je datoteka izmijenjena na svaki zahtjev. Ovim postavkama upravljaju parametri apc.shm_size I apc.stat, odnosno. Molimo pažljivo pročitajte odjeljke koji se odnose na postavljanje ovih parametara.

Kada se server pokrene, skripta apc.php, koji se isporučuje sa ovom ekstenzijom, mora se kopirati u "docroot" i prava na njega moraju omogućiti njegovo pokretanje preko pretraživača. Ova skripta pruža detaljne informacije o tome kako APC radi. Ako je GD omogućen u PHP-u, onda će ova skripta također prikazati korisne grafikone. Naravno, prva stvar koja će biti zanimljiva je da li APC išta kešira. Ako APC radi, tada vrijednost Puni broj predmemorije(lijevo) će pokazati koliko je puta predmemorija postala potpuno puna i bila prisiljena nasilno ukloniti unose kojima se nije zadnji put pristupalo apc.ttl sekundi Što je ovaj broj manji, to je bolje konfigurisana keš memorija. Ako ovaj broj stalno raste, onda APC mora stalno da čisti stare unose i gubi se smisao keširanja. Najbolji način da se ovaj broj smanji je dodavanje memorije u APC. Ako se to ne može učiniti, potrebno je ponovo konfigurirati apc.filters da ograničite skup keširanih skripti.

Ako je APC izgrađen sa podrškom mmap (Memory Mapping), koristit će samo jedan memorijski segment; ako je, naprotiv, APC izgrađen sa podrškom za SHM (SysV Shared Memory), koristit će nekoliko segmenata. MMAP nema maksimalno ograničenje, za razliku od SHM-a koji je ograničen /proc/sys/kernel/shmmax. Općenito se preporučuje korištenje MMAP-a jer on mnogo brže dodjeljuje memoriju kada se web server ponovo pokrene, što utiče na brzinu pokretanja servera.

APC konfiguracijski parametri
Ime Default Lokacija promjene Lista promjena
apc.enabled "1" PHP_INI_SYSTEM PHP_INI_SYSTEM u APC-u 2. ​​PHP_INI_ALL u APC-u<= 3.0.12.
apc.shm_segments "1" PHP_INI_SYSTEM
apc.shm_size "32M" PHP_INI_SYSTEM
apc.shm_strings_buffer "4M" PHP_INI_SYSTEM Dostupno sa APC 3.1.4.
apc.optimization "0" PHP_INI_ALL PHP_INI_SYSTEM u APC 2. Uklonjeno u APC 3.0.13.
apc.num_files_hint "1000" PHP_INI_SYSTEM
apc.user_entries_hint "4096" PHP_INI_SYSTEM Dostupno sa APC 3.0.0.
apc.ttl "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.0.
apc.user_ttl "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.0.
apc.gc_ttl "3600" PHP_INI_SYSTEM
apc.cache_by_default "1" PHP_INI_ALL PHP_INI_SYSTEM u APC-u<= 3.0.12. Доступно с APC 3.0.0.
apc.filters NULL PHP_INI_SYSTEM
apc.mmap_file_mask NULL PHP_INI_SYSTEM
apc.slam_defense "1" PHP_INI_SYSTEM Dostupno sa APC 3.0.0. Prije APC 3.1.4, zadana vrijednost "0" (onemogućeno).
apc.file_update_protection "2" PHP_INI_SYSTEM Dostupno sa APC 3.0.6.
apc.enable_cli "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.7.
apc.max_file_size "1M" PHP_INI_SYSTEM Dostupno sa APC 3.0.7.
apc.use_request_time "1" PHP_INI_ALL Dostupno sa APC 3.1.3.
apc.stat "1" PHP_INI_SYSTEM Dostupno sa APC 3.0.10.
apc.write_lock "1" PHP_INI_SYSTEM Dostupno sa APC 3.0.11.
apc.report_autofilter "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.11.
apc.serializator "zadano" PHP_INI_SYSTEM Dostupno sa APC 3.1.0.
apc.include_once_override "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.12.
apc.rfc1867 "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.13.
apc.rfc1867_prefix "upload_" PHP_INI_SYSTEM
apc.rfc1867_name "APC_UPLOAD_PROGRESS" PHP_INI_SYSTEM
apc.rfc1867_freq "0" PHP_INI_SYSTEM
apc.rfc1867_ttl "3600" PHP_INI_SYSTEM Dostupno sa APC 3.1.1.
apc.localcache "0" PHP_INI_SYSTEM
apc.localcache.size "512" PHP_INI_SYSTEM Dostupno u APC 3.0.14 - 3.1.11.
apc.coredump_unmap "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.16.
apc.stat_ctime "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.13.
apc.preload_path NULL PHP_INI_SYSTEM Dostupno sa APC 3.1.1.
apc.file_md5 "0" PHP_INI_SYSTEM Dostupno sa APC 3.1.1.
apc.canonicalize "1" PHP_INI_SYSTEM Dostupno sa APC 3.1.1.
apc.lazy_functions 0 PHP_INI_SYSTEM Dostupno sa APC 3.1.3.
apc.lazy_classes 0 PHP_INI_SYSTEM Dostupno sa APC 3.1.3.
Za detaljan opis PHP_INI_* konstanti, pogledajte odjeljak Gdje se mogu postaviti opcije konfiguracije.

Kratko objašnjenje konfiguracijskih direktiva.

Ako instalirate apc.enabled postavljeno na 0, APC neće biti omogućen. Ovo je korisno kada je APC statički omogućen u PHP-u i ne postoje druge opcije za onemogućavanje njegove upotrebe. Ako je APC napravljen kao DSO, možete jednostavno komentarisati liniju proširenje V php.ini.

Apc.shm_segments cijeli broj

Broj segmenata dijeljene memorije dodijeljenih za keš memoriju. Ako je APC iskoristio svu dostupnu zajedničku memoriju i apc.shm_size koliko god sistem dozvoljava, povećanje ovog parametra može pomoći.

Apc.shm_size string

Veličina segmenta dijeljene memorije, specificirana u kratkom zapisu (pogledajte ovaj FAQ). Podrazumevano, neki sistemi (uključujući većinu BSD varijanti) ograničavaju ovu vrijednost na izuzetno malu vrijednost.

Apc.shm_strings_buffer string

Količina memorije dodijeljena dijeljenoj keš stringovima koju koriste interni APC procesi. Veličina mora biti završena sufiksom M ili G kako bi se označili megabajti, odnosno gigabajti. Korištenje ove opcije može smanjiti memorijski otisak PHP-FPM radnih procesa, budući da će isti nizovi biti pohranjeni u memoriju samo jednom i mogu ih koristiti svi radni procesi.

Apc.optimization cijeli broj

Nivo optimizacije. Nula onemogućava optimizaciju. Što je ova vrijednost veća, to će se koristiti agresivnija optimizacija. Ne očekujte veliko povećanje brzine. Ovo je eksperimentalna funkcionalnost.

Apc.num_files_hint cijeli broj

Nagoveštaj o broju jedinstvenih fajlova koji se koriste na vašoj veb lokaciji. Postavite je na nulu ili je nemojte navesti uopće ako niste sigurni. Ova postavka je korisna kada imate više hiljada datoteka.

Apc.user_entries_hint cijeli broj apc.file_update_protection cijeli broj

Kada se datoteka promijeni u hodu, to bi se trebalo dogoditi na atomski način. To jest, prvo se mora upisati u privremenu datoteku, a zatim premjestiti ( mv) na svoju ciljnu poziciju. Mnogi uređivači teksta k.č, tar a drugi to ne rade. Ovo može dovesti do toga da se datoteka traži (i kešira) dok se piše. Postavke apc.file_update_protection postavlja kašnjenje keširanja za potpuno nove datoteke. Zadana vrijednost je 2 sekunde. To znači da ako vremenska oznaka modifikacije datoteke ( mtime) kaže da ako je prošlo manje od 2 sekunde od izmjene datoteke, neće biti keširana. Nesretna osoba koja pokuša pristupiti poluspremljenoj datoteci će doživjeti čudno ponašanje, ali barem neće dugo trajati. Ako se sve datoteke web servera ažuriraju atomski, korištenjem metoda kao što su rsync(koji se ispravno ažurira), onda se ovo ponašanje može onemogućiti postavljanjem ovog parametra na nulu. Ako je sistem I/O preopterećen, neka ažuriranja mogu potrajati više od dvije sekunde i ovu postavku treba povećati u skladu s tim.

Apc.enable_cli cijeli broj

Više za testiranje i otklanjanje grešaka. Ova postavka dozvoljava APC za CLI verziju PHP-a. U normalnom radu, pokretanje APC-a, koji će kreirati, puniti i uništavati keš svaki put kada pokrenete skriptu u konzoli, neće biti najbolja ideja. Ali za potrebe testiranja i otklanjanja grešaka, možete lako omogućiti APC za CLI.

Apc.max_file_size cijeli broj

Ne kešira datoteke veće od veličine određene ovom postavkom. Podrazumevano je 1M.

Apc.stat cijeli broj

Budite oprezni kada mijenjate ovu postavku. Ovo je podrazumevano omogućeno, što dovodi do toga da APC proverava datoteke skripte na svaki zahtev da vidi da li su izmenjene. Ako su promijenjeni, bit će ponovo kompajlirani i ponovo keširani. Ako onemogućite ovu postavku, tada APC neće izvršiti takvu provjeru, a ako je datoteka već keširana, a zatim promijenjena, nova verzija neće ući u keš memoriju. Recachiranje će zahtijevati ponovno pokretanje web servera. Imajte na umu da web serveri konfigurisani da koriste FastCGI možda neće obrisati keš memoriju kada se ponovo pokrenu. U industrijskim okruženjima u kojima se promjene datoteka događaju vrlo rijetko, onemogućavanje ove opcije može značajno poboljšati performanse.

Za datoteke koje se učitavaju putem uključenog/potrebnog, ova opcija radi odlično, ali imajte na umu da ako uključite datoteku u relativnu putanju (na Unixu, bilo koja putanja koja ne počinje sa /), APC će provjeriti jedinstvenost. Ako se koriste apsolutne putanje, APC će preskočiti ovu provjeru i koristiti apsolutnu putanju kao jedinstveni identifikator datoteke.

Apc.write_lock boolean

Na jako opterećenim serverima, kada se server pokrene, ili kada se mnogo datoteka modificira u isto vrijeme, APC može pokušati kompajlirati i keširati istu datoteku više puta u isto vrijeme. Zaključavanje pisanja osigurava da će samo jedan proces pokušati kompajlirati i keširati nekeširanu datoteku. Drugi procesi koji trebaju koristiti ovu datoteku koristit će njenu nekeširanu verziju, umjesto da čekaju da se pojavi u kešu.

Apc.report_autofilter boolean

Zapisuje sve skripte koje su isključene iz keširanja zbog ranih ili kasnih problema s povezivanjem.

Apc.serializer string

Kaže APC-u da koristi serijalizator treće strane.

Apc.include_once_override boolean

Optimizira pozive include_once I zahtijevaju_jednom kako biste spriječili skupe sistemske pozive.

Pažnja

Ova funkcionalnost je EKSPERIMENTALNO. Ponašanje ove direktive, njen naziv i njena dokumentacija mogu se promijeniti bez prethodne najave u budućim verzijama APC-a. Koristite ga na vlastitu odgovornost.

Apc.rfc1867 boolean

Presretač toka preuzimanja datoteka RFC1867 dostupan je samo u APC-u ako je izgrađen sa PHP 5.2.0 ili novijim. Ako je dozvoljeno, onda svaka datoteka učitana na server koja sadrži u obrascu, prije polja datoteke, polje s imenom APC_UPLOAD_PROGRESS, će prisiliti APC da automatski kreira prilagođeni unos u keš memoriji kao što je upload_ ključ, Gdje ključ je vrijednost polja APC_UPLOAD_PROGRESS.

Zapamtite da je skriveno polje APC_UPLOAD_PROGRESS mora ići u polje sa fajlom, inače će rad biti netačan.

Imajte na umu da praćenje preuzimanja datoteke nije bezbedno za niti, tako da ako tokom prvog preuzimanja postoji novi sa istim ključem, praćenje prvog će biti zaustavljeno.

Zapiši to stopa bit će dostupno samo kada se završe sva trenutna preuzimanja.

Primjer #1 Primjer korištenja apc.rfc1867

print_r (apc_fetch ( "upload_ $_POST [ APC_UPLOAD_PROGRESS ] " ));
?>

Rezultat pokretanja ovog primjera bit će otprilike ovako:

Niz ( => 1142543 => 1142543 => 1828068.8 => test => datoteka => /tmp/php8F => 0 => 1)

Apc.rfc1867_prefix string

Ključni prefiks koji se koristi u unosu u predmemoriji korisnika kreiranom funkcijom praćenja napretka preuzimanja rfc1867.

Apc.rfc1867_name string

Određuje ime za skriveno polje obrasca koje će omogućiti proces preuzimanja APC-a i navesti sufiks ključa za predmemoriju korisnika.

Apc.rfc1867_freq string

Učestalost kojom će se korisnikov unos u keš memoriju ažurirati tokom preuzimanja datoteke. Može se navesti ili kao postotak ili navođenjem veličine u bajtovima. Po želji možete koristiti sufikse "k", "m" I "g"(neosjetljivo na velika i mala slova) za kilobajte, megabajte i gigabajte, respektivno. Ako navedete nulu, ažuriranja će se dogoditi što je brže moguće, ali to može usporiti vrijeme učitavanja.

Apc.rfc1867_ttl cijeli broj

TTL za rfc1867 zapise.

Apc.localcache boolean

Omogućuje neblokirajuće keš memorije lokalnog procesa, što smanjuje količinu blokiranja tokom upisivanja u predmemoriju.

Apc.localcache.size cijeli broj

Veličina lokalne keš memorije procesa trebala bi biti prilično velika, otprilike polovina apc.num_files_hint .

Apc.coredump_unmap boolean

Omogućava APC-u da presreće signale kao što je SIGSEGV, koji zapisuje coredump kada se izda. Kada ovi signali budu primljeni, APC će pokušati osloboditi svu zajedničku memoriju kako je ne bi uključio u coredump. Ova postavka može povećati stabilnost sistema kada je primljen kritični signal i APC je konfigurisan da koristi veliku količinu memorije.

Pažnja

Ova karakteristika je potencijalno opasna. Oslobađanje segmenata dijeljene memorije kada se primi kritični signal može rezultirati nepredvidivim ponašanjem.

Komentar:

Iako neki kerneli pružaju mogućnost ignorisanja nekih segmenata dijeljene memorije prilikom pisanja osnovne datoteke, ove implementacije također mogu zanemariti važne memorijske segmente kao što je Apache semafor.

apc.stat_ctime cijeli broj

Provjerite po ctime-u da biste izbjegli probleme uzrokovane programima kao što su svn ili rsync, pazeći da se inode nije promijenio od posljednjeg prikupljanja statistike. APC obično provjerava samo mtime.

Apc.canonicalize bool

Ako je onemogućeno, relativne staze se pretvaraju u kanonske u načinu rada bez statistike. Ako je omogućeno, tada se datoteke povezane putem omotača toka neće keširati, jer realpath() ne podržava stream omote.

Apc.preload_path string

Opciono. Određuje putanju koju APC koristi za učitavanje keširanih podataka tokom pokretanja.

Apc.use_request_time bool

Koristite vrijeme početka SAPI zahtjeva za TTL.

Apc.file_md5 bool

Napišite md5 hešove datoteka.

Apc.lazy_functions cijeli broj

Omogućava lijeno učitavanje funkcija.

Apc.lazy_classes cijeli broj

Omogućava lijeno učitavanje klasa.

Konfiguracioni fajl se najčešće nalazi u /etc/php.d/apcu.ini. Primjer konfiguracijske datoteke za server sa 8 GB RAM-a:

extension=apcu.so
apc.enable_cli = 1
apc.shm_segments = 1
apc.shm_size = 512M
apc.stat = 1
apc.ttl = 0
apc.user_ttl = 0
apc.max_file_size = 1M
apc.num_files_hint = 16384
apc.user_entries_hint = 16384
apc.file_update_protection=10

Kada koristite PHP 5.3, navedite extension=apc.so

FastCGI napomena: Popularni APC opcode keš za PHP ne može dijeliti keš između PHP FastCGI procesa osim ako PHP ne upravlja podređenim procesima. Dakle, efikasnost keš memorije je ograničena sa mod_fcgid; istovremeni PHP zahtjevi će koristiti različite predmemorije operacija.

Opis glavnih APCu konfiguracijskih atributa

apc.shm_segments Broj dodijeljenih memorijskih segmenata. Mnogi BSD sistemi imaju niske granice memorijskog segmenta. Podrazumevano je 1.
apc.shm_size Veličina segmenta dijeljene memorije je postavljena u megabajtima. Preporučujemo da postavite minimum na 128M, za server sa 8GB - 512M, za server sa 16GB - 1024M. Ako se koristi više segmenata, veličina memorije se mora podijeliti s brojem segmenata.
apc.stat Ova opcija vam omogućava da onemogućite ili omogućite APC. Vrijednost 1 - omogućeno, 0 - onemogućeno.
apc.ttl Vrijeme keširanja PHP datoteka. Kada je postavljeno na 0, omogućava brisanje cijele keš memorije kada je dodijeljena memorija puna.
apc.user_ttl Vrijeme keširanja korisničkih podataka. Kada je postavljeno na 0, omogućava brisanje cijele keš memorije kada je dodijeljena memorija puna.
apc.max_file_size Maksimalna veličina keširane datoteke.
apc.num_files_hint APC se koristi za optimizaciju organizacije skladištenja podataka u memoriji. Preporučujemo postavljanje vrijednosti veće od 10000.
apc.user_entries_hint APC se koristi za optimizaciju organizacije pohranjivanja korisničkih varijabli u memoriju. Preporučujemo postavljanje vrijednosti veće od 10000.
apc.file_update_protection Nemojte keširati datoteke kreirane prije manje od navedenog broja sekundi. Omogućava vam da izbjegnete keširanje djelomično napisane datoteke.

Greška Nije moguće dodijeliti memoriju za bazen

Uključuje(): Nemogućnost alociranja memorije za bazen Greška se javlja kada je fragmentacija memorije ozbiljna; postavljanje opcija apc.ttl i apc.user_ttl na nulu pomaže minimiziranju fragmentacije memorije.

Ponašanje ovih funkcija zavisi od podešavanja u php.ini.

Iako su zadane postavke APC-a prikladne za većinu instalacija, neke aplikacije mogu zahtijevati više finog podešavanja.

Prilikom konfigurisanja APC-a, postoje dvije glavne tačke na koje treba obratiti pažnju. Prvi je koliko memorije treba staviti na raspolaganje APC-u, a drugi je da li će APC provjeriti da li je datoteka izmijenjena na svaki zahtjev. Ovim postavkama upravljaju parametri apc.shm_size I apc.stat, odnosno. Molimo pažljivo pročitajte odjeljke koji se odnose na postavljanje ovih parametara.

Kada se server pokrene, skripta apc.php, koji se isporučuje sa ovom ekstenzijom, mora se kopirati u "docroot" i prava na njega moraju omogućiti njegovo pokretanje preko pretraživača. Ova skripta pruža detaljne informacije o tome kako APC radi. Ako je GD omogućen u PHP-u, onda će ova skripta također prikazati korisne grafikone. Naravno, prva stvar koja će biti zanimljiva je da li APC išta kešira. Ako APC radi, tada vrijednost Puni broj predmemorije(lijevo) će pokazati koliko je puta predmemorija postala potpuno puna i bila prisiljena nasilno ukloniti unose kojima se nije zadnji put pristupalo apc.ttl sekundi Što je ovaj broj manji, to je bolje konfigurisana keš memorija. Ako ovaj broj stalno raste, onda APC mora stalno da čisti stare unose i gubi se smisao keširanja. Najbolji način da se ovaj broj smanji je dodavanje memorije u APC. Ako se to ne može učiniti, potrebno je ponovo konfigurirati apc.filters da ograničite skup keširanih skripti.

Ako je APC izgrađen sa podrškom mmap (Memory Mapping), koristit će samo jedan memorijski segment; ako je, naprotiv, APC izgrađen sa podrškom za SHM (SysV Shared Memory), koristit će nekoliko segmenata. MMAP nema maksimalno ograničenje, za razliku od SHM-a koji je ograničen /proc/sys/kernel/shmmax. Općenito se preporučuje korištenje MMAP-a jer on mnogo brže dodjeljuje memoriju kada se web server ponovo pokrene, što utiče na brzinu pokretanja servera.

APC konfiguracijski parametri
Ime Default Lokacija promjene Lista promjena
apc.enabled "1" PHP_INI_SYSTEM PHP_INI_SYSTEM u APC-u 2. ​​PHP_INI_ALL u APC-u<= 3.0.12.
apc.shm_segments "1" PHP_INI_SYSTEM
apc.shm_size "32M" PHP_INI_SYSTEM
apc.shm_strings_buffer "4M" PHP_INI_SYSTEM Dostupno sa APC 3.1.4.
apc.optimization "0" PHP_INI_ALL PHP_INI_SYSTEM u APC 2. Uklonjeno u APC 3.0.13.
apc.num_files_hint "1000" PHP_INI_SYSTEM
apc.user_entries_hint "4096" PHP_INI_SYSTEM Dostupno sa APC 3.0.0.
apc.ttl "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.0.
apc.user_ttl "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.0.
apc.gc_ttl "3600" PHP_INI_SYSTEM
apc.cache_by_default "1" PHP_INI_ALL PHP_INI_SYSTEM u APC-u<= 3.0.12. Доступно с APC 3.0.0.
apc.filters NULL PHP_INI_SYSTEM
apc.mmap_file_mask NULL PHP_INI_SYSTEM
apc.slam_defense "1" PHP_INI_SYSTEM Dostupno sa APC 3.0.0. Prije APC 3.1.4, zadana vrijednost "0" (onemogućeno).
apc.file_update_protection "2" PHP_INI_SYSTEM Dostupno sa APC 3.0.6.
apc.enable_cli "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.7.
apc.max_file_size "1M" PHP_INI_SYSTEM Dostupno sa APC 3.0.7.
apc.use_request_time "1" PHP_INI_ALL Dostupno sa APC 3.1.3.
apc.stat "1" PHP_INI_SYSTEM Dostupno sa APC 3.0.10.
apc.write_lock "1" PHP_INI_SYSTEM Dostupno sa APC 3.0.11.
apc.report_autofilter "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.11.
apc.serializator "zadano" PHP_INI_SYSTEM Dostupno sa APC 3.1.0.
apc.include_once_override "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.12.
apc.rfc1867 "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.13.
apc.rfc1867_prefix "upload_" PHP_INI_SYSTEM
apc.rfc1867_name "APC_UPLOAD_PROGRESS" PHP_INI_SYSTEM
apc.rfc1867_freq "0" PHP_INI_SYSTEM
apc.rfc1867_ttl "3600" PHP_INI_SYSTEM Dostupno sa APC 3.1.1.
apc.localcache "0" PHP_INI_SYSTEM
apc.localcache.size "512" PHP_INI_SYSTEM Dostupno u APC 3.0.14 - 3.1.11.
apc.coredump_unmap "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.16.
apc.stat_ctime "0" PHP_INI_SYSTEM Dostupno sa APC 3.0.13.
apc.preload_path NULL PHP_INI_SYSTEM Dostupno sa APC 3.1.1.
apc.file_md5 "0" PHP_INI_SYSTEM Dostupno sa APC 3.1.1.
apc.canonicalize "1" PHP_INI_SYSTEM Dostupno sa APC 3.1.1.
apc.lazy_functions 0 PHP_INI_SYSTEM Dostupno sa APC 3.1.3.
apc.lazy_classes 0 PHP_INI_SYSTEM Dostupno sa APC 3.1.3.
Za detaljan opis PHP_INI_* konstanti, pogledajte odjeljak Gdje se mogu postaviti opcije konfiguracije.

Kratko objašnjenje konfiguracijskih direktiva.

Ako instalirate apc.enabled postavljeno na 0, APC neće biti omogućen. Ovo je korisno kada je APC statički omogućen u PHP-u i ne postoje druge opcije za onemogućavanje njegove upotrebe. Ako je APC napravljen kao DSO, možete jednostavno komentarisati liniju proširenje V php.ini.

Apc.shm_segments cijeli broj

Broj segmenata dijeljene memorije dodijeljenih za keš memoriju. Ako je APC iskoristio svu dostupnu zajedničku memoriju i apc.shm_size koliko god sistem dozvoljava, povećanje ovog parametra može pomoći.

Apc.shm_size string

Veličina segmenta dijeljene memorije, specificirana u kratkom zapisu (pogledajte ovaj FAQ). Podrazumevano, neki sistemi (uključujući većinu BSD varijanti) ograničavaju ovu vrijednost na izuzetno malu vrijednost.

Apc.shm_strings_buffer string

Količina memorije dodijeljena dijeljenoj keš stringovima koju koriste interni APC procesi. Veličina mora biti završena sufiksom M ili G kako bi se označili megabajti, odnosno gigabajti. Korištenje ove opcije može smanjiti memorijski otisak PHP-FPM radnih procesa, budući da će isti nizovi biti pohranjeni u memoriju samo jednom i mogu ih koristiti svi radni procesi.

Apc.optimization cijeli broj

Nivo optimizacije. Nula onemogućava optimizaciju. Što je ova vrijednost veća, to će se koristiti agresivnija optimizacija. Ne očekujte veliko povećanje brzine. Ovo je eksperimentalna funkcionalnost.

Apc.num_files_hint cijeli broj

Nagoveštaj o broju jedinstvenih fajlova koji se koriste na vašoj veb lokaciji. Postavite je na nulu ili je nemojte navesti uopće ako niste sigurni. Ova postavka je korisna kada imate više hiljada datoteka.

Apc.user_entries_hint cijeli broj apc.file_update_protection cijeli broj

Kada se datoteka promijeni u hodu, to bi se trebalo dogoditi na atomski način. To jest, prvo se mora upisati u privremenu datoteku, a zatim premjestiti ( mv) na svoju ciljnu poziciju. Mnogi uređivači teksta k.č, tar a drugi to ne rade. Ovo može dovesti do toga da se datoteka traži (i kešira) dok se piše. Postavke apc.file_update_protection postavlja kašnjenje keširanja za potpuno nove datoteke. Zadana vrijednost je 2 sekunde. To znači da ako vremenska oznaka modifikacije datoteke ( mtime) kaže da ako je prošlo manje od 2 sekunde od izmjene datoteke, neće biti keširana. Nesretna osoba koja pokuša pristupiti poluspremljenoj datoteci će doživjeti čudno ponašanje, ali barem neće dugo trajati. Ako se sve datoteke web servera ažuriraju atomski, korištenjem metoda kao što su rsync(koji se ispravno ažurira), onda se ovo ponašanje može onemogućiti postavljanjem ovog parametra na nulu. Ako je sistem I/O preopterećen, neka ažuriranja mogu potrajati više od dvije sekunde i ovu postavku treba povećati u skladu s tim.

Apc.enable_cli cijeli broj

Više za testiranje i otklanjanje grešaka. Ova postavka dozvoljava APC za CLI verziju PHP-a. U normalnom radu, pokretanje APC-a, koji će kreirati, puniti i uništavati keš svaki put kada pokrenete skriptu u konzoli, neće biti najbolja ideja. Ali za potrebe testiranja i otklanjanja grešaka, možete lako omogućiti APC za CLI.

Apc.max_file_size cijeli broj

Ne kešira datoteke veće od veličine određene ovom postavkom. Podrazumevano je 1M.

Apc.stat cijeli broj

Budite oprezni kada mijenjate ovu postavku. Ovo je podrazumevano omogućeno, što dovodi do toga da APC proverava datoteke skripte na svaki zahtev da vidi da li su izmenjene. Ako su promijenjeni, bit će ponovo kompajlirani i ponovo keširani. Ako onemogućite ovu postavku, tada APC neće izvršiti takvu provjeru, a ako je datoteka već keširana, a zatim promijenjena, nova verzija neće ući u keš memoriju. Recachiranje će zahtijevati ponovno pokretanje web servera. Imajte na umu da web serveri konfigurisani da koriste FastCGI možda neće obrisati keš memoriju kada se ponovo pokrenu. U industrijskim okruženjima u kojima se promjene datoteka događaju vrlo rijetko, onemogućavanje ove opcije može značajno poboljšati performanse.

Za datoteke koje se učitavaju putem uključenog/potrebnog, ova opcija radi odlično, ali imajte na umu da ako uključite datoteku u relativnu putanju (na Unixu, bilo koja putanja koja ne počinje sa /), APC će provjeriti jedinstvenost. Ako se koriste apsolutne putanje, APC će preskočiti ovu provjeru i koristiti apsolutnu putanju kao jedinstveni identifikator datoteke.

Apc.write_lock boolean

Na jako opterećenim serverima, kada se server pokrene, ili kada se mnogo datoteka modificira u isto vrijeme, APC može pokušati kompajlirati i keširati istu datoteku više puta u isto vrijeme. Zaključavanje pisanja osigurava da će samo jedan proces pokušati kompajlirati i keširati nekeširanu datoteku. Drugi procesi koji trebaju koristiti ovu datoteku koristit će njenu nekeširanu verziju, umjesto da čekaju da se pojavi u kešu.

Apc.report_autofilter boolean

Zapisuje sve skripte koje su isključene iz keširanja zbog ranih ili kasnih problema s povezivanjem.

Apc.serializer string

Kaže APC-u da koristi serijalizator treće strane.

Apc.include_once_override boolean

Optimizira pozive include_once I zahtijevaju_jednom kako biste spriječili skupe sistemske pozive.

Pažnja

Ova funkcionalnost je EKSPERIMENTALNO. Ponašanje ove direktive, njen naziv i njena dokumentacija mogu se promijeniti bez prethodne najave u budućim verzijama APC-a. Koristite ga na vlastitu odgovornost.

Apc.rfc1867 boolean

Presretač toka preuzimanja datoteka RFC1867 dostupan je samo u APC-u ako je izgrađen sa PHP 5.2.0 ili novijim. Ako je dozvoljeno, onda svaka datoteka učitana na server koja sadrži u obrascu, prije polja datoteke, polje s imenom APC_UPLOAD_PROGRESS, će prisiliti APC da automatski kreira prilagođeni unos u keš memoriji kao što je upload_ ključ, Gdje ključ je vrijednost polja APC_UPLOAD_PROGRESS.

Zapamtite da je skriveno polje APC_UPLOAD_PROGRESS mora ići u polje sa fajlom, inače će rad biti netačan.

Imajte na umu da praćenje preuzimanja datoteke nije bezbedno za niti, tako da ako tokom prvog preuzimanja postoji novi sa istim ključem, praćenje prvog će biti zaustavljeno.

Zapiši to stopa bit će dostupno samo kada se završe sva trenutna preuzimanja.

Primjer #1 Primjer korištenja apc.rfc1867

print_r (apc_fetch ( "upload_ $_POST [ APC_UPLOAD_PROGRESS ] " ));
?>

Rezultat pokretanja ovog primjera bit će otprilike ovako:

Niz ( => 1142543 => 1142543 => 1828068.8 => test => datoteka => /tmp/php8F => 0 => 1)

Apc.rfc1867_prefix string

Ključni prefiks koji se koristi u unosu u predmemoriji korisnika kreiranom funkcijom praćenja napretka preuzimanja rfc1867.

Apc.rfc1867_name string

Određuje ime za skriveno polje obrasca koje će omogućiti proces preuzimanja APC-a i navesti sufiks ključa za predmemoriju korisnika.

Apc.rfc1867_freq string

Učestalost kojom će se korisnikov unos u keš memoriju ažurirati tokom preuzimanja datoteke. Može se navesti ili kao postotak ili navođenjem veličine u bajtovima. Po želji možete koristiti sufikse "k", "m" I "g"(neosjetljivo na velika i mala slova) za kilobajte, megabajte i gigabajte, respektivno. Ako navedete nulu, ažuriranja će se dogoditi što je brže moguće, ali to može usporiti vrijeme učitavanja.

Apc.rfc1867_ttl cijeli broj

TTL za rfc1867 zapise.

Apc.localcache boolean

Omogućuje neblokirajuće keš memorije lokalnog procesa, što smanjuje količinu blokiranja tokom upisivanja u predmemoriju.

Apc.localcache.size cijeli broj

Veličina lokalne keš memorije procesa trebala bi biti prilično velika, otprilike polovina apc.num_files_hint .

Apc.coredump_unmap boolean

Omogućava APC-u da presreće signale kao što je SIGSEGV, koji zapisuje coredump kada se izda. Kada ovi signali budu primljeni, APC će pokušati osloboditi svu zajedničku memoriju kako je ne bi uključio u coredump. Ova postavka može povećati stabilnost sistema kada je primljen kritični signal i APC je konfigurisan da koristi veliku količinu memorije.

Pažnja

Ova karakteristika je potencijalno opasna. Oslobađanje segmenata dijeljene memorije kada se primi kritični signal može rezultirati nepredvidivim ponašanjem.

Komentar:

Iako neki kerneli pružaju mogućnost ignorisanja nekih segmenata dijeljene memorije prilikom pisanja osnovne datoteke, ove implementacije također mogu zanemariti važne memorijske segmente kao što je Apache semafor.

apc.stat_ctime cijeli broj

Provjerite po ctime-u da biste izbjegli probleme uzrokovane programima kao što su svn ili rsync, pazeći da se inode nije promijenio od posljednjeg prikupljanja statistike. APC obično provjerava samo mtime.

Apc.canonicalize bool

Ako je onemogućeno, relativne staze se pretvaraju u kanonske u načinu rada bez statistike. Ako je omogućeno, tada se datoteke povezane putem omotača toka neće keširati, jer realpath() ne podržava stream omote.

Apc.preload_path string

Opciono. Određuje putanju koju APC koristi za učitavanje keširanih podataka tokom pokretanja.

Apc.use_request_time bool

Koristite vrijeme početka SAPI zahtjeva za TTL.

Apc.file_md5 bool

Napišite md5 hešove datoteka.

Apc.lazy_functions cijeli broj

Omogućava lijeno učitavanje funkcija.

Apc.lazy_classes cijeli broj

Omogućava lijeno učitavanje klasa.

prije 10 godina

Gornji primjer koda apc.rfc1867 je malo brz i labav za one koji rade u okruženjima u kojima APC RFC1867 može ili ne mora biti dostupan. Ovo je malo ekspresivnije:

// ako imamo PHP i APC
$havePHP = (1 === version_compare (PHP_VERSION, "5.2.0" ) ? true : false );
$haveAPC = (extension_loaded ("apc" ) && 1 === version_compare (phpversion ( "apc"), "3.0.13" ) ? true : false );
if ($havePHP && $haveAPC) (
// ako je APC i praćenje prijenosa omogućeno
if (ini_get ("apc.enabled" ) && ini_get ("apc.rfc1867" )) (
// dobiti statistiku
$key = ini_get ("apc.rfc1867_prefix") . $_REQUEST["apcid"];
$stats = apc_fetch($key);
}
}