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.
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. |
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.
apc.stat_ctime cijeli brojKomentar:
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.
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.
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. |
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.
apc.stat_ctime cijeli brojKomentar:
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.
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);
}
}