Postado em 20 de novembro de 2011
Memtrack – Diagnóstico de Aplicações PHP
Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!
Este artigo fala sobre o Memtrack. Perfilamento de aplicações ajudam a determinar os gargalos e possíveis problemas durante o desenvolvimento. Mas às vezes é preciso diagnosticar problemas no ambiente de produção. Frequentemente enfrentamos problemas com funções e métodos utilizando muita memória.
Se quisermos rastrear funções que estão consumindo muita memória, podemos utilizar uma extensão do PHP chamada Memtrack. Com ela podemos definir níveis aceitáveis de limite de memória e, quando alguma função ultrapassá-lo, um aviso será enviado.
Instalação e configuração do Memtrack
A Memtrack é uma extensão PECL, portanto para instalá-la é bastante simples:
pecl install memtrack
Para configurar também é bem tranquilo:
extension=memtrack.so memtrack.enabled = 1 ; habilita a extensão memtrack.soft_limit = int ; utilize um número para o limite de memória
Mais exemplos de configuração podem ser encontrados no manual do PHP.
Segue um exemplo de configuração:
extension=memtrack.so memtrack.enabled = 1 ; habilita a extensão memtrack.soft_limit = 1M ; define 1mb como limite de memória
Erro gerado
Vamos utilizar a seguinte função para “detonar” a memória:
function muitoConsumoDeMemoria() { $algumaCoisa = array(); for ($i = 0; $i < 10000; $i++) { $algumaCoisa[] = sha1('a'); } return $algumaCoisa; } $algo = muitoConsumoDeMemoria();
Quando essa função for executada, irá gerar um aviso no Memtrack.
[memtrack] [pid 10408] user function muitoConsumoDeMemoria() executed in PATH on line 10 allocated 1572864 bytes
Nesse log é possível encontrar informações sobre o processo, a função (nome e informações), caminho do arquivo, linha e uso de memória.
Conclusão
Com o perfilamento de aplicações é possível identificar em quais pontos a aplicação torna-se mais crítica. Assim, você pode investir seus esforços em melhorar rotinas específicas.
Espero que seja bem útil e que, a partir de agora, suas aplicações sejam otimizadas!
Um forte abraço a todos e fiquem com Deus!
Rafael Jaques
Adaptado de: http://www.leftjoin.net/2011/11/php-application-diagnostics-memtrack/
Postado em 21 de setembro de 2011
Gerando números de identificação (ID) únicos com PHP
Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!
Fala, meu povo!
Tudo sossegado?
Essa semana estava trabalhando em um sistema que precisava gerar IDs únicos para acesso e fui dar uma pesquisada pra ver o que encontrava. E não é que, para a minha surpresa, o PHP possui um gerador de IDs únicos?
A função chama-se uniqid() e funciona da seguinte maneira:
[code]string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )[/code]
Cada ID é gerado de acordo com os microsegundos, ou seja, se você estiver gerando IDs únicos em hosts diferentes é interessante utilizar o parâmetro $prefix para estipular um prefixo para cada ID gerado e evitar que sejam gerados hashs iguais (no mesmo microsegundo).
Modo simples
Chamar a função sem nenhum parâmetro irá gerar um ID único de 13 caracteres.
Eu utilizei este código e obtive os seguintes resultados:
[php]<?php
for ($i = 0; $i < 20; $i++)
{
echo uniqid() , ‘<br />’;
}[/php]
[code]4e7a2a9eda4f4
4e7a2a9eda513
4e7a2a9eda520
4e7a2a9eda52c
4e7a2a9eda538
4e7a2a9eda53e
4e7a2a9eda545
4e7a2a9eda54a
4e7a2a9eda54f
4e7a2a9eda553
4e7a2a9eda558
4e7a2a9eda55d
4e7a2a9eda562
4e7a2a9eda567
4e7a2a9eda56c
4e7a2a9eda571
4e7a2a9eda576
4e7a2a9eda57b
4e7a2a9eda580
4e7a2a9eda585[/code]
Nessa amostra é possível perceber que um padrão é seguido, porém a variação sempre está presente.
Aumentando a entropia
É possível aumentar a entropia e bagunçar ainda mais o número, diminuindo a previsibilidade do identificador gerado.
Alterando para true o segundo parâmetro da função, aumentaremos de 13 para 23 o número de caracteres gerados.
[php]<?php
for ($i = 0; $i < 20; $i++)
{
echo uniqid(NULL, true) , ‘<br />’;
}[/php]
[code]4e7a289bd01f45.79477223
4e7a289bd02032.89581934
4e7a289bd02052.11471119
4e7a289bd02075.00423065
4e7a289bd02085.08264238
4e7a289bd020a0.54923203
4e7a289bd020b3.38239852
4e7a289bd020c5.41874042
4e7a289bd020e7.13109847
4e7a289bd020f8.07879585
4e7a289bd02105.23156388
4e7a289bd02121.78128696
4e7a289bd02133.03380035
4e7a289bd02142.46928362
4e7a289bd02158.14421079
4e7a289bd02168.85897068
4e7a289bd02186.39675466
4e7a289bd02192.69187621
4e7a289bd021a1.41820411
4e7a289bd021b4.97244295[/code]
Identificadores extremamente imprevisíveis
Pra finalizar, uma paulada! Vamos preencher o primeiro parâmetro (prefixo) utilizando a função rand(). Então teremos um identificador de entropia elevadíssima, sendo um ID aleatório de 23 posições precedido por um número aleatório.
[php]<?php
for ($i = 0; $i < 20; $i++)
{
echo uniqid(rand(), true) , ‘<br />’;
}[/php]
[code]19060798504e7a29e9c9c059.93729338
13329376364e7a29e9c9c121.60865627
11839762204e7a29e9c9c151.33271890
15126155264e7a29e9c9c173.28119226
3205916434e7a29e9c9c196.14831352
6879387264e7a29e9c9c1a1.12625014
12097042174e7a29e9c9c1c4.76932924
5578020564e7a29e9c9c1e8.49604578
8800718324e7a29e9c9c1f7.42284494
3516524794e7a29e9c9c210.74379494
13719049204e7a29e9c9c232.53688755
13615040334e7a29e9c9c258.57255460
9026903494e7a29e9c9c262.94629146
12770888504e7a29e9c9c283.76903832
2071162574e7a29e9c9c2a1.35952502
7032290634e7a29e9c9c2b9.36462979
3520522964e7a29e9c9c2d3.39877178
4841746524e7a29e9c9c2e4.67328983
15352161784e7a29e9c9c301.78593394
16981154524e7a29e9c9c318.06476122[/code]
Wow! :D
Considerações finais
O sistema mostrou-se extremamente eficiente para realizar a tarefa a que se propõe e eu fiquei bastante satisfeito com os resultados obtidos.
Espero que tenha sido uma dica útil e gostaria de lembra-los que o blog está sempre aberto a comentários, sendo de críticas, elogios ou sugestões!
Um abraço a todos!
Fiquem com Deus.
Rafael Jaques
Postado em 27 de junho de 2011
Palestra no FISL
Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!
Fala, galera!
Tudo na santa paz?
Estou aqui para convidá-los para a minha palestra que acontecerá no FISL 12, nessa sexta-feira! :D
O título é PHP Sob Ataque – Técnicas de Programação Defensiva. Será no dia 1º às 12h00 na sala 41-C (Fisl 3).
Segue a grade completa do evento: http://fisl.org.br/12/papers_ng/public/fast_grid?event_id=1
Nos vemos lá!
Um abraço a todos e fiquem com Deus!
Postado em 17 de junho de 2011
Promoção: PHPit leva um estudante sortudo ao FISL 12!
Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!
Fala, galera!
Lembram que eu prometi uma promoção bombástica pra logo?
Pois bem! Cá está! (Leia tudinho pra não ter problemas, hein…)
Todo mundo sabe que estudante costuma sempre estar com a grana curta. Pensando nisso, o PHPit vai sortear um ingresso da modalidade estudante para um estudante sortudo que gostaria de ir ao FISL!
Atenção: É importante saber que você deve estar matriculado em uma instituição de ensino reconhecida pelo MEC, e o comprovante de matrícula deve ser apresentado durante o seu credenciamento no dia do evento.
Como faz pra concorrer? É muito simples! Basta acessar a promoção no TwitPromo clicando aqui e seguir os passos indicados.
O resultado da promoção será divulgado no dia 21/06 às 15h30 no twitter do @_phpit. O ganhador tem 24 horas para se manifestar, a contar da divulgação do resultado, caso contrário perde o direito de retirar o prêmio. Caso não esteja seguindo os dois twitteres indicados, também perde a premiação!
Um abraço a todos, fiquem com Deus e boa sorte!