![]() |
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici. |
Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
|
||||
| Fil | Thread Starter | Forum | Réponses | Last Post |
| sortie de script | arghya_owen | De programmation et de script Shell | 1 | 06-02-2008 07:36 AM |
| Sortie d'erreur de script se produit lorsque | Sreejith_VK | De programmation et de script Shell | 4 | 04-25-2008 04:53 AM |
| Script Non Sortie? | lesstjm | De programmation et de script Shell | 1 | 07-11-2007 12:58 PM |
| Shell script de ne pas sortir avec grâce | smithK | De programmation et de script Shell | 5 | 02-08-2007 06:48 PM |
| d'en sortir en c | ruffenator | High Level Programming | 3 | 04-28-2002 03:31 AM |
![]() |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
|
|
||||
|
PHP5 Script 'Freeze' avant d'en sortir
J'ai récemment mis à niveau un système à partir de PHP 4.4.2 à PHP 5.2.1, et un de mes scripts a commencé à se comporter très bizarrement. J'ai essayé google, mais se vide jusqu'à présent.
Fondamentalement, ce que le script ne fait que choisir une grande quantité de données à partir d'un mysql (4.1.21) de base de données, faire des manipulations, les parcelles d'un graphique (utilisation de jpgraph 2,2). J'ai supprimé tous les jpgraph code et je suis toujours et encore le problème. Qu'est-ce qui se passe, c'est le script "bloque" pour une période de temps après l'exécution de la dernière commande php avant de sortir. Au cours de cette période de temps, le processus prend beaucoup de temps processeur (un seul processeur le plus souvent), mais si tu fermes le processus, vous ne recevrez pas de sortie jusqu'à ce que finalement il des sorties (quand vous voyez stdin / out / err fermé, etc.) Après avoir mis debug divers états dans J'ai trouvé que si je commente la ligne suivante du script n'a pas raccrocher avant d'en sortir. datax $ \u003d $ newdatax; Une jolie ligne inoffensif. À ce stade $ datax est un grand tableau (plusieurs milliers de valeurs de long), et $ newdatax un tableau avec les résultats de l'analyse de l'original $ datax d'une certaine manière (la plupart d'un cas de prise de chaque Nième entrée à partir de $ datax). À ce stade, je tiens à jeter l'original datax $ et le remplacer par le nouveau $ newdatax mai, et je tiens à faire plus maniplulation plus tard. Si datax est d'environ $ 10000 ou si les lignes il ya une notable bloquer lorsque le script quitte à 50000 lignes de la pendre est de plus de 20 secondes. Sous php 4, j'ai eu aucun problème avec ce code quand il y avait plus de 200.000 lignes de la matrice. Même si je change simplement la ligne de $ datax \u003d array (); I get similaire (mais beaucoup plus petit) "blocage", avant les sorties et le script de dollars datax tableau doit être assez large, avant qu'il ne soit perceptible. Le système est en cours d'exécution sur Solaris 9 sur un V480 avec 4 processeurs et 16 Go de RAM. J'ai essayé avec et sans le Zend optimiser (v3.2.8), sans différence notable. Toute aide appréciée. |
|
||||
|
Avez-vous fermé la connexion DB immédiatement lorsque vous avez terminé avec la base de données ou de la déclaration poignées etc? Si vous utilisez un script à forte intensité de ressources, vous devez vous assurer que vous désallouer les choses aussi vite que vous pouvez pour éviter de tenir quelque chose de trop long. Vous ne devez pas compter sur le renvoi automatique de compte la collecte des ordures, dans ce cas il est possible que Désalloue mai pas assez tôt.
Si vous avez une variable avec le contenu très large, vous devriez envisager manuellement unset () les variables immédiatement lorsque vous avez fini avec elle. Il mai de ne pas être lié à votre cas, mais juste essayer. |
|
||||
|
Désolé oublié de dire, je explicitement ajouté mysql_free_result mysql_close appels et de faire en sorte que il wasnt. J'ai essayé de faire
unset ($ datax); avant de re-attribuer et j'obtiens le même "blocage". |
|
||||
|
Pas trop sûr de cela.
En fait, j'ai fait un simple script: Code:
<?php $ary = range(0, 50000); $newary = $ary; ?> Mais êtes-vous sûr de l'évolution entre PHP4 et PHP5 en ce qui concerne la variable / objet de cession (copie) de comportement? Comme vous ne pouvez pas fournir à la simple version du script qui donnent le comportement, je pense tout simplement être mentionné sauvage deviner. |
|
||||
|
Ok, j'ai le code à propos de la plus petite et je peux encore vous montrer ce qui se passe. Le include.php est tout simplement la connexion databsae détails. Avec les données que j'ai la requête renvoie 53.068 lignes. Vous appelez le script avec l'argument 0, 1 ou 2 pour utiliser les 3 requêtes différentes (pour les 2, 3 ou 4 colonnes retourné total). Avec 0 ou 1, le script quitte immedaitely après l'impression «Sortie», avec 2 il ya un 18-20 secondes de retard.
Les colonnes sont retournées: date: une date / heure r_per_sec: Une virgule flottante numer b_workers: Un nombre entier I_workers: Un nombre entier Si je commenter l'une des trois lignes marquées "* KEY LINE *" puis le script quitte immédiatement. Code:
<?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");
?>
Code:
$ 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
$
|
![]() |
| Bookmarks |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|