Monitorando memória usada em servidor Linux

Posted August 12th, 2009 in Desenvolvimento by felipepavao

Post rápido com dicas de ferramentas para monitorar sua VPS ou algum servidor Linux qualquer que você precise administrar. Todos sabemos que memória é um dos componentes mais críticos em um servidor, pois se houver um problema de congestionamento, as operações realizadas nele podem ser tornar lentas, causando lentidão no website e má experiência na navegação do usuário. Então, saber a quantidade de memória livre é vital para tomada de decisões e para projetar o crescimento escalável das aplicações. Veja abaixo alguns programas úteis.

free -[options]

O programa free exibe a quantidade de memória disponível na máquina e também a memória física (RAM) usada e a livre do sistema. Além disso, exibe também a memória compartilhada, buffer, cache e swap utilizada pelo kernel Linux.

Exemplos:

free -m

Este comando exibe a memória física em MB.

free -m -s 5

Este comando  irá ativar um loop de chamadas com delay de 5 segundos, ou seja, a cada 5 segundos, você terá os valores exibidos no terminal (ou onde você quiser direcionar a saída de tela) em megabytes. Qualquer número pode ser passado.

free -t -m

Igual ao free -t -m com a diferença que o -t exibirá também o espaço disponível para memória swap.

vmstat -[options] [delay count]

O vmstat exibe várias informações sobre memória, sistema e cpu, como swap, memória livre, buffer and memória de cache, espaço para paginação, atividade de IO, traps entre outros.

Exemplos:

vmstat

O comando indicará dados desde o último reboot da máquina.

vmstat 5

O comando indicará dados desde o último reboot da máquina e repetindo a informação de 5 em 5 segundos.

top

O programa top exibe dados em tempo real de acordo com os processos iniciados na máquina. Ele exibe muitas informações, mas podemos destacar sua principal característica como indicar qual processo está consumindo mais processamento e memória, pois estes processos ficam ordenados por ordem de consumo.

ps

O comando ps exibe um snapshot de informações sobere processos ativos. A vantagem do ps é que um administrador pode ver onde a memória é usada, pois ele exibe o percentual de memória que cada processo ativo está consumindo.

Exemplo:

ps aux

Mostra uma série de informações sobre os processos, como PID, percentual de memória consumida, percentual de CPU consumido entre outras informações que te possibilitam monitorar seu sistema de forma satisfatória.

Lançado o novo Tempo Real do Globoesporte.com versão Iphone

Posted July 23rd, 2009 in Projetos by felipepavao

Globoesporte Tempo Real Iphone - Tela de Cobertura

Ontem fizemos os últimos testes e colocamos em produção nosso aplicativo web para Iphone de cobertura em tempo real dos jogos de futebol. O aplicativo tem características semelhantes ao original do Globoesporte.com, entretanto, respeita os padrões de desenvolvimento para sites visualizados em dispositivos móveis. Basicamente ele consome as mesmas informações publicadas no aplicativo web Tempo Real original, porém as exibe em um formato customizado para Iphone.

Na verdade, nós já tinhamos esse aplicativo funcionando em uma arquitetura antiga, sob Java + Struts + Jbossweb + Oracle atrelado a todo o conglomerado de sites móveis da Globo.com. O problema é que o aplicativo de Tempo Real, devido ao grande apelo que é futebol, recebia uma grande quantidade de acessos simultâneos, causando lentidão em todos os outros sites.

Globoesporte Tempo Real Iphone - Tela de Escalação

Sugerimos então refazer apenas o aplicativo de Tempo Real, retirando-o da arquitetura antiga e adicionando algumas correções de bug e features, mas desta vez sob a nova arquitetura. Decidimos por Python + Django pois é a direção que a empresa vem adotando para construir novos sites e aplicativos. Com a ajuda do SCRUM, conseguimos refazer todo o aplicativo em tempo (1 sprint), além de entregarmos outras histórias em paralelo, pois aqui na Globo.com, devido ao número de demandas, temos que trabalhar simultaneamente em diversos produtos.

Globoesporte Tempo Real Iphone - Tela de Vídeos

Gostaria de parabenizar a todos do time e espero anunciar neste humilde blog novidades em breve.

Python Brasil 2009 – 5º encontro

Posted July 13th, 2009 in Eventos by felipepavao

PythonBrasil[5]

O maior evento da comunidade Python brasileira está chegando. Renomeado para Python Brasil (antes era Pycon), a Python Brasil 2009- 5º encontro acontecerá em Caxias do Sul, entre os dias 10 e 12 de setembro próximo. As inscrições já estão abertas e você pode conferir no site do evento maiores detalhes.

Estamos pensando em apresentar alguma coisa feita em Django aqui na Globo.com no evento, mas precisamos ver se iremos este ano. Ano passado o evento foi aqui no Rio de Janeiro, o que facilitou a nossa presença.

<div>
<a href="http://www.pythonbrasil.org.br/" title="PythonBrasil[5]">
<img src="http://www.pythonbrasil.org.br/2009/saiba-mais/apoio-divulgue/pythonbrasil-rectangle.gif" alt="PythonBrasil[5]" />
</a>
</div>

Ruby e SQLite sem Rails

Posted July 2nd, 2009 in Desenvolvimento by felipepavao

Estou desenvolvendo um programinha para consumir dados da API de buscas do Twitter e tive a ideia de implementar algum controle de usuário, para que a aplicação não faça muitas requisições ao Twitter e para que eles não me bloqueiem :-).

Então resolvi utilizar o SQLite diretamente de um script feito em Ruby. Basicamente, nesse script eu preciso criar o banco de dados, a tabela com os campos, inserir dados e verificar se eles já foram inseridos anteriormente. Veja abaixo como poderia ser.

require 'sqlite'
 
#criando ou utilizando o banco de dados
db = SQLite::Database.new('example01.db', 0644)
 
#criando a tabela
db.execute_batch <<-SQL
      CREATE TABLE users (
          idx INTEGER PRIMARY KEY,
          username VARCHAR(255)
      );
SQL
 
#inserindo um dado no banco
db.execute( "INSERT INTO users (username) VALUES ('username01')" )
 
#fazendo uma consulta e verificando se já existe no banco
if db.execute("SELECT * FROM users WHERE username = '%s' " % "username01") != []
  puts "O usuario username01 já foi adicionado anteriormente no banco de dados."
end

Se você quiser aprender mais, dê uma olhada na documentação do plugin SQLite Ruby. Este post também explica uma série de macetes se você quiser aumentar a interação com o banco de dados.

FISL 10 – Terceiro dia

Posted June 29th, 2009 in Eventos by felipepavao

fisl10banner

Talvez vocês estranhem um post sobre o Terceiro dia de FISL sem um antecessor comentando o segundo, mas infelizmente este dia não merece maiores explanações. Improdutivo, palestras ruins e que não agregaram valor (pelo menos as que eu escolhi assistir).

Diferentemente do dia anterior, o Terceiro dia foi totalmente interessante. Pela manhã acompanhei uma palestra que comparava vários frameworks em PHP, como o Code Igniter, Cake PHP, Symfony e Zend. Quatro palestrantes apontavam tópicos que denotavam pontos positivos de seu framework predileto. Foi legal conhecer um pouco mais de frameworks PHP e o que eles estão oferecendo para aumentar a produtividade dos desenvolvedores.

Após essa palestra, assisti um grande resumo do que se propõe o Middleware Ginga, framework para ser utilizado em set-top-boxes de sistema de tv digital. O palestrante falou tanto do Ginga-J quanto o Ginga-NCL e sobre o que cada um poderia oferecer. Fica a dica para os que tem interesse em apostar na tecnologia.

Depois do almoço assisti pela primeira vez uma palestra do Fábio Akita e gostei muito do que ele preparou. Falou das possibilidades do Rails e mostrou o exemplo do blog de 15 minutos do David Heinemeier Hansson com outras funcionalidades incluídas e que agregaram muito valor (will_paginate, cucumber, rspec, cache entre outras). Acho que ele conseguiu mostrar, para quem ainda tem dúvidas em estudar Rails, que o framework consegue ser muito útil e produtivo.

Em seguida assisti a palestra do Mergulhão sobre um case muito interessante de escalabilidade em aplicações feitas em Rails. Ele, que trabalha no Rede Parede, demonstrou que é possível sim ter aplicações Rails para aguentar situações de grande estresse. Ele também demonstrou como sua aplicação foi crescendo, e como eles se planejaram para aumentar sua infraestrutura. Ficou evidente que quanto mais o Google indexava o site, mais o site crescia e eles puderam criar algumas testes sobre o Google.

Por último, assisti um palestrante que possui uma “empresa livre“, com todos seus serviços orientados para utilização de software livre. E sim, diferente do que pensam, é possível ganhar dinheiro com software livre (eu já sabia :D).

Também não irei comentar sobre o quarto dia, pois depois que o Lula lá passou no evento, bagunçou todos os horários e prejudicou o andamento do evento. Que o ano que vem nenhum presidente pense em passar por lá.

FISL 10 – Primeiro dia

Posted June 25th, 2009 in Eventos by felipepavao

fisl10banner

Cá estou eu para falar do primeiro dia do FISL 10, maior evento de software livre nacional. Poderia resumir o primeiro dia do evento como bem interessante e que promete muito para os próximos.

Ao chegar ao local, enfrentei uma grande fila para me identificar, o que me fez perder uma palestra muito interessante sobre “TDD em Rails“, do Lucas Húngaro (não tenho certeza se a palestra rolou). Depois da identificação, fui prestigiar com o restante da galera a palestra do GC, sobre software livre na Globo.com. Esta palestra foi um belo apanhado de todas os desafios e tecnologias que utilizamos no nosso dia-a-dia. Para fechar a manhã,  tentei assistir mais uma palestra e acabei passando por umas 3 apresentações, mas não fiquei.

Após o almoço, acompanhei a palestra de Leslie Hawthorn sobre o Google Summer of Code, um programa do Google para fomentar o desenvolvimento de software livre. Ela falou um pouco de como se envolveu com o projeto e sobre  a evolução do programa, que hoje liga pessoas de todo mundo, devido ao modelo que é utlizado no desenvolvimento das ideias.

Depois da palestra da Leslie, fui até uma apresentação de um case de sucesso de implementação do CMS Drupal. Foi bastante interessante ouvir a abordagem que os analistas da Secretária de Saúde do Estado de Alagoas utilizaram para implementar seu site em cima do Drupal e ainda educar as pessoas a utilizar software livre.

Para fechar o dia, acompanhei a abertura oficial do evento, no teatro da PUC, com promessa que o próximo FISL será aqui mesmo em Porto Alegre. Vamos aguardar que esse se desenvolva bem, e que o próximo seja melhor ainda, com uma internet sem fio de qualidade, principalmente :D.

Tratando data de RSS com Django templates

Posted June 19th, 2009 in Desenvolvimento by felipepavao

O sistema de templates do Django permite a criação de tags e filtros para que possamos formatar ou tratar o conteúdo em um template de acordo com nosso desejo. (Veja mais na documentação do Django). Devido a filosofia do framework, é muito fácil criar um novo filtro para um tratamento específico. E foi exatamente isso que precisamos fazer.

A tarefa consistia em fazer uma simples formatação de data. Esta data estava no formato GMT (Ex: Sun, 19 May 2002 15:21:36 GMT) e precisávamos recuperar apenas a hora e o minuto (Ex: 15h21). Aparentemente, seria fácil fazer a conversão, utilizando a função strptime da classe datetime. Esta função transforma uma string em data, através da equiparação do formato da data.

from datetime import *
rss_date = "Sun, 19 May 2002 15:21:36 GMT"
date_format = "%a, %d %b %Y %H:%M:%S %z"
new_date = datetime.strptime(rss_date, date_format)
 
##ERRO
##ValueError: 'z' is a bad directive in format '%a, %d %b %Y %H:%M:%S %z'

Como podemos ver no erro destacado, ao utilizarmos essa função, há um problema de reconhecimento do atributo %z, responsável pela representação do fuso horário, apesar de constar da documentação oficial. Verificamos o arquivo /usr/lib/python2.5/_strptime.py e identificamos que a classe não implementa este atributo. Após uma breve pesquisa no Google, identificamos que possivelmente  na versão 2.6  o parâmetro já esteja sendo suportado, mas ainda não fomos a fundo nessa questão. E como precisamos usar Python 2.5, resolvemos partir para uma nova e simples solução, que era apenas parsear a string pela posição dos caracteres.

@register.filter
def rss_date(value):
    return value[17:19] + "H|" + value[20:22]

O código acima registra um filtro para ser usado no template HTML. Não achamos que essa seja a solução ideal, mas devido ao problema de versão optamos por utilizá-la. Veja a seguir como utilizar no template.

{{item.date | rss_date}}

Atualizar WordPress 2.8

Posted June 11th, 2009 in Desenvolvimento by felipepavao

Finalmente foi lançado ontem (11/06) o novo WordPress 2.8. Como informamos aqui, esta nova versão do WordPress traz uma série de melhorias de desempenho, correção de bugs e funcionalidades que melhoraram a utilizacão do sistema.

Você pode conferir todas as novidades no site Codex, do WordPress. Além disso, pode conferir esse vídeo de lançamento desta nova versão.

Para atualizar, você pode utilizar o atualizador automático (usamos aqui pela primeira vez no Blog da Fábrica) ou realizar os procedimentos relatados neste post.

Segurança e WordPress

Posted June 5th, 2009 in Desenvolvimento by felipepavao

Já queríamos há algum tempo falar sobre segurança de aplicações feitas com WordPress pois é um ponto que muitos desenvolvedores negligenciam, expondo seus clientes a problemas de segurança e invasão por hackers. Apesar de os desenvolvedores do WordPress cada vez mais resolverem bugs de segurança, é muito importante prestar atenção nos seguintes pontos afim de evitar problemas:

  1. Nunca dê permissão 777 aos arquivos do seu WordPress.
  2. Evite usar o editor interno de tema do WordPress. Caso use, dê permissão 666 aos arquivos.
  3. Os diretórios devem ter permissão 755.

As informações completas podem ser obtidas neste tutorial e no guia oficial do WordPress.

WordPress 2.8

Posted May 29th, 2009 in Desenvolvimento by felipepavao

Enquanto aguardamos o lançamento do novo WordPress 2.8 vamos acompanhando os testes com as versões beta (já liberaram a versão beta 2). Os desenvolvedores estão se dedicando a consertar alguns bugs e incluir diversas funcionalidades que facilitam e aumentam a usabilidade do sistema.

O WordPress 2.8 promete ser uma versão mais madur ainda e ganha cada vez mais nossa preferência. Vocês poderão encontrar a lista completa de modificações no site Codex do WordPress.