The UNIX and Linux Forums  

Go Back   O UNIX e Linux Forum > Top Fóruns > Programação Shell Script e
.
google unix.com



Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
sair do script arghya_owen Programação Shell Script e 1 06-02-2008 07:36
Exiting erro de script quando ocorre Sreejith_VK Programação Shell Script e 4 04-25-2008 04:53
Script Não Exiting? lesstjm Programação Shell Script e 1 07-11-2007 12:58
Shell script não sair graciosamente smithK Programação Shell Script e 5 02-08-2007 06:48
sair em c ruffenator Alto Nível de programação 3 04-28-2002 03:31

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 05-10-2007
Infiel Unbeliever is offline
Usuário
  
 

Join Date: Jul 2005
Localização: Inglaterra
Lugares: 183
PHP5 Script "Freeze" antes de sair

Eu recentemente actualizado um sistema de php 4.4.2 para PHP 5.2.1, e um dos meus scripts já começou comportando muito estranhamente. Tentei o Google, mas sim em branco até agora.

Basicamente o que o script faz é seleccionar uma grande quantidade de dados a partir de um mysql (4.1.21) de dados, fazer alguma manipulação, os lotes um gráfico (utilizando jpgraph 2.2). Eu removidos todos os jpgraph código e ainda estou recebendo o problema. O que acontece é que o script "trava" para um período de tempo após executar o último comando php antes de sair. Durante este período de tempo que o processo leva até uma grande quantidade de CPU (tempo de um conjunto único processador principalmente), mas se você asnas do processo, obtém nenhum resultado até que finalmente saídas (quando você ver stdin / out / err fechado etc.)

Depois de colocar várias declarações em depurar Achei que se eu comentou o seguinte linha ao script não congela antes de sair.

datax $ \u003d $ newdatax;

Uma bonita inócuo linha. Neste ponto é um grande datax $ array (muitos milhares de valores de comprimento), e US $ newdatax um array com os resultados da análise do original $ datax, de alguma forma (na sua maioria, tendo um caso de cada Nth entrada de US $ datax). Neste ponto, gostaria de jogar fora o original $ datax e substituí-la com a nova $ newdatax e eu talvez queira fazer mais maniplulation mais tarde.

Se $ datax é de cerca de 10.000 ou mais linhas, há uma perceptível congela quando o script saídas, em 50.000 linhas é o jeito mais de 20 segundos. Nos termos do php 4 Eu não tive problemas com esse código quando havia mais de 200.000 linhas na tabela.

Mesmo se eu simplesmente mudar essa linha para

$ datax \u003d array ();

Recebo semelhante (mas muito menor) 'pendurar' antes do script e saídas de US $ datax matriz precisa ser muito grande antes que se torne perceptível.

O sistema está sendo executado no Solaris 9, sobre um v480 com 4 processadores e 16GB de RAM. Eu já tentei com e sem o Zend Optimiser (v3.2.8) sem qualquer diferença perceptível.

Any help appreciated.
  #2 (permalink)  
Old 05-10-2007
cbkihong cbkihong is offline Forum Advisor  
Orientador
  
 

Join Date: Sep 2002
Localização: Hong Kong, China
Posts: 1.624
Você fechou o PO conexão imediatamente quando você é feito com o banco de dados ou declaração puxadores etc? Se você estiver executando um recurso-intensivas script, você deve ter certeza que você desalocar as coisas o mais rapidamente possível para evitar a exploração algo por muito tempo. Você não deve confiar na automático referência contam-coleta, neste caso, como é possível que deallocation pode não ocorrer em breve.

Se você está tendo uma variável com grande conteúdo, você deve considerar manualmente unset () as variáveis imediatamente quando você é feito com ele. Pode não estar relacionado com o seu caso, mas apenas tentar.
  #3 (permalink)  
Old 05-10-2007
Infiel Unbeliever is offline
Usuário
  
 

Join Date: Jul 2005
Localização: Inglaterra
Lugares: 183
Desculpe esqueci de dizer, explicitamente adicionado mysql_free_result mysql_close e chamadas para ter certeza de que ele wasnt isso. Tentei fazer

unset ($ datax);

antes de voltar a atribuir-lo e eu recebo a mesma 'pendura'.
  #4 (permalink)  
Old 05-10-2007
cbkihong cbkihong is offline Forum Advisor  
Orientador
  
 

Join Date: Sep 2002
Localização: Hong Kong, China
Posts: 1.624
Não muito certo sobre isso.

Na verdade eu fiz um simples script:


Código:
<?php

$ary = range(0, 50000);
$newary = $ary;

?>

Portanto, estou atribuindo um elemento 50001-matriz para outra variável. Lá parece não haver qualquer problema na minha velocidade PHP 5.2.0. É apenas um sistema desktop.

Mas tem a certeza das mudanças entre PHP4 e PHP5 quanto variável / objeto cessão (cópia) comportamento? Como você não pode fornecer com a versão mais simples do script que dão o comportamento, eu acho tudo mencionado selvagem pode ser apenas um palpite.
  #5 (permalink)  
Old 05-10-2007
Infiel Unbeliever is offline
Usuário
  
 

Join Date: Jul 2005
Localização: Inglaterra
Lugares: 183
Ok eu tenho o código estabelece para os mais pequenos sobre posso e ainda mostrar-lhe o que está acontecendo. O include.php é simplesmente a ligação databsae detalhes. Com os dados que tenho a consulta retorna 53068 linhas. Você chama o script com o argumento de 0, 1 ou 2 para usar os 3 consultas diferentes (para 2, 3 ou 4 colunas total devolvida). Com 0 ou 1, o script saídas immedaitely após a impressão 'Sair', com 2, há uma segunda 18-20 demora.

As colunas são devolvidos:

data: uma data / hora carimbo
r_per_sec: Um ponto flutuante numer
b_workers: Um inteiro
I_workers: Um inteiro

Se eu comentar a qualquer uma das três linhas marcadas com "* * CHAVE LINE" e depois o script sai imediatamente.


Código:
<?php
function my_log($message)
{
  $date = date("H:i:s");
  print ("$date: $message\n");
}

my_log("Script Starting");
include "include.php";

# Connect to and select database
$db = mysql_connect("$hostname", "$username", "$password");
mysql_select_db($database);

# Metrics array to replace all the code which worked out the metrics
# query variable to replace all the code which worked out the SQL
if ($argv[1] == "0")
{
  $metrics[0] = array ("apollo_APACHE_external.r_per_sec");
  $query = "SELECT DATE_FORMAT(apollo_APACHE_external.date,\"%d/%m/%y %H:%i\") AS mydate,apollo_APACHE_external.r_per_sec AS c0 FROM apollo_APACHE_external WHERE  apollo_APACHE_external.date >= 20040101000000 AND apollo_APACHE_external.date <= 20040930230000 ORDER BY apollo_APACHE_external.date";
}
elseif ($argv[1] == "1")
{
  $metrics = array ("apollo_APACHE_external.r_per_sec", "apollo_APACHE_external.b_workers");
  $query = "SELECT DATE_FORMAT(apollo_APACHE_external.date,\"%d/%m/%y %H:%i\") AS mydate,apollo_APACHE_external.r_per_sec AS c0,apollo_APACHE_external.b_workers AS c1 FROM apollo_APACHE_external WHERE  apollo_APACHE_external.date >= 20040101000000 AND apollo_APACHE_external.date <= 20040930230000 ORDER BY apollo_APACHE_external.date";
}
elseif ($argv[1] == "2")
{
  $metrics = array ("apollo_APACHE_external.r_per_sec", "apollo_APACHE_external.b_workers", "apollo_APACHE_external.i_workers");
  $query = "SELECT DATE_FORMAT(apollo_APACHE_external.date,\"%d/%m/%y %H:%i\") AS mydate,apollo_APACHE_external.r_per_sec AS c0,apollo_APACHE_external.b_workers AS c1,apollo_APACHE_external.i_workers AS c2 FROM apollo_APACHE_external WHERE apollo_APACHE_external.date >= 20040101000000 AND apollo_APACHE_external.date <= 20040930230000 ORDER BY apollo_APACHE_external.date";
}
else
{
  exit;
}

my_log("executing Query");
$result = mysql_query($query);
my_log ("Number of results:" . mysql_num_rows($result));

$count=0;
my_log("Fetching Results");
while ($row = mysql_fetch_array($result))
{
  # Build the x axis data
  $datax[$count] = $row[mydate];   # *KEY LINE*

  # Build the y axis data
  for ($i=0; $i < count($metrics); $i++)
  {
    $datay[$i][$count] = $row["c$i"];   # *KEY LINE*
  }
  $count++;
}
my_log("Freeing result set");
mysql_free_result($result);
my_log("Closing DB connection");
mysql_close($db);
my_log("Done");

# First do the X axis points
$newdatax = array();

# Reassign newdatax back to datax
$datax = $newdatax;   # *KEY LINE*
my_log("Exiting");
?>

Saída do meu sistema quando executar o script acima 3 vezes:


Código:
$ php -v
PHP 5.2.1 (cli) (built: May  3 2007 11:15:31) 
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
    with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technologies
    with Zend Optimizer v3.2.8, Copyright (c) 1998-2007, by Zend Technologies
$ php plot_graph.php 2; date
16:27:59: Script Starting
16:27:59: executing Query
16:28:01: Number of results:53068
16:28:01: Fetching Results
16:28:03: Freeing result set
16:28:03: Closing DB connection
16:28:03: Done
16:28:03: Exiting
Thu May 10 16:28:22 BST 2007
$ php plot_graph.php 1; date
16:28:37: Script Starting
16:28:37: executing Query
16:28:39: Number of results:53068
16:28:39: Fetching Results
16:28:41: Freeing result set
16:28:41: Closing DB connection
16:28:41: Done
16:28:41: Exiting
Thu May 10 16:28:41 BST 2007
$ php plot_graph.php 0; date
16:28:45: Script Starting
16:28:45: executing Query
16:28:47: Number of results:53068
16:28:47: Fetching Results
16:28:48: Freeing result set
16:28:48: Closing DB connection
16:28:48: Done
16:28:48: Exiting
Thu May 10 16:28:48 BST 2007
$

Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 11:22.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0