有时,我收到这个奇怪的警告信息。它通常在页面重新加载。那是什么意思。我谷歌搜索,但无济于事。什么是神秘的GC缓存条目意味着
Warning: include(): GC cache entry '/.../...class.php' (dev=2049 ino=37120489) was on gc-list for 3840 seconds in /.../...class.php on line 111
有时,我收到这个奇怪的警告信息。它通常在页面重新加载。那是什么意思。我谷歌搜索,但无济于事。什么是神秘的GC缓存条目意味着
Warning: include(): GC cache entry '/.../...class.php' (dev=2049 ino=37120489) was on gc-list for 3840 seconds in /.../...class.php on line 111
当然,这个问题来自APC,包apc-3.1.6-r1的源代码。当项目被插入到用户缓存或文件缓存中时,该函数被调用。
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配置(http://cz.php.net/manual/en/apc.configuration.php#ini.apc.gc-ttl)
apc.gc_ttl integer
的秒的高速缓存条目可保留在垃圾收集列表上的号码。如果服务器进程在执行缓存的源文件时死机,则此值提供失效保护;如果该源文件被修改,则直到达到此TTL时,为旧版本分配的内存才会被回收。设置为零以禁用此功能。我们得到消息“GC缓存条目'%s'(dev =%d ino =%d)在gc-list上为%d秒”或者“GC缓存条目'%s'在gc-list上在这种情况下%d秒”:
(gc_sec > cache->gc_ttl) && (dead->value->ref_count > 0)
首先的条件是指,项目被删除后即可apc.gc_ttl秒前其仍处于垃圾回收器列表。秒条件表示,项目仍被引用。
例如当过程意外死亡时,参考值不会降低。第一个apc.ttl秒在APC缓存中处于活动状态,然后被删除(这个项目没有下一个命中)。现在项目在垃圾收集器列表(GC)上,并且apc.gc_ttl超时正在运行。当apc.gc_ttl小于(now - item_deletion_time)时,写入警告并且项目完全刷新。
尝试检查您的日志(Web服务器,PHP,系统/内核)为严重错误,例如PHP,Web服务器段错误。
我猜它与APC有关吗?您是否安装了APC? – tawfekov 2011-01-11 11:05:53