Processos do PHP, MySQL, etc. Por que controlar e sua importância?
Processos do PHP, MySQL, etc. Por que são importantes?
O que acontece na praça de pedágio das estradas nas vésperas de feriados prolongados? E como é a experiência de fazer um pedido no famoso fast food de hambúrguer no shopping center em um sábado no horário de almoço?
E o que essas duas situações têm a ver com tentar entregar a declaração de imposto de renda nas últimas 2 horas para o fim do prazo no site da Receita Federal?
Compreender o que está envolvido nessas situações do mundo real e sua relação com processos da sua conta de hospedagem, é o caminho para que seu plano de hospedagem funcione de acordo com suas expectativas, necessidades e desejos.
A Internet fez com que a terminologia de hospedagem ganhasse um novo significado. Rigorosamente, há algumas sutis mas importantes diferenças.
Desde sempre, hospedagem significou o acolhimento de alguém em uma casa ou um hotel ou um estabelecimento destinado a acomodar pessoas.
Mas a partir da popularização da Internet, também passou a designar um "lugar" na Internet para acomodar um domínio e tudo o que com ele se relaciona, como um site ou contas de e-mail.
Ou seja, a principal diferença é que no primeiro caso, refere-se a pessoas e no segundo, a domínios.
Porém da mesma forma que há diferenças, há similaridades e, portanto, planos de hospedagem de domínios ou sites, de certa forma parecem-se com as hospedagens que pagamos nos mais diversos hotéis, ou pousadas, ou albergues, ou resorts, ou o que mais se imaginar.
Um plano de hospedagem de sites ou de domínios, é o conjunto de serviços e de recursos que estão disponíveis a um domínio e que possibilita ter um ou vários sites, contas de e-mail, bancos de dados, serviços diversos (FTP, firewall, SSL, etc), instalador automático de CMSs, em meio a outros recursos.
Sob uma ótica técnica e mais rigorosa, planos de hospedagem são destinados a domínios e não a sites, uma vez que a existência e o acesso a um site, requer um domínio. E ao hospedar o domínio, por consequência se tem um site institucional, uma loja virtual, um blog, contas de e-mail e outras coisas que fazem uso desse domínio.
Até é possível ter um site – ou vários – sem que se tenha um domínio registrado, mas na prática acessar um site pelo endereço IP 192.168.204.075 ou qualquer outro, não é algo viável.
Vê-se que não é muito diferente de escolher o lugar para passar uns dias das férias de verão com a família, em que cada hotel, resort, pousada e cada opção de quarto e hospedagem, oferece uma diferente gama de confortos, comodidades e serviços, que incluem além do quarto, a piscina, as quadras, a sauna, as opções do restaurante, a localização, etc.
Mas as semelhanças não param por aí. Tem o servidor também...
O servidor de hospedagem, é o computador ou equipamento (hardware) que tem grande poder computacional (espaço em disco, memória, processamento, etc) e é destinado a servir serviços, por mais redundante que isso possa parecer.
Ou seja, assim como na hospedagem de pessoas, onde há a oferta de serviços diversos do hotel e pelos quais se paga conforme são utilizados, no servidor de hospedagem também.
Entre muitos serviços que um servidor disponibiliza a cada domínio hospedado, há o servidor web (responsável pelos sites), o serviço de e-mail, de bancos de dados, de FTP, de PHP, para citar apenas os mais comuns e conhecidos.
Ao comparar o servidor de hospedagem com o nosso hotel ou resort, ele corresponde às instalações físicas destes, que assim como o servidor, serve refeições, serviço de quarto, estacionamento, salas de convenções, entre outros serviços, os quais para serem prestados dependem de ações dos colaboradores envolvidos em cada serviço.
E é nesse ponto que finalmente chegamos ao nosso tema central e à analogia que usamos na nossa abertura – os processos!
Processos de um sistema operacional correspondem a ações que diferentes serviços ou programas estão executando.
No hotel quando você usa o serviço de quarto para pedir uma simples garrafa de água, você desencadeia uma série dessas ações (processos) que vão desde o atendimento telefônico por parte de um colaborador, a inclusão do pedido no sistema do hotel e que posteriormente gerará uma cobrança, o recebimento desse pedido na cozinha e a ação de levar a água até o quarto.
Em um paralelo com o servidor de hospedagem, o simples preenchimento de um formulário em um site, também faz uso de serviços e de ações, as quais são os processos.
Nesse exemplo hipotético do formulário e de modo bastante simplificado, temos:
Inicia-se com um processo do servidor web, responsável pela exibição da página em que o internauta está e que contém o formulário;
Ao clicar no botão "enviar", é feito uso do serviço PHP e um processo desse serviço é iniciado. Este processo é responsável pelos comandos, funções e demais estruturas da linguagem de programação PHP;
Um novo processo faz a chamado do serviço MySQL para armazenar as informações do formulário em uma tabela do banco de dados;
Uma vez salvas as informações no banco de dados, o processo correspondente é encerrado;
Mais outro processo tem por objetivo usar o serviço de e-mail;
Na etapa seguinte outro processo encarrega-se de passar os atributos usados na mensagem que chegará ao administrador do site e quando receber a resposta do sucesso no envio, ele é encerrado;
Então um novo processo do PHP é iniciado, dessa vez encarregando-se do carregamento da página "obrigado.php", a qual deverá ser exibida ao visitante, indicando que houve sucesso no preenchimento e envio do formulário e agradecendo-o pela ação;
Para que essa página seja exibida no navegador, um novo processo novamente do servidor web é responsável pela exibição do conteúdo que foi elaborado pelo serviço PHP e cujo processo correspondente já foi encerrado;
Por fim, quando o navegador recebe o conteúdo produzido pelo servidor web, o processo correspondente é encerrado.
Portanto, processos são ações que são desenvolvidas pelos serviços ou por programas que são executados sob o sistema operacional do servidor.
Mas e o pedágio congestionado na véspera de feriado? E as filas no fast food da praça de alimentação?
Ambos são serviços que envolvem processos para serem prestados. São processos que têm suas particularidades e diferenças para os processos de um servidor, mas ainda assim também são processos.
Dessa forma, na praça de pedágio, o operador recebe o dinheiro, confere o valor, verifica o número de eixos do veículo – quando náo é carro de passeio –, providencia o troco, imprime o comprovante e libera a cancela.
Observa-se uma sequência de processos e que leva tempo e onde a realização de um, depende do outro. Ele não pode liberar a cancela sem ter recebido o dinheiro.
Nos dois casos ou em quaisquer outros do mundo real, quando a demanda é superior à capacidade de iniciar e concluir os processos no intervalo de tempo que necessitam, há congestionamento, há lentidão, há espera.
Por que preocupar-se com processos?
Quer dizer que uma conta de hospedagem que produza muitos processos, pode congestionar os serviços?
Para efeitos do nosso tema, os planos de hospedagem fornecem quantidades finitas de processos associados a cada um dos serviços que temos disponível (servidor web, servidor de e-mail, de bancos de dados, de FTP, etc).
Se eu tenho mais carros chegando à praça de pedágio do que sou capaz de liberar, ou se eu tenho mais clientes fazendo pedidos de hamburgueres do que sou capaz de montar, ou ainda se eu tenho mais declarações de imposto de renda que o servidor da receita é capaz de gravar, há lentidão, pois há mais processos sendo produzidos do que o tempo necessário para concluí-los.
Porque o operador da cabine de pedágio tem processos a cumprir e cada qual tem seu tempo, até poder liberar um veículo e porque um simples formulário em um site qualquer, também tem seus processos cada qual demandando um intervalo de tempo para ser concluído, por menor que seja esse tempo.
Em termos reais, isso tem outras implicações.
Um processo corresponde a alocação de uma porção de memória RAM e/ou de SWAP, a um percentual de utilização de um núcleo do processador, a uma parcela da transferência de dados, a alguns bytes do disco rígido e pode também desencadear outros processos, que são chamados de processos filhos.
Quando alguma parte disso tudo atinge o seu limite, da mesma forma que no mundo físico, há aumento na fila de processos e o sistema começa a responder com lentidão, porque na situação limítrofe, um novo processo só pode ser iniciado, quando o anterior é concluído se o limite de processos estabelecido é alcançado.
Até mesmo um potente servidor dedicado de última geração ou um robusto ambiente cloud, têm limites, como é o caso dos servidores da receita, os quais nas últimas horas para encerramento da entrega das declarações, têm mais processos para lidar do que são capazes de administrar, afinal a fila de processos só é concluída, quando a hierarquia dos processos é cumprida.
Não há como emitir o comprovante de entrega, enquanto o serviço de banco de dados não gravou os dados da declaração e, portanto, uma ação – ou processo – é hierarquicamente relacionado aos outros.
Imagina-se, portanto, que um servidor de hospedagem compartilhada e que é o modelo mais popular de hospedagem, os limites também existam. Aliás, é importante que existam para que eventuais problemas em uma conta, não afetem as demais.
Logo, controlar processos é importante para que o desempenho de todos os serviços – e não apenas do site – seja bom.
Há algumas formas de saber a quantas andam os processos de uma conta de hospedagem.
O jeito mais simples, é pelo cPanel, ou o painel de controle oferecido pela sua empresa de hospedagem.
A maior parte dos bons painéis de controle oferece essa informação em termos instantâneos, ou seja, no momento exato em que se está fazendo a consulta e em termos estatísticos, ou seja, ao longo de um período de tempo estipulado, clicando no ícone "Uso de Recursos" do cPanel.
É possível ver processos dos principais serviços, como por exemplo, o PHP e confrontar com a visitação para aquele mesmo intervalo de tempo e a partir daí, saber se o excesso de processos é decorrente de muitos visitantes ou de um problema na programação, por exemplo, caso a visitação não tenha aumentado para o período correspondente.
Outra forma, está restrita a quem tem acesso SSH, é usando o comando TOP do Linux, pelo qual além dos processos associados a cada serviço, também é possível ver o consumo de RAM, de uso do processador, entre outros dados instantâneos relacionados ao seu usuário da conta.
A terceira forma, é via suporte técnico. As boas empresas de hospedagem e que prestam um atendimento mais personalizado, são capazes de fornecer logs para usuários de determinados planos e diante de situações mais severas, os quais podem conter informações que devidamente interpretadas, dão indicativos da origem do excesso de processos.
Seja qual for o caso, uma conversa com o suporte de hospedagem que você utiliza, pode ajudar a identificar possíveis problemas com excesso de processos e quais ações adotar, como por exemplo, redução do número de plugins do WordPress, migração para um plano de hospedagem personalizada, ações para melhorar a segurança do site, ou o que for necessário.
Processos do PHP, do MySQL ou quaisquer outros serviços de um plano de hospedagem, estão intimamente relacionados ao desempenho do site, do serviço de e-mail, do FTP, do banco de dados e tudo que envolve o serviço de hospedagem.
` }) Vue.component('component-criar-comentario', { props: ['value'], name: 'component-criar-comentario', data: function () { return { nome: { valor: null, erro: false }, email:{ valor: null, erro: false, erroMensagem: 'Preenchimento necessário.' }, comentario: {valor: '', erro: false }, url: 'processos-do-sistema-operacional', //enviadoSucesso: null, carregando: false, store: store.state } }, computed: { comentarioChars: function() { if(this.comentario.valor.length > 3500) this.comentario.valor = this.comentario.valor.substring(0, 3500); return this.comentario.valor.length; }, pai: { get: function() { return this.value }, set: function(novoValor) { this.$emit('input', novoValor) } }, enviadoSucesso: { get: function() { return this.store.enviadoSucesso }, set: function(novoValor) { store.setEnviadoSucesso(novoValor) } }, comentarios: { get: function() { return this.store.comentarios }, set: function(novoValor) { store.setComentarios(novoValor) } } }, methods: { addComentario: function () { //Se já há um envio em andamento if(this.carregando) return; // Zerar os erros this.nome.erro = false this.email.erro = false this.comentario.erro = false if(!this.nome.valor) { this.nome.erro = true console.log('nome vazio') } if(!this.email.valor) { this.email.erro = true this.email.erroMensagem = 'Preenchimento necessário.' console.log('email vazio') } if(!this.comentario.valor) { this.comentario.erro = true console.log('comentario vazio') } if(!this.comentarioChars > 500) { this.comentario.erro = true console.log('comentario maior que 500') } if(this.nome.erro || this.email.erro || this.comentario.erro) { console.log('erro') return; } this.carregando = true // Obtem os dados // analisa se os dados estão corretos // Envia os dados para o servidor e aguarda o retorno var bodyFormData = new FormData() var that = this bodyFormData.set('pai', this.pai) bodyFormData.set('nome', this.nome.valor) bodyFormData.set('email', this.email.valor) bodyFormData.set('comentario', this.limparComentario(this.comentario.valor)) axios.post(`https://www.hostmidia.com.br/blog/comentario-adicionar/${this.url}/`, bodyFormData) .then(function (response) { if(response.data.success) { // Se retornar com sucesso adiciona o nome e o email ao cookie that.enviadoSucesso = that.pai // Cria um timeout para desaparece a mensagem de sucesso setTimeout(() => that.enviadoSucesso = null, 5000); localStorage.setItem('nome', that.nome.valor) localStorage.setItem('email', that.email.valor) var novoComentario = { pai: that.pai, url: that.url, data: new Date(), comentario: that.limparComentario(that.comentario.valor), filhos: [], id: response.data.success, nome: that.nome.valor } //Zera comentario that.comentario.valor = '' // Adiciona o comentario a lista, para ser visualizado // Se o pai é 0 então não tem pai, caso contrário localiza o pai e adiciona como filho if(that.pai == 0) { that.comentarios.push(novoComentario) } else { that.comentarios.forEach(comentario => that.adicionarFilho(comentario, that.pai, novoComentario) ) } that.pai = 0 //Salva localmente o comentario var comentarios = JSON.parse(localStorage.getItem('novoComentarios')) if(!comentarios) { localStorage.setItem( 'novoComentarios', JSON.stringify([novoComentario]) ) } else { comentarios.push(novoComentario) localStorage.setItem( 'novoComentarios', JSON.stringify(comentarios) ) } } else { console.log('erro') if(response.data.field == 'email') { that.email.erro = true that.email.erroMensagem = 'Endereço de e-mail inválido.' } that.enviadoSucesso = null } that.carregando = false }) .catch(function (error) { // handle error console.log(error); that.enviadoSucesso = false that.carregando = false }) }, limparComentario: function(comentario) { var d = document.createElement('div'); d.innerHTML = comentario; return d.textContent; }, // Adiciona um comentario à lista como filho do respectivo pai adicionarFilho: function(comentario, id, object) { if(comentario.id == id) { comentario.filhos.push(object) return } var that = this comentario.filhos.forEach( filho => that.adicionarFilho(filho, id, object) ) } }, created: function() { //Ver se tem um cookie com os dados do email e nome se já enviou um comentario com sucesso this.nome.valor = localStorage.getItem('nome') this.email.valor = localStorage.getItem('email') }, template: `
` }) // -- Principal -- var app = new Vue({ el: '#app', data: { loading: false, comentarResposta: 0, url: 'processos-do-sistema-operacional', store: store.state }, computed: { comentarios: { get: function() { return this.store.comentarios }, set: function(novoValor) { store.setComentarios(novoValor) } }, totalComentarios: { get: function() { return this.store.comentarios.reduce(this.somarComentarios, this.store.comentarios.length) } } }, methods: { somarComentarios: function(acc, item) { if(item.filhos.length === 0) { return acc; } else { return item.filhos.reduce(this.somarComentarios, acc+item.filhos.length) } }, // Se há um comentário salvo localmente adicionar como filho do respectivo pai adicionarFilho: function(comentario, id, object) { if(comentario.id == id) { // Verifica se o comentario já existe, ou seja foi aprovado if(comentario.filhos.find((c) => c.id == object.id) === undefined) { comentario.filhos.push(object) } return } var that = this comentario.filhos.forEach( filho => that.adicionarFilho(filho, id, object) ) } }, created: function() { //Limpar os comentários mais antigos que três dias window.requestIdleCallback(() => { var comentarios = JSON.parse(localStorage.getItem('novoComentarios')) var dataReferencia = new Date() dataReferencia.setDate(dataReferencia.getDate() - 3) // Se a data do comentario for maior que três dias atrás então mantem if(comentarios) { comentarios = comentarios.filter( (c) => new Date(c.data) > dataReferencia ) localStorage.setItem( 'novoComentarios', JSON.stringify(comentarios) ) } } ) var that = this; axios.get('https://www.hostmidia.com.br/blog/comentario-listar/processos-do-sistema-operacional') .then(function (response) { if(response.data) { that.comentarios = response.data var novoComentarios = JSON.parse(localStorage.getItem('novoComentarios')) if(novoComentarios) { novoComentarios = novoComentarios.filter((c) => c.url == that.url) novoComentarios.forEach(novoComentario => { // Se o pai é 0 então não tem pai, caso contrário localiza o pai e adiciona como filho if(novoComentario.pai == 0) { // Verifica se o comentario já existe, ou seja foi aprovado if(that.comentarios.find((c) => c.id == novoComentario.id) === undefined) { that.comentarios.push(novoComentario) } } else { that.comentarios.forEach(comentario => that.adicionarFilho(comentario, novoComentario.pai, novoComentario) ) } }) } } else { console.log('erro') } }) .catch(function (error) { // handle error that.loading = false; console.log(error); }) } })