Posso otimizar mais essas configurações de APC?

6

Eu gostaria de otimizar o APC um pouco mais, mas não tenho certeza de onde eu poderia fazer alguma coisa. Primeiro, aqui está a captura de tela após uma semana de execução com a configuração atual:

Agoratenhoosseguintespontosquenãotenhocerteza:

  1. Euvejocorretamentequeafragmentaçãoaconteceporqueocacheéusadocomoumcachedeusuáriotambém?
  2. Porqueabarradefragmentaçãomediz100%deapenas5.8MBquandoaloquei192MBnototal?
  3. Issoéapenasumproblemaderenderizaçãoqueocírculoem"Uso da memória" não está totalmente fechado? Porque os valores de MB abaixo se somam. (Para dizer é que o círculo parece bom depois de um reinício apenas fica assim quando o cache fica cada vez mais fragmentado.)
  4. Como a taxa de acertos é muito boa, não tenho certeza se a fragmentação é um grande problema ou não. Você acha que eu ainda posso otimizá-lo?

Estou mais interessado em responder a essas perguntas. Só então eu posso entender melhor o APC e fazer ajustes sozinho.

Algumas informações detalhadas: Neste servidor está o Drupal e o Magento em execução. O Drupal também está usando isso como um cache de usuário.

A questão para mim é como eu poderia otimizá-lo. Eu poderia alocar mais RAM, mas não tenho certeza se isso realmente ajuda muito.

ATUALIZAÇÃO: Aqui está a configuração:

; The size of each shared memory segment in MB.
apc.shm_size = 192M

; Prevent files larger than this value from getting cached. Defaults to 1M. 
apc.max_file_size = 2M

; The number of seconds a cache entry is allowed to idle in a slot in case
; this cache entry slot is needed by another entry.
apc.ttl = 3600

Como você pode ver, é bem mínimo no momento.

    
por Raffael Luthiger 18.01.2012 / 11:54

3 respostas

5

Do I see it correctly that the fragmentation happens because the cache is used as an user cache too?

Não, a fragmentação pode acontecer quando o tamanho do cache de opcode de um arquivo é alterado e ele não se encaixa na "fatia" que ele ocupava antes - sob o capô é um pouco mais complicado, mas essa é a essência.

Why does the fragmentation bar tell me 100% of only 5.8MB when I allocated 192MB in total?

Ele está lhe dizendo 100% porque, do seu espaço de cache disponível e gratuito, 100% dele está implicado na fragmentação (o que significa que a barreira à entrada para essa 'fatia' tem que estar dentro de um tamanho fragmentado).

Is this just a rendering problem that the circle under "Memory Usage" is not fully closed?

Sim, não confie nele; os valores impressos "dentro das fatias" também estão incorretos às vezes.

Since the hit rate is really good I am not sure if the fragmentation is a big problem or not. Do you think that I can still optimize it?

Absolutamente! Eu aumentaria o cache. Você pode ter uma alocação de 100 MB e ter 10 MB em cache e ainda ter 100% de taxa de hits.

Uma configuração bem-sucedida deve ter pouca poda (AKA: few to no gc) - e espaço para expansão, você deseja um pouco mais de espaço; (mais de 5MB) porque os efeitos da fragmentação "complicarão" as coisas que desejam entrar no cache.

Capture 10% de espaço livre e não fragmentado, continue monitorando e aumentando o tamanho. Também saiba que o envio de grandes quantidades de novos arquivos de código também afetará o cache.

    
por 26.01.2012 / 16:35
1

Sobre a questão 3,
Eu não posso dizer exatamente por que o círculo não está totalmente fechado, mas parece o mesmo para a minha configuração, depois de alguns dias de atividade e com 10% de fragmentação.

2,
Eu acho que é uma falha na Página de Estatísticas da APC, a minha diz "10.34% (771.7 KBytes de 7.3 MBytes em 89 fragmentos)" onde 7.3 MBytes é exatamente a quantidade de memória que deveria estar livre de acordo com as estatísticas de uso de memória. br> Se você der uma olhada em sua imagem, você vai notar que parece que está fazendo a mesma coisa lá. 5.8 de 5.8 fragmentados e 5.8 livres, então a fragmentação é de alguma forma calculada na memória livre ou os números estão errados.

Veja minha captura de tela para comparação:

    
por 23.01.2012 / 01:28
0

Você deve dar uma olhada no contador "Contagem total do cache", > 1, isso indica que você ficou sem memória para o APC; nesse caso, você ficou sem funcionar 39 vezes em 3 dias, o que parece muito.

Parece mais provável que o uso do cache do usuário esteja causando essa fragmentação do que o uso do cache do arquivo php, porque ele tende a armazenar muitos objetos diferentes, que acabam ocupando memória apenas para referenciar sua existência.

A primeira coisa que eu faço é tentar subir a memória APC alocada (com segurança, 2Go não deve ser a solução) até que a "contagem total do cache" não aconteça mais, então eu me concentraria no número de objetos empurrados cache do usuário.
Se você puder limitar o número deles (em vez de seu tamanho), seria ótimo, mas você poderia explorar diferentes possibilidades, como o memcache, para armazenar o cache do usuário e dedicar APC ao armazenamento em cache de arquivos.

Postar sua configuração atual da APC ajudaria muito, pois poderíamos dar uma olhada nos valores de TTL, que também podem ser importantes neste caso.

    
por 18.01.2012 / 12:27