Bu sorun, APC, apc-3.1.6-r1 paketindeki kaynak koddan kaynaklanır. Öğe kullanıcı önbelleğine veya dosya önbelleğine eklendiğinde, bu işlev çağrılır. APC yapılandırması (http://cz.php.net/manual/en/apc.configuration.php#ini.apc.gc-ttl) Gönderen
static void process_pending_removals(apc_cache_t* cache TSRMLS_DC)
{
slot_t** slot;
time_t now;
/* This function scans the list of removed cache entries and deletes any
* entry whose reference count is zero (indicating that it is no longer
* being executed) or that has been on the pending list for more than
* cache->gc_ttl seconds (we issue a warning in the latter case).
*/
if (!cache->header->deleted_list)
return;
slot = &cache->header->deleted_list;
now = time(0);
while (*slot != NULL) {
int gc_sec = cache->gc_ttl ? (now - (*slot)->deletion_time) : 0;
if ((*slot)->value->ref_count <= 0 || gc_sec > cache->gc_ttl) {
slot_t* dead = *slot;
if (dead->value->ref_count > 0) {
switch(dead->value->type) {
case APC_CACHE_ENTRY_FILE:
apc_warning("GC cache entry '%s' (dev=%d ino=%d) was on gc-list for %d seconds" TSRMLS_CC,
dead->value->data.file.filename, dead->key.data.file.device, dead->key.data.file.inode, gc_sec);
break;
case APC_CACHE_ENTRY_USER:
apc_warning("GC cache entry '%s'was on gc-list for %d seconds" TSRMLS_CC, dead->value->data.user.info, gc_sec);
break;
}
}
*slot = dead->next;
free_slot(dead TSRMLS_CC);
}
else {
slot = &(*slot)->next;
}
}
}
apc.gc_ttl integer
bir önbellek girdisi çöp toplama listede kalabilir saniye sayısı. Bu değer, önbelleğe alınmış bir kaynak dosyayı yürütürken bir sunucu işleminin ölmesi durumunda bir hata güvenliği sağlar; Bu kaynak dosya değiştirilirse, bu TTL'ye ulaşıncaya kadar eski sürüm için ayrılan bellek geri alınmaz. Bu özelliği devre dışı bırakmak için sıfıra ayarlayın.
"GC önbellek girdisi '% s' (dev =% d ino =% d) gc listesinde% d saniye vardı" veya "GC önbellek girişi"% s ', gc listesinde Bu durumda% d saniye":
(gc_sec > cache->gc_ttl) && (dead->value->ref_count > 0)
İlk koşul araçları, öğe apc.gc_ttl saniye önce sonra sonra silinir ve hala çöp toplayıcı liste edildi. Saniye koşulu, öğeye hala başvurulmaktadır.
örn. işlem beklenmedik bir şekilde öldüğünde, referans azalmaz. İlk apc.ttl saniye APC önbelleğinde aktiftir, daha sonra silinir (bu öğenin bir sonraki vuruşu yoktur). Şimdi öğe çöp toplayıcı listesinde (GC) ve apc.gc_ttl zaman aşımı çalışıyor. Apc.gc_ttl daha az olduğunda (şimdi - item_deletion_time), uyarı yazılır ve madde tamamen temizlenir. Günlüklerinizi (web sunucusu, php, system/kernel) kritik hatalara, örn. php, web sunucusu segfault.
Bir şekilde APC'nin APC'nin kurulu olduğu ile ilgili olduğunu düşünüyorum. – tawfekov
APC (muhtemelen) bellek yetersiz. http://pecl.php.net/bugs/bug.php?id=16966 – teemitzitrone
Bu sorun giderilmiştir (uyarıdan hata ayıklamasına kadar): https://github.com/krakjoe/apcu/pull/45/files – aimfeld