![]() |
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Rules | Lenker | Album | FAQ | Medlemsliste | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
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. |
|
||||
|
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. |
|
||||
|
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. |
|
||||
|
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
$
|
![]() |
| Hugseliste |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|