The UNIX and Linux Forums  


Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
exiting fra script arghya_owen Shell programmering og Skripting 1 06-02-2008 07:36
Exiting fra skript når feilen oppstår Sreejith_VK Shell programmering og Skripting 4 04-25-2008 04:53
Script Ikke Exiting?? lesstjm Shell programmering og Skripting 1 07-11-2007 12:58
Shell script ikke spennende Gracefully smithK Shell programmering og Skripting 5 02-08-2007 06:48
exiting i c ruffenator High Level Programmering 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 Søk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 05-10-2007
Vantro Unbeliever is offline
Registrert bruker
  
 

Bli Dato: juli 2005
Location: England
Innlegg: 183
PHP5 Script "Frys" før spennende

Jeg har nylig oppgradert et system fra php 4.4.2 til php 5.2.1, og en av mine scripts har startet oppfører seg veldig merkelig. Jeg har prøvd Google, men kommer opp blank hittil.

Utgangspunktet hva scriptet gjør er å velge en stor mengde data fra en mysql (4.1.21), vil gjøre noen manipulasjon, den Eiendommer et diagram (bruker jpgraph 2,2). Jeg fjernet alle jpgraph kode og er fremdeles å få problem. Hva skjer er skriptet "henger" i en periode etter kjøre siste php kommandoen før faktisk spennende. I løpet av denne perioden prosessen tar opp mye av CPU-tid (ett enkelt prosessor meste), men hvis du truss prosessen du får ingen effekt før det endelig utganger (når du ser stdin / ut / feile lukket osv.).

Etter å sette ulike debug uttalelser i fant jeg ut at hvis jeg kommentert ut følgende linje skriptet ikke henge før exiting.

$ datax \u003d $ newdatax;

En ganske ufarlige linje. På dette punktet $ datax er et stort utvalg (mange tusen verdier lang) og $ newdatax en matrise med resultatene fra analyse av opprinnelige $ datax annen måte (for det meste snakk om å ta alle N-te oppføring fra $ datax). På dette punktet ønsker jeg å kvitte seg med den opprinnelige $ datax og erstatte den med den nye $ newdatax og jeg ønsker å gjøre mer maniplulation senere.

Hvis $ datax er ca 10.000 eller så rekker det er en merkbar henger når skriptet utganger på 50.000 rader taket er over 20 sekunder. Under php 4 jeg hadde ingen problemer med denne koden når det var over 200.000 rader i matrisen.

Selv om jeg bare endre den linjen til

$ datax \u003d array ();

Jeg får lignende (men mye mindre) "henge" før skriptet avsluttes og $ datax array må være ganske stor før det blir merkbare.

Systemet kjører på Solaris 9 på en v480 med 4 prosessorer og 16 GB RAM. Jeg har prøvd det med og uten Zend optimiser (v3.2.8) uten merkbar forskjell.

Hjelp verdsatt.
  #2 (permalink)  
Old 05-10-2007
cbkihong cbkihong is offline Forum Advisor  
Rådgiver
  
 

Bli Dato: Sep 2002
Sted: Hong Kong, Kina
Innlegg: 1624
Har du lukket DB forbindelse umiddelbart når du er ferdig med databasen eller erklæring håndterer etc.? Hvis du kjører en ressurs-krevende script, bør du sørge for at du deallocate ting så raskt som mulig for å unngå å holde noe for lenge. Du bør ikke stole på den automatiske referanse-count søppel samling i dette tilfellet så er det mulig at deallocation ikke skje fort nok.

Hvis du har en variabel med veldig store ting, bør du vurdere manuelt unset () variablene umiddelbart når du er ferdig med det. Det kan ikke være relatert til din sak, men bare prøve.
  #3 (permalink)  
Old 05-10-2007
Vantro Unbeliever is offline
Registrert bruker
  
 

Bli Dato: juli 2005
Location: England
Innlegg: 183
Beklager glemte å si, jeg lagt mysql_free_result og mysql_close anrop for å kontrollere at den var ikke det. Jeg har prøvd å gjøre

unset ($ datax);

før du tilordner den og jeg får den samme "henge".
  #4 (permalink)  
Old 05-10-2007
cbkihong cbkihong is offline Forum Advisor  
Rådgiver
  
 

Bli Dato: Sep 2002
Sted: Hong Kong, Kina
Innlegg: 1624
Ikke så sikker på om det.

Faktisk jeg laget et enkelt skript:


Code:
<?php

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

?>

Så jeg gir 50001-element matrise til en annen variabel. Det ser ikke ut til å være en hastighet problemet på PHP 5.2.0. Det er bare en stasjonær systemet.

Men er du sikker på endringer mellom PHP4 og PHP5 om variabel / object oppdrag (kopiering) oppførsel? Som du kan ikke gi med den enkleste versjonen av skriptet som gir atferd, vel alt nevnt kan bare være et wild guess.
  #5 (permalink)  
Old 05-10-2007
Vantro Unbeliever is offline
Registrert bruker
  
 

Bli Dato: juli 2005
Location: England
Innlegg: 183
Ok jeg har koden ned til om det minste jeg kan og fremdeles vise deg hva som skjer. Den include.php er ganske enkelt den databsae forbindelse detaljer. Med de data jeg har søket returnerer 53068 rader. Du ringer script med argumentet 0, 1 eller 2 for å bruke 3 forskjellige søk (for 2, 3 eller 4 totalt kolonner returnerte). Med 0 eller 1 skriptet avsluttes immedaitely etter utskrift 'Exiting', med 2 det er en 18-20 andre forsinkelse.

Kolonnene returnerte er:

dato: en dato / tid stempel
r_per_sec: A Floating Point numer
b_workers: Et heltall
I_workers: Et heltall

Hvis jeg kommentere ut ett av tre linjer merket "* KEY LINE *" da skriptet avsluttes umiddelbart.


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");
?>

Ouput fra systemet når du kjører over script 3 ganger:


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
$

Closed Thread

Hugseliste

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 12:54.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0