Время от времени я получаю это странное предупреждение. Обычно он перегружается на страницу. Что это значит. Я googled, но безрезультатно.
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 не достигнет. Установите значение «0», чтобы отключить эту функцию.
Мы получаем сообщения «Запись GC-кэша«% s »(dev =% d ino =% d) была включена в gc-list за% d секунд» или «Запись GC-кэша»% s'was на gc-list за% d секунд » в этом условии:
(gc_sec > cache->gc_ttl) && (dead->value->ref_count > 0)
Первое условие означает, что элемент был удален позже, чем apc.gc_ttl секунд назад, и его все еще в списке сборщиков мусора. Seconds condition означает, элемент все еще ссылается.
например, когда процесс неожиданно умер, ссылка не уменьшается. Первые apc.ttl секунд активны в кэше APC, а затем удаляются (следующий элемент не попадает в этот элемент). Теперь элемент находится в списке сборщиков мусора (GC) и выполняется время ожидания apc.gc_ttl. Когда apc.gc_ttl меньше (теперь – item_deletion_time), предупреждение записывается, и элемент полностью очищается.
Попробуйте проверить свои журналы (веб-сервер, php, system / kernel) на критические ошибки, например, php, веб-сервер segfault.