+ Responder ao Tópico



  1. #1

    Padrão foreach consumindo muito o processamento do servidor

    Bom dia pessoal,
    Meu servidor ubuntu estava com uma certa lentidão, dai quando abri o monitoramento do sistema, notei que toda vez que eu abria uma determinada página web que contém um número muito grande de registros, o servidor alcançava 100% de processamento da CPU.
    Pensei: deve ser uma query que fiz que esta pesada. Testei todas as minhas querys e elas nao consomem muito do servidor, o único problema é que ela traz cerca de 20 mil registros. (preciso pegar essa qtde de registros para exportar para o excel, por meio de uma classe Pear, chamada Writer, pois meu cliente precisa visualizar todos esses 20 mil registros no excel).

    Ou seja, tenho certeza que esse processamento é enquanto esta "rolando" o foreach na página.
    Tem alguma configuração no PHP que melhora o desempenho dessa função ou algo para não puxar tanto o processamento da máquina?

  2. #2

    Padrão

    Devem existir várias soluções para isto, mas no momento pensei em duas:

    1) Limitar o processo: Tutoriais/Linux/cpulimit - UnderLinux Wiki assim vc poderia limitar o php para usar até 60% ~ 70% dos recursos da cpu; e/ou,

    2) jogar a bucha para o servidor de banco de dados, ao invés de foreach, sei que está usando array, mas não sei pq, então creio que possa usar algo como:
    Código PHP:
    while($i=mysql_fetch_array($query)){
      
    $csv_file=$i[\"nome\"].\",\".$i[\"endereco\"].\",\".$i[\"cidade\"].\"\n\";

    (obs. o fórum 'escapou' todas as aspas c/ medo de myql injection e retornou no próprio post )

  3. #3

    Padrão

    Olá amigo, eu pensei em mudar de foreach para while, mas o consumo foi o mesmo.
    Como posso limitar para que o PHP use apenas 70% de consumo da maquina?

  4. #4

    Padrão

    Após instalá-lo, uma forma de utilizá-lo poderia ser:
    Código :
    ps aux | grep php
    pra descobrir o PID, então bastaria executar o comando abaixo :
    Código :
    cpulimit --pid 000 --limit 65 -v -z
    onde 000 é o PID do processo php

  5. #5