APC continua batendo

3

Estamos executando o PHP 5.3.8 com o APC 3.1.9 e estamos usando o cache opcode, assim como o cache do usuário. Atualmente, estamos enfrentando falhas regulares quando o tamanho do cache aumenta. Parece algum tipo de vazamento de memória no APC, porque os valores em Cached Files e Cached Variables em tamanho não se somam ao tamanho total do cache. O tamanho total do cache é muito maior, como 1 GB, enquanto os valores adicionados fazem algo como 400 MB.

Isto é o que o log de mensagens indica:
    Dec 19 10:17:54 quarto kernel: pid 97940 (httpd), uid 1004: saiu no sinal 11 (núcleo despejado)

Então eu inspecionei o coredump com o gdb:

(gdb) backtrace  
   #0  0x000000080202cc3c in zend_hash_index_find (ht=0x805251ef0, h=34490315800, pData=0x7fffffffc378) at      /usr/local/directadmin/custombuild/php-5.3.8/Zend/zend_hash.c:983  
   #1  0x0000000805132637 in my_copy_zval () from /usr/local/lib/php/extensions/no-debug-non-zts-20090626/apc.so  
   #2  0x00000008051322fb in my_copy_zval_ptr () from /usr/local/lib/php/extensions/no-debug-non-zts-20090626/apc.so  
  #3  0x0000000805133aea in my_copy_hashtable_ex () from /usr/local/lib/php/extensions/no-debug-non-zts-20090626/apc.so  

O número da linha (983) em zend_hash.c corresponde a uma ação (p = ht- > arBuckets [nIndex];) onde ele endereça uma chave em uma hashtable que aparentemente não existe mais. Isso mais ou menos suporta minha teoria de um vazamento de memória em algum lugar, onde o cache apc se enche de informações ilegais ...

Alguém tem uma pista?

    
por Dylan 19.12.2011 / 11:48

2 respostas

4

Depois de trocar todas as chamadas apc_store com apc_add, o problema com a memória 'zombie' desapareceu. Provavelmente tem algo a ver com uma condição de corrida com apc_fetch e apc_store, conforme discutido no link .

É aconselhável usar o apc_add, especialmente essas chamadas são geradas pelo usuário.

    
por 02.01.2012 / 15:53
1

Estamos vendo o mesmo problema aqui com vazamentos aleatórios de memória, neste caso com as informações que você forneceu eu criaria um bug e a partir daí você tem a opção de aguardar uma correção, corrigir o código ou contornar o problema.

Observe também que eu só vi isso ocorrendo com o uso do cache do USER, e não opcode, eu compensei isso aqui usando o memcache (e se usando o Zend framework a mudança para o aplicativo é bastante fácil).

    
por 19.12.2011 / 13:31