Archive for maio 2006

Teste de carga utilizando Shell Script

A algumas semanas atrás, fiquei responsável por realizar testes de carga em uma sistema web da Univali que foi desenvolvido para o processo de Avaliação Institucional, no qual todos os alunos e professores devem preencher um questionário avaliando as disciplinas, os professores, os coordenadores de curso… ou seja, a universidade como um todo.

Fiquei com esta tarefa, pois a alguns anos também sou responsável pelo teste de carga da aplicação responsável pela processo de matrícula via Internet.

A tarefa é “simples”: consiste em monitorar o uso de recursos de todos os servidores envolvidos no processo (servidores web, banco de dados, etc) e aplicar uma carga que deverá simular um número n de usuários efetuando um determinado processo (preenchendo um formulário, navegando em um site, etc) em um período de tempo. O objetivo é dizer quantos usuários simultâneos poderão estar utilizando o sistema com um tempo de resposta aceitável e de forma que os recursos de hardware/software não sejam consumidos completamente.

Esse “número mágico” é utilizado para definirmos se um processo será dividido por grupos de pessoas em vários dias ou se será necessário a adição de mais servidores no farm.

Bem, por que estou escrevendo isso? porque até o início do ano eu costumava utilizar um software da Microsoft para efetuar os testes de carga chamado Web Application Stress Tool. Infelizmente para algumas aplicações web eu não conseguia efetuar o teste corretamente, simulando um usuário real no sistema. Dessa vez tentei evoluir um pouco e decidi fazer a aplicação em Shell Script! :)

A experiência foi muito boa, confesso que consegui obter um resultado satisfatório e ter uma flexibilidade imensa para criar o programa. Abaixo um descrição de um dos teste executados com 500 usuários simultâneos:

Foram utilizados 500 usuários que efetuaram o processo de login na Intranet no intervalo de 5 minutos. Estava sendo disparado o acesso de exatamente 5 usuários a cada 3 segundos. Após efetuar o login, o ???usuário??? passava para a tela onde encontram-se os formulários de avaliação institucional e em seguida escolhia o primeiro formulário de avaliação referente a disciplina. Neste ponto foi adicionado um intervalo que varia de 2 a 3 minutos referente ao preenchimento do formulário. Após a conclusão o mesmo era salvo e o usuário escolhia um novo formulário. Este processo se repetiu no total de 8 vezes, sendo 5 para formulários de disciplinas cursadas e 3 referentes ao curso (Curso, coordenador e auto-avaliação). Ao final o usuário efetuava o processo de Logout da Intranet.

Para o teste de cargas utilizei principalmente o curl auxiliado por diversas outras ferramentas encontradas no shell padrão de qualquer distro. Para o monitoramento também foram criados scripts que coletavam informações como uso de CPU, memória, conexões simultâneas, processos do apache em execução e outras informações relevantes.
Acho que é isso… gostaria apenas de compartilhar mais uma idéia que podê ser resolvida com shell scripts. Quem sabe futuramente transformo esse meu conhecimento em uma aplicação mais flexivel e fácil de configurar que suporte “farms” de clientes, geração de gráficos automaticamente (pois usei o Excel pra fazer isso ;) e mais o que vier na cabeça.

Instalação do Oracle 9.2.0.4.0 no Debian 3.1 (Sarge)

Esse pequeno tutorial visa instalar o Oracle com a finalidade de recompilar o php com suporte ao oci8 (AKA Oracle Client). Pode ser utilizado também para efetuar a instalação de um servidor que seja o banco de dados propriamente dito, porém fica por sua conta selecionar os produtos corretos que deverão ser instalados e efetuar as otimizações de kernel necessárias. Este tutorial parte de uma instalação mínima do Debian 3.1 Sarge, contendo apenas os pacotes básicos.

1. Instalar o X-Window básico:
# apt-get install x-window-system

Efetuar a configuração conforme seu hardware.

2. Adicionar usuário e grupo para o Oracle:
# groupadd oinstall
# useradd oracle -g oinstall -s /bin/bash -d /opt/oracle
# passwd oracle
# mkdir /opt/oracle
# chown oracle:oinstall /opt/oracle

3. Instalar os pacotes necessários para efetuar a instalação:
# apt-get install libstdc++2.10-glibc2.2 gcc-2.95 libc-dev x-window-system

4. Linkar bibliotecas e o gcc necessários pelo oracle:
# cd /usr/lib
# ln -s libstdc++-libc6.2-2.so.3 libstdc++-libc6.1-1.so.2
# cd /usr/bin
# ln -sf gcc-2.95 gcc

5. Montar o CD número 1 do oracle:
# mount -oexec /dev/cdrom

6. Logar em outro terminal (Alt+F2) com o usuário oracle

7. Preparar para que o Xwindow inicie um Xterm, e inicia-lo:
$ echo /usr/bin/X11/xterm > .xinitrc
$ startx

8. Iniciar a instalação do oracle:
$ /media/cdrom/runInstaller

Durante a instalação, os produtos que devem ser instalados são:
- SQL Plus
- Oracle Call Interfaces
- Oracle Programmer

9. Após o final da instalação, adicionar as linhas abaixo no arquivo /etc/bash.bashrc:
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/OraHome1
export ORACLE_SID=unvp01
export ORACLE_TERM=xterm
export NLS_LANG=PORTUGUESE_BRAZIL.WE8ISO8859P1
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH


# Set shell search paths
export PATH=$PATH:$ORACLE_HOME/bin


# CLASSPATH:
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib

10. Por fim, adicionar o diretório de bibliotecas do oracle ao sistema:
# echo '$ORACLE_HOME/lib' >> /etc/ld.so.conf
# ldconfig

Restore do IIS

Como fiz um script que efetua o backup do IIS e recentemente fui questionado do procedimento de restore em caso de perda dos metadados do Microsoft Internet Information Services (IIS), abaixo escrevi um pequeno script que permite efetuar essa restauração:
@Echo off
set metadata="C:\WINDOWS\system32\inetsrv\MetaBack"
set iis= "c:\backup"
cd %iis%
copy iisBackup.* %metadata%
iisback /restore /b iisBackup /v 1
cd \
echo fim do restore

Básicamente são passados os parâmetros para efetuar a restauração (/restore) a descrição do arquivo de backup (/b iisBackup) e a versão (/v 1).

Instalando, removendo e pesquisando programas no Ubuntu e Debian

Alguns comandos úteis para instalação, remoção, informação e pesquisa de programas no Ubuntu e no Debian (via linha de comando). A apresentação dos comandos segue uma seqüência lógica do momento que instalamos até removermos um pacote.

Para pesquisarmos um pacote pelo nome:
hst:~# aptitude search iptraf
p iptraf - Interactive Colorful IP LAN Monitor
hst:~#

A primeira coluna (p) indica o estado do pacote, que pode ser:

i: Instalado
v: pacote virtual (um pacote que como dependência possui outros pacotes)
p: pacote não instalado
c: Removido, mas os arquivos de configuração ainda estão presentes
u: Desempacotado
B: Quebrado
C: Meio-configurado
H: meio-instalado
Agora, se quisermos pesquisar um pacote pela sua descrição, podemos utilizar o comando:

hst:~# aptitude search ~d"lan monitor"
p iptraf - Interactive Colorful IP LAN Monitor
hst:~#

Para obtermos maiores informações sobre um determinado pacote:

hst:~# aptitude show iptraf
Package: iptraf
State: not installed
Version: 2.7.0-7
Priority: optional
Section: net
Maintainer: Frederic Peters
Uncompressed Size: 745k
Depends: libc6 (>= 2.3.2.ds1-4), libncurses5 (>= 5.4-1)
Description: Interactive Colorful IP LAN Monitor
IPTraf is an ncurses-based IP LAN monitor that generates various network statistics including TCP info, UDP counts, ICMP
and OSPF information, Ethernet load info, node stats, IP checksum errors, and others.
hst:~#

Se for este o pacote que desejamos, para instalar basta executar o comando:

hst:~# aptitude install iptraf

Agora digamos que por algum motivo queremos remove-lo, para isso usamos o comando:

hst:~# aptitude remove iptraf

E por fim, para removermos os arquivos de configuração (que não são removidos pelo comando acima) executamos o comando:

hst:~# aptitude purge iptraf

Existem outros comandos interessantes como:

  • update: Atualiza a lista de pacotes disponíveis no repositório apt;
  • upgrade: Atualiza toda a distribuição para os pacotes mais recentes;
  • clean: Remove todos os arquivos .deb que estão no cache (/var/cache/apt/archives);
  • download: Baixa um pacote específico no diretório corrente.

Fontes:Installing Software on Debian e manpage do aptitude

Blog em Wordpress de graça

Quem quiser montar um blog utilizando o Wordpress mas não tem onde hospedar ou não quer gastar com hosting, pode criar um de graça no próprio Wordpress. Para isso acesse o site, clique em “Get a WordPress Now!” preencha alguns informações básicas e pronto, seu blog estará no ar com link semelhante a http://seunome.wordpress.com.