quarta-feira, 12 de outubro de 2011

PHP monitoramento de uso de cache APC


APC é um dos PHP Cache Opcode no «mercado». Ele é gratuito e deve ser empacotado dentro da próxima revisão do PHP, a versão 6.
Não vou entrar em profundidade como funcionam os caches OpCode, você vai encontrar um monte de docs, google apenas para APC, XCache, eAccelerator ... O que posso dizer é que a APC (como outros caches fazer) vai «salvar» as partes do seu binário PHP código na memória e usá-lo quando você ligar para a função de PHP mesmo. Desta forma, você salvar todas as abrir o arquivo PHP, análise, etc

Talvez você notou que eu disse «na memória». Sim. Quando você começar a APC é preciso uma pequena quantidade (64 ou 32Mo padrão) de memória e armazenar as peças binário na mesma. 
Isso é bom mas que se você tem um site muito grande com muitas funções, classes, inclui ... como quando você ' re usando Typo3 e toneladas de extensões?
Uma coisa que você não vai encontrar muitas vezes na internet é "Como (o inferno) eu sei se a APC é um bom desempenho?»
Primeiro, na maioria das vezes, o PHP tempo de geração da página é reduzido pela metade quando você ativar APC. Este é um bom indício. Ótimo. 
Mas o que sobre o consumo de memória?
Durante meus testes, descobri que APC lavar completamente a memória, se não pode adicionar um novo objeto. Não sei se é um comportamento normal, mas é o que eu observou. É por isso que você tem que fazer o seu teste extensivamente e ajustar o tamanho da memória antes de ir para produção.
Isto pode ser feito realmente easyly com a página apc.php fornecido no pacote APC. Você não pode tê-lo se você usou algum instalador de pacotes Linux como yum ou aptidão. Se assim for, você vai ter que baixar o código fonte de seu site APC e apc.php copiar para o seu DocumentRoot web ou onde você quiser. Como se trata de dar informações sensíveis, eu recomment para colocá-lo em um lugar seguro. 
Estamos usando Typo3 aqui então eu coloquei a página na pasta typo3 /, que é protegido e acessível apenas por usuários do backend. Este é segura o suficiente para agora. Outra coisa, use o processo de login padrão, o usuário «apc» senha e «password». Isto pode ser alterado na página. Desativá-lo se você colocar o arquivo dentro de um local já protegida.
Navegue até sua página apc.php e ver o que acontecer. Primeiro, você vai ter um erro de PHP desagradável se você não tem APC PHP módulo ativado. Garantir que é permite que em / etc / php.d / apc.conf (no CentOS, pode estar em outro lugar em outra distro).
O que você vê aqui é, à esquerda, algumas métricas e informações das versões uptime, ... 
No lado direito você tem a utilização de memória e cache hit / miss representação. Além disso, você pode ver a fragmentação da memória. Você não quer isso, mas na verdade eu não tenho certeza que você tem uma maneira de reduzi-la ...
As coisas que você precisa verificar se no lado esquerdo, no painel «Informações Cache File».
Hits: quantos objetos já estavam no cache e foram usados
Miss: quantos objetos não estavam no cache, por qualquer motivo: o primeiro pedido para ele, a memória de objetos, completo não pode ser armazenada em cache ...
Cache full count: quantas vezes o cache (memória) estava cheio e lavada
Este último é um dos mais importantes e precisam ser verificadas primeiro site quando você começar a diminuir.
Monitoração
Agora você deseja monitorar isso com o seu Nagios / Centreon ou o que quer ... Well. 
Encontrei um «projecto de monitorização APC» lá fora, APC-PHP-MONITOR no GitHub . Este foi o meu ponto de partida como esta é muito básico.
Como eles fazem, eu fiz um script PHP que você tem que colocar em seu site PHP em algum lugar. Eu usei uma verificação básica para garantir que apenas o direito IP pode acessar esse script. No meu caso, 10.1.1.88.
  1. <? Php
  2. se $ _SERVER "REMOTE_ADDR" == "10.1.1.88" {
  3. print serialize ( apc_cache_info  » verdadeiro ;
  4. }
  5. ?>
Então eu modifiquei o script PHP para que eu possa usá-lo de Nagios ou o que quer. Eu nomeei a check_php_apc_cache.php arquivo. Não é um superbe script PHP. É só suja funcionando bem por enquanto.
  1. <? Php
  2. Check_php_apc_cache.php #
  3. # Modificação de Prune Sebastien THOMAS
  4. # V1 - 20111003
  5. # Criação
  6. #
  7. ####################################
  8.  
  9. $ Options getopt ( "H: p: w: c: d::" ;
  10.  
  11. # Variáveis
  12. $ Output "OK" ;
  13. $ Porta 80 ;
  14. $ Aviso 30 ;
  15. $ Crítica 10 ;
  16. $ Debug ;
  17. # Return code: 0 = OK, 1 = WARN, 2 = CRIT, 3 = DESCONHECIDO
  18. $ Retcode ;
  19.  
  20. se count ( $ argv < 2 ou $ argv == "ajuda" {
  21. print "usage: php apc_stats.php-H hostname-p [porta]-w [aviso]-c [crítica] [-d] \ n " ;
  22. print "hostname será alterado em uma URL como http://hostname:port/apc_mon.php \ n " ;
  23. print "é a porta HTTP para usar, por defeito a 80 \ n " ;
  24. print "warning:. baixo nível de uso de cache que irá emitir um aviso padrão 30 \ n " ;
  25. print "crítico:. baixo nível de uso de cache que irá levantar um padrão crítico 10 \ n " ;
  26. print "-d permite modo de depuração \ n " ;
  27. print \ n " ;
  28. saída ;
  29. }
  30.  
  31. se isset ( $ options "H" ) e is_null ( $ options "H" )
  32.         $ Host $ options "H" ;
  33. se isset ( $ options "p" ) e is_null ( $ options "p" )
  34.         $ Port $ options "p" ;
  35. se isset ( $ options "w" ) e is_null ( $ options "w" )
  36.         $ Aviso $ options "w" ;
  37. se isset ( $ options "c" ) e is_null ( $ options "c" )
  38. se isset ( $ options "d" )
  39.         $ Debug ;
  40.  
  41. # Assegurar a crítica é inferior alerta
  42. se $ crítica > = aviso $ {
  43.         print "Erro: valor crítico deve ser inferior a advertência \ n " ;
  44.         saída ;
  45.         }
  46.  
  47. # Obter a resposta a partir da página APC php
  48. $ Url "http://" $ host ":" $ porta "/ apc_mon.php" ;
  49. $ Resultados file_get_contents ( $ url ) ou morrer ( "O servidor não está respondendo" ;
  50. se $ resultados $ results unserialize ( $ resultados ;
  51. mais {
  52.         print "ERRO / n" ;
  53.         saída ;
  54.         }
  55.  
  56. # Debug
  57. se $ debug == 1 )
  58.         print_r ( $ resultados ;
  59.  
  60. # Calcular relação
  61. se $ resultados "num_hits" > 0 )
  62.         $ Hit_ratio $ resultados "num_hits" $ resultados "num_hits" $ resultados ["num_misses" 100 ;
  63. outro
  64.         $ Hit_ratio ;
  65.  
  66. se $ hit_ratio > = aviso $ {
  67.         $ Output "OK" ;
  68.         $ Retcode ;
  69.         }
  70. mais se $ crítica <= $ hit_ratio & & $ hit_ratio $ advertência {
  71.         $ Output "ATENÇÃO" ;
  72.         $ Retcode ;
  73.         }
  74. mais {
  75.         $ Output "crítico" ;
  76.         $ Retcode ;
  77.         }
  78.  
  79. printf ( % s -
  80. exit $ retcode ;
  81. ?>
Você pode então criar um cheque Nagios ou Modelo. O meu é assim:
  1. define comando {
  2.         command_name check_PHP_APC_cache
  3.         linha_de_comando php $ USER1 $ / check_php_apc_cache.php -H $ HOSTADDRESS $ -p $ ARG1 $ -w $ ARG2 $ -c$ Arg3 $
  4.         ; $ ARG1 $ porta TCP ( 80 )
  5.         ; $ ARG2 $ nível de alerta ( 30 )
  6.         ; $ Arg3 $ nível crítico 10 )
  7. }
Finalmente, o resultado:

Nenhum comentário :

Postar um comentário

Total de visualizações de página