![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| 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 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
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. |
|
||||
|
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. |
|
||||
|
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'. |
|
||||
|
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. |
|
||||
|
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
$
|
![]() |
| Marcadores |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|