Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

APC öntanımlı ayarları çoğu kurulum için yeterli olsa da daha fazla başarım için aşağıdaki değiştirgelerde ince ayarlar yapmak gerekebilir.

Başlıca iki önemli ayara karar vermek gerekir. Birincisi, APC için ne kadar paylaşımlı bellek ayıracaksınız, ikincisi APC'nin her istekte dosya değiştirilmiş mi diye bakmasını istiyor musunuz? Bu ayarların ini yönergeleri sırası ile apc.shm_size ve apc.stat'dır.

Çalışır halde bir sunucuda, eklenti ile birlikte gelen apc.php betiğini sunucunun belge kök dizinindeki bir yere koymak ve tarayıcıdan çağırmak önbellek ile ilgili ayrıntılı bilgiler sağlayacaktır. Eğer PHP kurulumunda GD desteği varsa grafikler de görüntülenecektir. Denetlenmesi gereken ilk şey önbelleğe alınan dosyalardır. Önbelleğin çalıştığını varsayar isek Önbellek tam dolma sayısı'na dikkat etmek gerekir. Bu sayı önbelleğin dolup son apc.ttl saniyede erişilmeyen girdilerin kaç kez zorla temizlenmek zorunda kalındığını gösterir. Ayarlarınızı bu sayıyı küçüktecek şekilde yapmanız gerekir. Eğer sürekli önbelleğinizi dolduruyor iseniz bu önbellek başarımınızı kötü etkileyecektir. APC için daha fazla bellek ayırmanız veya apc.filters kullanarak daha az betiği önbelleğe almanız sorunu çözebilir.

APC, mmap (Memory Mapping) desteği ile derlendiğinde sadece bir bellek segmenti kullanır. SHM (SysV Shared Memory) desteği ile derlendiğinde ise çok sayıda bellek segmenti kullanır. MMAP için azami sınır yoktur, SHM için azami sınır /proc/sys/kernel/shmmax içinde belirtilmiştir.Genelde MMAP desteği önerilir, çünkü HTTP sunucusu başlatıldığında bellek daha çabuk düzenlenir ve başlatma sırasındaki bellek ayırma etkilerini azaltır.

APC Yapılandırma Seçenekleri
İsim Öntanımlı Değişlik Yeri Sürüm Bilgisi
apc.enabled "1" PHP_INI_SYSTEM APC 2'de PHP_INI_SYSTEM. APC <= 3.0.12'de PHP_INI_ALL.
apc.shm_segments "1" PHP_INI_SYSTEM  
apc.shm_size "32M" PHP_INI_SYSTEM  
apc.shm_strings_buffer "4M" PHP_INI_SYSTEM APC 3.1.4 ve sonrasında kullanılabilir.
apc.optimization "0" PHP_INI_ALL APC 2'de PHP_INI_SYSTEM. APC 3.0.13 sürümünde çıkartılmıştır.
apc.num_files_hint "1000" PHP_INI_SYSTEM  
apc.user_entries_hint "4096" PHP_INI_SYSTEM APC 3.0.0'dan beri kullanılabilmektedir.
apc.ttl "0" PHP_INI_SYSTEM APC 3.0.0'dan beri kullanılabilmektedir.
apc.user_ttl "0" PHP_INI_SYSTEM APC 3.0.0'dan beri kullanılabilmektedir.
apc.gc_ttl "3600" PHP_INI_SYSTEM  
apc.cache_by_default "1" PHP_INI_ALL APC <= 3.0.12'de PHP_INI_SYSTEM. APC 3.0.0'dan beri kullanılabilmektedir.
apc.filters NULL PHP_INI_SYSTEM  
apc.mmap_file_mask NULL PHP_INI_SYSTEM  
apc.slam_defense "1" PHP_INI_SYSTEM APC 3.0.0'dan beri kullanılabilmektedir. APC 3.1.4 öncesinde öntanımlı değer "0" (iptal) idi.
apc.file_update_protection "2" PHP_INI_SYSTEM APC 3.0.6 ve sonrasında kullanılabilir.
apc.enable_cli "0" PHP_INI_SYSTEM APC 3.0.7 ve sonrasında kullanılabilir.
apc.max_file_size "1M" PHP_INI_SYSTEM APC 3.0.7 ve sonrasında kullanılabilir.
apc.use_request_time "1" PHP_INI_ALL APC 3.1.3 ve sonrasında kullanılabilir.
apc.stat "1" PHP_INI_SYSTEM APC 3.0.10 ve sonrasında kullanılabilir.
apc.write_lock "1" PHP_INI_SYSTEM APC 3.0.11 ve sonrasında kullanılabilir.
apc.report_autofilter "0" PHP_INI_SYSTEM APC 3.0.11 ve sonrasında kullanılabilir.
apc.serializer "default" PHP_INI_SYSTEM APC 3.1.0 ve sonrasında kullanılabilir.
apc.include_once_override "0" PHP_INI_SYSTEM APC 3.0.12 ve sonrasında kullanılabilir.
apc.rfc1867 "0" PHP_INI_SYSTEM APC 3.0.13 ve sonrasında kullanılabilir.
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 APC 3.1.1 ve sonrasında kullanılabilir.
apc.localcache "0" PHP_INI_SYSTEM APC 3.0.14 - 3.1.11 arasında kullanılabilir.
apc.localcache.size "512" PHP_INI_SYSTEM APC 3.0.14 - 3.1.11 arasında kullanılabilir.
apc.coredump_unmap "0" PHP_INI_SYSTEM APC 3.0.16 ve sonrasında kullanılabilir.
apc.stat_ctime "0" PHP_INI_SYSTEM APC 3.0.13 ve sonrasında kullanılabilir.
apc.preload_path NULL PHP_INI_SYSTEM APC 3.1.1 ve sonrasında kullanılabilir.
apc.file_md5 "0" PHP_INI_SYSTEM APC 3.1.1 ve sonrasında kullanılabilir.
apc.canonicalize "1" PHP_INI_SYSTEM APC 3.1.1 ve sonrasında kullanılabilir.
apc.lazy_functions 0 PHP_INI_SYSTEM APC 3.1.3 ve sonrasında kullanılabilir.
apc.lazy_classes 0 PHP_INI_SYSTEM APC 3.1.3 ve sonrasında kullanılabilir.
PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

apc.enabled boolean

APC'yi etkisiz duruma getirmek için apc.enabled 0 olarak ayarlanabilir. Bu APC durağan bir şekilde PHP içine derlendi ise özellikle yararlıdır, zaten bu şekilde derlendi ise etkisiz kılmanın başka bir yolu yoktur (DSO olarak derlendi ise php.ini içindeki ilgili extension satırı çıkartılabilir).

apc.shm_segments integer

Derleyici önbelleği için ayrılan paylaşılan bellek bölümlerinin sayısı. Eğer APC paylaşılan belleğin dışına taşıyorsa ve apc.shm_size için sisteminizin izin verdiği en yüksek değeri verdiyseniz bu değeri yükseltmeyi deneyebilirsiniz.

apc.shm_size string

MB olarak her bir paylaşılan bellek kesiminin boyutu. SSS'de açıklanan kısa gösterimle belirtilir. Öntanımlı olarak bazı sistemler (çoğu BSD türevi dahil) paylaşılan bellek kesimi için çok düşük sınırlara sahiptir.

apc.shm_strings_buffer string

APC tarafından dahili olarak dizgeler için paylaşımlı bellek olarak kullanılacak bellek miktarı. Değerinden sonunda megabaytlar için M, gigabatlar için G kullanılabilir. Bu seçeneğin etkin olması her PHP-FPM modülü başına kullanılan bellek miktarını düşürür. Aksi takdirde dizgeler her PHP-FPM modülü için değil sadece bir kere saklanacaktır.

apc.optimization integer

Eniyileme seviyesi. Sıfır eniyilemeyi iptal eder, daha yüksek değerler daha etkili eniyileme sağlar. Hız artışlarının pek fazla olmamasını bekleyin, deneyseldir.

apc.num_files_hint integer

HTTP sunucundan dahil edilecek veya istenecek bağımsız kaynak dosyalarının sayısı ile ilgili bir "ipucu". Emin değilseniz sıfıra ayarlayın veya ihmal edin; Bu ayar binlerce kaynak dosyası olan sitelerde yararlıdır.

apc.user_entries_hint integer

Depolanacak kullanıcı önbellek değişkenlerinin sayısı ile ilgili bir "ipucu" olup apc.num_files_hint'e benzer. Emin değilseniz sıfıra ayarlayın veya ihmal edin.

apc.ttl integer

Bir önbellek girdisinin bellek yuvasında kullanılmadan kalma süresidir, saniye olarak verilir. Sıfır olarak bırakmak eski girdilerin sürekli olarak bellekte kalmasına ve yeni girdi alınmamasına neden olacaktır.

apc.user_ttl integer

Bir önbellek girdisinin bellek yuvasında kullanılmadan kalma süresidir, saniye olarak verilir. Sıfır olarak bırakmak eski girdilerin sürekli olarak bellekte kalmasına ve yeni girdi alınmamasına neden olacaktır. Önbellekte yer kalmaması durumunda ttl sıfır ise önbellek tamamen silinir; ttl sıfırdan büyük ise sadece süresi dolmuş girdiler silinmeye çalışılır.

apc.gc_ttl integer

Bir önbellek girdisinin bellek yuvasında kullanılmadan kalma süresidir, saniye olarak verilir. Sıfır olarak bırakmak eski girdilerin sürekli olarak bellekte kalmasına ve yeni girdi alınmamasına neden olacaktır. Önbellekte yer kalmaması durumunda ttl sıfır ise önbellek tamamen silinir; ttl sıfırdan büyük ise sadece süresi dolmuş girdiler silinmeye çalışılır.

apc.cache_by_default boolean

Öntanımlı olarak etkindir ("On"), fakat sadece olumlu süzgece uyan dosyaların önbelleğe alınması için etkisiz ("Off") hale getirilerek, apc.filters ile birlikte kullanılabilir.

apc.filters string

Genişletilmiş POSIX düzenli ifadelerine uyan virgülle ayrılmış dizge değerlerin listesidir. Eğer kaynak dosya adı, listedeki herhangi bir kalıba uyarsa bu dosya önbelleğe alınmaz. Eşleştirme için include / require işlevlerine aktarılmış olan dosya adı kullanılır, mutlak yol kullanılmaz. Eğer deyimin ilk karakteri + ise, süzgeç ile eşleşen dosyalar önbelleğe alınır, - ise alınmaz. - öntanımlıdır, bu yüzden yazılmayabilir.

apc.mmap_file_mask string

Eğer --enable-mmap kullanılarak MMAP desteği ile derlendiyse, mmap hafıza bölgesinin dosya mı yoksa paylaşımlı bellek desteği ile mi hazırlandığını belirlemek için mmap modülüne aktarılacak mktemp tarzı dosya maskesidir. Doğrudan dosya destekli mmap için /tmp/apc.XXXXXX'a benzer şekilde ayarlayın (tam olarak 6 adet X). POSIX tarzı shm_open/mmap kullanmak için dosya kalıbına .shm koyun. Örnek olarak /apc.shm.XXXXXX. Ayrıca /dev/zero şeklinde ayarlanarak, anonim mmap bellek için çekirdeğin /dev/zero arabirimi kullanılabilir. Tanımsız olarak bırakmak anonim mmap'e zorlayacaktır.

apc.slam_defense integer

Çok yoğun sunucularda, sunucuyu başlattığınızda veya dosyaları değiştirdiğinizde, aynı zamanda, aynı dosyayı önbelleğe almaya çalışan birçok sürecin birbiriyle yarışmasına neden olabilirsiniz. Bu ayar önbelleğe alınmamış bir dosya üzerinde süreçlerin es geçme yüzdesini ayarlar. Diğer bir deyişle tek bir sürecin bir dosyayı önbelleğe almama olasılığı olarak düşünebilirsiniz. Örnek olarak, apc.slam_defense'i 75'e ayarlamak %75 olasılıkla sürecin önbellekleme yapmayacağını gösterir. Bu yüzden yüksek değerler daha iyi savunma sağlar. Bu özelliği iptal etmek için 0 olarak ayarlayın.

Sonraki sürümlerde apc.write_lock ile değiştirilmiştir.

apc.file_update_protection integer

Etkin kullanılan bir HTML sunucusunda bir dosyayı değiştirdiğiniz zaman bunu çok kısa atomik bir zaman diliminde yapmalısınız, geçici bir dosyaya yazma işlemi yapılır ve hazır olduğunda özgün dosya adıyla yeniden isimlendirilir (mv). Çoğu metin düzenleyici, cp, tar ve diğer bu türden programlar bu şekilde çalışmaz. Metin düzenleyicileri dosyayı düzenlerken, APC, dosyanın hazır olmayan halinin, önbelleğe alınmasına yol açabilir. apc.file_update_protection ayarı yeni dosyaların önbelleklemesi üzerinde bir geciktirme sağlar. Varsayılan değeri 2 saniyedir. Bu dosyalara erişildiğinde, değişiklik zaman damgası (mtime) 2 saniyeden küçükse önbelleğe alınmayacakları anlamına gelir. Bu tür yarım yazılmış dosyalara erişen ziyaretçiler uygulamalarda tuhaf durumlar ile karşılaşabilir, en azından bu tuhaflıklar kalıcı değildir. Eğer dosyalarınızın güncellemesini atomik zamanlama ile yaptığınızdan eminseniz, rsync bunu doğru bir şekilde yapar, bu koruma mekanizmasını 0'a ayarlayarak kapatabilirsiniz. Eğer yüksek girdi-çıktı nedeniyle 2 saniyeden daha uzun süren güncelleme süreçlerine sahipseniz bunu bir miktar arttırmak isteyebilirsiniz.

apc.enable_cli integer

Çoğunlukla deneme ve hata arama için kullanılır. Bunu ayarlamak PHP'nin CLI sürümü için APC'nin yetkilendirilmesini sağlar. Normalde her CLI isteği için APC önbelleğinin yeniden oluşturulmasını istemezsiniz, fakat çeşitli deneme senaryoları için APC'nin kolay bir şekilde yetkilendirilmesi yararlı olabilir.

apc.max_file_size integer

Bu değerden daha büyük dosyaların önbelleğe alınmasını engeller, varsayılan değeri 1M'dır.

apc.stat integer

Bu ayarı değiştirirseniz dikkatli olun, ayarın varsayılan durumunda APC her istekte betik dosyasının değiştirilme durumu denetlenecektir. Eğer betik değiştirildi ise yeni betiği işleyecek ve önbelleğe alacaktır. Eğer bu ayarı etkisiz duruma getirirseniz APC betiği değiştirilme durumu için denetlemeyecektir. Bu da betik üzerindeki değişikliklerin etkin olması için HTML sunucunuzu yeniden başlatmanızı gerektirir. Ürün ortamında kullanılan bir sunucuda nadiren kod değiştirmeleri yapılır, bu yüzden etkisiz duruma getirilmesi önemli başarım artışlarına neden olabilir.

Betiğe dışardan dahil edilen (include/require) dosyalar için de bu seçenek geçerlidir, fakat eğer göreli dosya yolları (Unix üzerinde / ile başlamayan herhangi bir yol) kullanarak dahil ediyorsanız APC dosyayı benzersiz olarak diğerlerinden ayırabilmek için denetlemek zorundadır. Eğer mutlak yol kullanıyorsanız APC bu denetimi atlayacak ve dosya için benzersiz tanımlayıcı olarak mutlak yolu kullanacaktır.

apc.write_lock boolean

Yoğun sunucularda, sunucu başlatıldığında veya birçok dosya değiştirildiğinde, bütün süreçlerinizin aynı dosyaları derleyip önbelleğe almaya çalışması gibi bir durumla karşılabilirsiniz, write_lock etkin durumda iken önbelleğe alınmamış bir betiği sadece bir süreç işleyecektir diğer süreçler kilitli durumun açılmasını beklemek yerine önbelleğe alınmamış bir betiği çalıştıracaklardır.

apc.report_autofilter boolean

Erken/Geç bağlama konuları nedeni ile özdevinimli olarak hariç bırakılan betiklerin raporlanmasını sağlar.

apc.serializer string

Kullanılacak üçüncü parti sıralandırıcıyı yapılandırmak için kullanılır.

apc.include_once_override boolean

include_once ve require_once çağrılarında eniyileştirme sağlar ve pahalı sistem çağrılarının kullanımından sakınır.

Uyarı

Bu seçenek DENEYSELdir. Bu seçeneğin ismi, davranışı ve belgelemesi APC'nin ileri sürümlerinde bilgi verilmeksizin değiştirilebilir. Bu seçeneği kullanma riski size aittir.

apc.rfc1867 boolean

RFC1867 dosya yükleme aşamalarını kancalama yalnızca APC'yi PHP 5.2.0 veya sonraki sürümlerde derlediyseniz geçerlidir. Etkin duruma getirildiğinde, bir yükleme formunda dosya alanından önce APC_UPLOAD_PROGRESS alanına rastlandığında özdevinimli olarak upload_anahtar içeren bir kullanıcı önbelleği oluşturulur. Burada anahtar, form girdisindeki APC_UPLOAD_PROGRESS elemanının değeridir.

Şuna dikkat edin: APC_UPLOAD_PROGRESS ile belirtilen gizli alan dosya alanından önce gelmelidir, yoksa karşıya yükleme işlemi gerektiği gibi yürümez.

Karşıya dosya yükleme izlemesi, evre korumalı değildir, bu yüzden yeni yapılan yüklemeler bir önceki devam eden izlemeyi devre dışı bırakır.

Şuna dikkat edin: hız sadece tüm dosya aktarımları tamamlandığında kullanılabilir.

Örnek 1 - Bir apc.rfc1867 örneği

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

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [total] => 1142543
    [current] => 1142543
    [rate] => 1828068.8
    [filename] => test
    [name] => file
    [temp_filename] => /tmp/php8F
    [cancel_upload] => 0
    [done] => 1
)

apc.rfc1867_prefix string

rfc1867 karşıya dosya yükleme işlevselliğince üretilen kullanıcı önbellek girdisi için kullanılacak anahtar öneki.

apc.rfc1867_name string

APC karşıya dosya yükleme aşamalarını etkin hale getiren gizli form girdi adını ve kullanıcı önbellek sonekini bildirir.

apc.rfc1867_freq string

Karşıya yükleme işlemleri için kullanıcı önbelleğinin güncellenme sıklığını belirler. Toplam dosya boyutunun belirli bir yüzdesi ya da bayt olarak boyut verilir. Boyuta seçime bağlı olarak kilobayt için 'k', megabayt için 'm', gigabayt için 'g' son ekleri ile belirtilir (büyük veya küçük harf farketmez). Sıfır olarak ayarlamak, mümkün olduğu kadar sık güncellenmesine neden olur fakat bu yükleme işlemlerininin yavaşlamasına neden olabilir.

apc.rfc1867_ttl integer

RFC1867 girdileri için TTL.

apc.localcache boolean

Yerel işlemler için gölge önbelleği etkin hale getirir, bu kilitsiz işlemler yaparak kilitlerden kaynaklanan çakışmaları azaltır.

apc.localcache.size integer

Yerel işlemlerin gölge önbellek boyutu, yeteri kadar büyük bir değere ayarlanmalıdır. Yaklaşık olarak apc.num_files_hint değerinin yarısı kadar.

apc.coredump_unmap boolean

APC'nin idaresi için, sinyal verildiği zaman çekirdek döküm dosyaları yazan SIGSEGV gibi sinyallerin işlenmesini etkin kılar. Bu sinyaller alındığı zaman, APC paylaşılan belleği kaldırarak çekirdek döküm dosyasından yeniden oluşturmayı deneyecektir. Bu ayar ölümcül sinyaller alındığı zaman büyük bir paylaşılan bellek alanı olan sistemlerde istikrarı iyi yönde etkileyebilir.

Uyarı

Bu özelliğin tehlikeli olma olasılığı yüksektir. Ölümcül bir hata meydana geldiğinde, paylaşılan belleği kaldırmak, belirsiz davranışlara neden olabilir.

Bilginize:

Bazı sistem çekirdekleri, çekirdek döküm dosyaları oluşturulurken, çeşitli paylaşılan bellek bölümlerinin dökümünü görmezden gelecek araçlar sağlasa da, bu uygulamalar önemli paylaşılan bellek bölümlerini de görmezden gelebilir, Apache puan tahtası gibi.

apc.stat_ctime integer

Düğümlerin değişmediğininden emin olmak için ctime kullanmak svn veya rsync gibi programların neden olduğu sorunları engelleyebilir. APC normalde sadece mtime ile denetim yapar.

apc.canonicalize bool

Etkin kılındığında göreli dosya yolları durumsuz kipte normalleştirilir ve akış sarmalayıcıları üzerinden kullanılan dosyalar, realpath() akış sarmalayıcıları desteklemediğinden arabelleklenemez.

apc.preload_path string

İsteğe bağlı olarak, APC'nin başlatma sırasında arabellek verisini yükleyeceği dizinin yolunu belirtmekte kullanılır.

apc.use_request_time bool

TTL için SAPI istek başlatma zamanını kullanır.

apc.file_md5 bool

Dosyalar için belirtilem md5 özeti kullanılır.

apc.lazy_functions integer

İşlevler için çılgın yüklemeyi etkinleştirir.

apc.lazy_classes integer

Sınıflar için çılgın yüklemeyi etkinleştirir.

add a note add a note

User Contributed Notes 11 notes

up
2
bishop
15 years ago
The apc.rfc1867 example code above is a little fast and loose for those running in environments where APC RFC1867 may or may not be available.  This is a little more expressive:

<?php

// if we have PHP and 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) {
   
// if APC and upload tracking is enabled
   
if (ini_get('apc.enabled') && ini_get('apc.rfc1867')) {
       
// get the stats
       
$key = ini_get('apc.rfc1867_prefix') . $_REQUEST['apcid'];
       
$stats = apc_fetch($key);
    }
}

?>
up
2
danbettles at yahoo dot co dot uk
16 years ago
To automatically cache only PHP class files named "<class name>.class.php", add the following lines to php.ini.

apc.cache_by_default = "Off"
apc.filters = "+\.class\.php$"

Notes:
- The regexp is case /sensitive/, so if, say, your project contains filenames with mixed case, you'll need something like "+\.(class|CLASS)\.(php|PHP)$".  I've tried delimiting patterns and using the "i" modifier, but that doesn't seem to work.
- Setting cache_by_default to "On" and applying the positive filter will /not/ work.

If you have more complicated requirements and, like me, you're not familiar with POSIX Extended Regular Expressions (ERE) inparticular, you may find the following link useful.  http://www.regular-expressions.info/refflavors.html
up
1
lamperz at gmail dot com
16 years ago
I'm trying to get upload progress with apc_fetch.
I founded apc_fetch always return false till the upload completed.After fews hours debug, I finally notice that my APC_UPLOAD_PROGRESS was set after the file form.

SO, You should write your form like this
<input type="hidden" id="file_id" name="APC_UPLOAD_PROGRESS" value="blablabla"/>
<input type="file" id="select_file" name="file" value="upload" onchange="parent.test();"/>

the hidden field with name="APC_UPLOAD_PROGRESS" SHOULD be ALWAYS BEFORE input type="file"
up
-1
klaus at hax dot at
11 years ago
Note: If you want to run a script on Windows with apc.enabled=1 as a scheduled task whilst another instance of php is running (like on a webserver) apparently you have to disable apc for this scheduled task, otherwise it will not run and you will have something in your error log like: PHP Fatal error: PHP Startup: apc_shm_create: shmget(0, 33554432, 658) failed: No such file or directory.

So simply execute your scheduled task with:

c:\php\php.exe -d apc.enabled=0 and all will be fine.
up
-1
d_inkubus at yahoo dot com
14 years ago
apc.include_once_override=1 can cause more problems than it solves.  If you're running into weird errors regarding relative paths, make sure this setting is off.  PHP 5.3 already implements most of the speed ups in these calls anyway.
up
-1
fusionstream [a](t) gmail.com
14 years ago
If you are getting 0kb out of 0kb for your upload progress with large files, make sure that upload_max_filesize and post_max_size are larger than the file you are uploading. As far as I can tell, apc.max_file_size does not affect it.
up
-2
neorush at gmail dot com
15 years ago
apc_fetch always returned false.  Turns out that "apc.rfc1867" was set to "0".  I added this line to my php.ini:
apc.rfc1867 = 1
but it could have certainly been changed with ini_set().  That took me way to long to figure out.
up
-2
Will
15 years ago
For anyone wondering why shm_segments is being ignored on their setup, it could be because of the following:

If you've configured APC to use memory mapped files (with the --enable-mmap option), the shm_segments setting is ignored unless you specify a file mask via the mmap_file_mask setting.

This is because APC won't attempt to create multiple anonymous files to map into memory without a mask (since it has no way of naming them sensibly). To set up multiple segments you have to give a file mask so they can be named separately.

apc.mmap_file_mask=/tmp/apc.XXXXXX

Make sure to use exactly 6 "X"s (this is the part that is changed by APC). You can place these files anywhere, they don't have to go in /tmp.

With that said, I'm not sure what the performance impact of having multiple MMAP segments would be. I'm guessing it would probably be negative so you probably don't want to do this.
up
-2
amir w of colnect dot com TIPS
14 years ago
Want to avoid segmentation with apc.shm_segments?If your linux server limits the shared memory block size and you're forced to use apc.shm_segments instead, change the setting by using (here is 512M but change it as you like):
# sysctl -w kernel.shmmax=536870912

(but if you want the change to be permanent after a restart you would have to add the following line in /etc/sysctl.conf

kernel.shmmax=536870912)

and updating apc.ini

apc.shm_segments="1"
apc.shm_size="512"


apc.stat is an extremely important setting for a production server, especially if many files are accessed on every request, which is quite normal on complicated web applications.

Always aspire to use:
apc.stat="0"
so that APC does not try to check that each and every file exists on every request you make. It also means you can update files on your server without crashing incoming requests on that time fragment. Whenever you wish to force APC to re-read all the files, simply clear the cache or restart your server.
up
-3
bas_vijfiwinkel
12 years ago
I took some time to look at the preload_path option.

At the moment of writing the preload_path option is broken because of a bug in the APC source code
which will not allow you to properly preload the cache.

The way to fix it :
Inside 'main_apc.c' in the method called 'static int apc_load_data(const char *data_file TSRMLS_DC)', the length of the key of the value that needs to be stored is determined with the following line :
key_len = strlen(key);
If I am correct this is only the length of the string itself without the null-terminator
However, "_apc_store" seems to want the length of the key string including the terminator.
If I change the line above to :
key_len = strlen(key)+1;
then the preload function works as expected.
You can also notice that 1 character is missing when looking at the user cache entries apc.php. But if you try to use that as a key then APC will not return the contents so that didn't work as a workaround.

If one is able to compile the apc library from source, then one can of course easily fix this option by changing the source code.

Files in the specified path should have the extension '.data'.
The filename itself will become the key for the data that is in that specific file.
The data in the file is a serialized string representing what you want to assign to the specific key. For example s:2:"123" will generate the string "123".
One can only specify 1 value for each key and it should be null-terminated.

It is not possible to preload PHP scripts.
Only values that one retrieved with apc_fetch can be preloaded.
up
-4
amir w of colnect dot com TIPS
14 years ago
apc.stat is an extremely important setting for a production server, especially if many files are accessed on every request, which is quite normal on complicated web applications.

Always aspire to use:
apc.stat="0"
so that APC does not try to check that each and every file exists on every request you make. It also means you can update files on your server without crashing incoming requests on that time fragment. Whenever you wish to force APC to re-read all the files, simply clear the cache or restart your server.
To Top