Postado por Micox - Náiron J. C. G..
29 Outubro, 2009
Ae senhores, bão? bãozão?
Post rápido com uma funçãozinha que fiz quando tava tendo problemas com a hospedagem antiga do meu site (um dia eu conto essa história pra quem não acompanhou pelo twitter. Era a hospedagem da bysite.com.br - agora tô com a ótima PortoFacil.net).
Basicamente, meu site tava tendo muitos acessos E eu, provavelmente, devo ter ativado algum plugin louco no meu site. Resultado: excesso de processamentos no servidor. O bixo não tava dando conta do serviço e a hospedagem me sacaneava tirando meu site do ar por várias horas sem dar explicação, legal né?
Os servidores tem um lance que chamam de Load pra indicar mais ou menos comé que tá a carga nos bixo. É tipo uma média de quantos processos tão na fila. Veja mais explicações aqui se você não souber o que é.
A solução que pensei, além de desativar o plugin, foi fazer uma funçãozinha pra exibir uma página simples caso o server esteja com Load alto. Existem também outras ferramentas pra load balancer que eu optei por não usar por preguiça de aprender a configurar essas parada e ver se servia ao meu caso.
O que a função faz é: Testa se o load do server tá acima do valor que você configurou. Se estiver, executa a função passada no parâmetro. Muito simples mas muito útil pra evitar surpresas com servidores (compartilhados principalmente).
Bora:
0) Crie um novo arquivo e dê o nome de "inc-loadLimiter.php" Este é o conteúdo que você vai colocar dentro dele:
<?php
/*** Limita o processamento de acordo com o server load
By Micox: http://twitter.com/micox - http://elmicox.blogspot.com
Exemplo:
$loadLimiter=10; //limitei meu load a 10
if($loadLimiter){
include_once "inc-loadLimiter.php";
function saiVazio(){
header("Cache-Control: no-cache, must-revalidate");
include("aviso_de_manutencao_simples.htm"); //faça sua própria pág. simples.
//echo "Em manutenção"; //caso você não queira usar include
exit();
}
execIfLoad($loadLimiter,'saiVazio');
}
***/
function get_server_load($windows = 0) {
//fonte: http://www.videotexto.com.br/forum/viewtopic.php?t=243&sid=910886ae470cefbee204751ab41292d9
$os = strtolower(PHP_OS);
if(strpos($os, "win") === false) {
if(file_exists("/proc/loadavg")) {
$load = file_get_contents("/proc/loadavg");
$load = explode(' ', $load);
return $load[0];
}
elseif(function_exists("shell_exec")) {
$load = explode(' ', `uptime`);
return $load[count($load)-1];
}
else {
return "";
}
}
elseif($windows) {
if(class_exists("COM")) {
$wmi = new COM("WinMgmts:\\\\.");
$cpus = $wmi->InstancesOf("Win32_Processor");
$cpuload = 0;
$i = 0;
while ($cpu = $cpus->Next()) {
$cpuload += $cpu->LoadPercentage;
$i++;
}
$cpuload = round($cpuload / $i, 2);
return "$cpuload%";
}
else {
return "";
}
}
}
function execIfLoad($loadLimit,$callback){
if(get_server_load()>$loadLimit){ call_user_func($callback); }
}
?>
1) Coloque o código abaixo no começo de todas as páginas do seu site. Como eu uso wordpress, no meu caso, editei o tema e coloquei no header.php.
/**** Limitando o load pra não sobrecarregar o servidor.By Micox ***/
$loadLimiter=40; //limitei meu load a 40
if($loadLimiter){
include_once "inc-loadLimiter.php"; //você verá esta função logo abaixo
function saiVazio(){
header("Cache-Control: no-cache, must-revalidate");
include("aviso_de_manutencao_simples.htm"); //faça sua própria pág. simples.
exit();
}
execIfLoad($loadLimiter,'saiVazio');
}
Prontinho. Dúvidas, manda nos comments.
Marcadores: desempenho, funções, php, servidor
E-mail Newsletter
Feed RSS
Resultado! Concursos
Shopping Resultado
Não mande dúvidas nos comentários ou no meu e-mail. Mande elas para o fórum de desenvolvedores Webly. Tem mais gente lá gabaritada a responder e você não fica dependendo só do mico.
![]()
Comenta aí! Não cai o dedo e me incentiva a escrever mais. (1 comentários)
El Micox - Alguns direitos resevados - Licença Creative Commons
Este é apenas um espelho do blog real elmicox.com. Assinando aqui, na verdade você está assinando lá.