Se você já é administrador há algum tempo, certamente já descobriu situações em que um servidor aumenta o uso da CPU ou a utilização da memória e / ou níveis de carga. Executar `top` nem sempre dará a você a resposta, também. Então, como você encontra esses processos sorrateiros que estão consumindo os recursos do seu sistema para poder matá-los?
O script a seguir pode ajudar. Ele foi escrito para um servidor web, portanto, possui algumas partes que procuram especificamente por processos httpd e algumas partes que lidam com MySQL. Dependendo da implantação do servidor, basta comentar / excluir essas seções e adicionar outras. Deve ser usado como ponto de partida.
Os pré-requisitos para esta versão do script são algum freeware lançado sob a GNU General Public License chamado mytop (disponível em
http://jeremy.zawodny.com/mysql/mytop/
), que é uma ferramenta fantástica para verificar o desempenho do MySQL. Está ficando velho, mas ainda funciona muito bem para nossos propósitos aqui.
Além disso, eu uso o mutt como o remetente - você pode querer alterar o script para simplesmente usar o utilitário `mail` embutido no Linux. Eu o executo via cron a cada hora; ajuste como achar melhor. Ah - e este script precisa ser executado como root, pois ele lê de algumas áreas protegidas do servidor.
Então, vamos começar, vamos?
Primeiro, defina suas variáveis de script:
#! / Bin / Bash
#
# Script para verificar os níveis médios de carga do sistema para tentar determinar
# quais processos estão levando isso muito alto ...
#
# 07Jul2010 tjones
#
# definir ambiente
dt = `data +% d% b% Y-% X`
# Obviamente, mude os seguintes diretórios para onde seus arquivos de log realmente são mantidos
tmpfile = "/ tmp / checkSystemLoad.tmp"
logfile = "/ tmp / checkSystemLoad.log"
msgLog = "/ var / log / messages"
mysql Log = "/ var / log / mysqld.log"
# o primeiro mailstop é o e-mail padrão para relatórios. O segundo é para o telefone celular (com um relatório reduzido)
mailstop = "[email protected]"
mailstop1="[email protected]"
máquina = `hostname`
# Os três seguintes são para uso mytop - use um usuário db que tenha direitos decentes
dbusr = "nome de usuário"
dbpw = "senha"
db = "seu nome de banco de dados"
# A seguir está o nível de carga a ser verificado - 10 é realmente alto, então você pode querer diminuí-lo.
levelToCheck = 10
Em seguida, verifique seu nível de carga para ver se o script deve continuar:
# Defina as variáveis do sistema:
loadLevel = `cat / proc / loadavg | awk '{print $1}'`
loadLevel = $ (printf "% 0.f" $ loadLevel)# se o nível de carregamento for maior do que você deseja, inicie o processo de script. Caso contrário, saia 0
se [ $loadLevel -gt $levelToCheck ]; então
echo ""> $ tmpfile
echo "***************************************" >> $ tmpfile
echo "Data: $ dt" >> $ tmpfile
echo "Verificar carregamento e processos do sistema" >> $ tmpfile
echo "***************************************" >> $ tmpfile