/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
performance
Fra : Mickey


Dato : 03-06-01 18:11

hvordan tester man performance på et PHP script ?
- jeg har følgende script som jeg vil køre i en lykke x gange (til der ikke
er flere mailadresser i en textfil)

$fd = fopen ($mailliste_path, "r");
// læs liste, sæt variabler, afsend
while (!feof ($fd)) {
$data = fgets($fd, 4096);
$data = explode(":", $data);

// modtager
$recipient = "$data[1] <$data[0]>";

// mailheader
$headers = "From: $sender <$sender_email>\n";
$headers .= "Return-Path: <$admin_email>\n";
$headers .= "X-Sender: <$admin_email>\n";
$headers .= "X-Mailer: PHP" .phpversion() ."\n";
$headers .= "X-Priority: 3\n";

// indsæt signatur hvis ønsket
if($sign == "yes"){$message .= "\n\n".$signatur; $sign = "done";}

//afsend mail
mail($recipient, $subject, $message, $headers);

// udskriv "en mail sendt" prik til browser
echo "*";
}
// luk maillisten
fclose ($fd);

- er der nogen der enten kan pege på nogen "den der dræber..." eller kan
fortælle hvor/hvordan man tester sådan noget ?


--
|-|$235-|)k - Mickey
http://susie.dk - mickey(at)susie.dk
http://susie.dk/www.tv3.dk.26.05.2001.html



 
 
Jacob Bunk Nielsen (03-06-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 03-06-01 18:26

"Mickey" <news002@susie.dk> writes:

> hvordan tester man performance på et PHP script ?

Har du prøvet ab (Apache Benchmark)? Det er godt nok egentlig en test
af Apache (eller andre webservere), den følger med Apache og kan kalde
en side en masse gange i flere tråde. Bag efter fortæller den hvor
længe det tog mm.

Hvis du ikke vil have en masse mails når du gør det skal du nok
udkommentere det kald til mail(), hvilket så selvfølgelig kan være
lidt skidt, da det sikkert er noget af det tungeste, om ikke andet så
i hvert fald for din SMTP-server.

--
Jacob
"An NT server can be run by an idiot, and usually is." -- Tom Holub

Jonas Koch Bentzen (03-06-2001)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 03-06-01 18:38

Mickey skrev:

> hvordan tester man performance på et PHP script ?

Måler start- og sluttiden med time() eller microtime() og trækker
starttiden fra sluttiden for at få antal (mili)sekunder.

> $headers .= "X-Mailer: PHP" .phpversion() ."\n";

Jeg tror, det er User-Agent, der er blevet noget nær standard. Altså,
brug User-Agent-headeren i stedet for X-Mailer eller X-Newsreader.

> //afsend mail
> mail($recipient, $subject, $message, $headers);

Hvorfor ikke bruge BCC? Så går det meget hurtigere, og det belaster
også systemet mindre.

--
Venlig hilsen
Jonas Koch Bentzen

http://understroem.dk/

Jacob Bunk Nielsen (03-06-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 03-06-01 19:00

Jonas Koch Bentzen <ingen.emailadresse@eksempel.dk> writes:

> > mail($recipient, $subject, $message, $headers);
>
> Hvorfor ikke bruge BCC? Så går det meget hurtigere, og det belaster
> også systemet mindre.

BCC som i Blind Carbon Copy?

Hvordan belaster det mindre? Der kommer godt nok ikke nogen To-header
med. Min SMTP-server indsætter så selv en To-header (undisclosed
recipients), så det er da ca. den samme mængde data der skal
overføres, og der skal alligevel sendes de samme RCPT TO kommandoer
til SMTP-serveren.

Jeg har ikke lige kigget nærmere på scriptet, men jeg antager
naturligvis ikke at Mickey kan finde på at sætte alle modtagere i den
samme To-header, da det jo er dårlig emailskik, i hvert fald hvis folk
ikke kender hinanden.

--
Jacob
The Macintosh - the computer for people with only one working finger.

Jonas Koch Bentzen (03-06-2001)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 03-06-01 20:05

Jacob Bunk Nielsen skrev:

> Jonas Koch Bentzen <ingen.emailadresse@eksempel.dk> writes:
>
>> > mail($recipient, $subject, $message, $headers);
>>
>> Hvorfor ikke bruge BCC? Så går det meget hurtigere, og det belaster
>> også systemet mindre.
>
> BCC som i Blind Carbon Copy?
>
> Hvordan belaster det mindre?

Der laves da f.eks. færre kald til SMTP-serveren.

--
Venlig hilsen
Jonas Koch Bentzen

http://understroem.dk/

Jacob Bunk Nielsen (03-06-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 03-06-01 21:14

Jonas Koch Bentzen <ingen.emailadresse@eksempel.dk> writes:

> > BCC som i Blind Carbon Copy?
> >
> > Hvordan belaster det mindre?
>
> Der laves da f.eks. færre kald til SMTP-serveren.

Det har du naturligvis ret i.
Men det er stadig det samme antal mails der skal leveres og ca. lige
meget data i hver mail. Men du har ret i at der kun skal oprettes en
session mod mailserveren i modsætning til en pr. modtager.

--
Jacob
The future will be better tomorrow.

Mickey (03-06-2001)
Kommentar
Fra : Mickey


Dato : 03-06-01 21:41

"Jacob Bunk Nielsen" <spam@bunk.cc> skrev i en meddelelse
news:m3bso5723m.fsf@paven.bunk.cc...
> Jonas Koch Bentzen <ingen.emailadresse@eksempel.dk> writes:
>
> > > BCC som i Blind Carbon Copy?
> > >
> > > Hvordan belaster det mindre?
> >
> > Der laves da f.eks. færre kald til SMTP-serveren.
>
> Det har du naturligvis ret i.
> Men det er stadig det samme antal mails der skal leveres og ca. lige
> meget data i hver mail. Men du har ret i at der kun skal oprettes en
> session mod mailserveren i modsætning til en pr. modtager.

er det noget der betyder det helt store når det kommer til stykket ?
- scriptet skal gerne ku afsende ~300 mail af gangen...


--
|-|$235-|)k - Mickey
http://susie.dk - mickey(at)susie.dk
http://susie.dk/www.tv3.dk.26.05.2001.html



Jacob Bunk Nielsen (03-06-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 03-06-01 22:01

"Mickey" <news002@susie.dk> writes:

> > Men det er stadig det samme antal mails der skal leveres og ca. lige
> > meget data i hver mail. Men du har ret i at der kun skal oprettes en
> > session mod mailserveren i modsætning til en pr. modtager.
>
> er det noget der betyder det helt store når det kommer til stykket ?

Det kommer jo an på hvor meget mail man sender, og hvor vigtigt det er
at holde belastningen på serveren nede. Hvis jeg har ret i at du
"bare" kører det fra en ADSL-forbindelse, så er det nok alligevel din
linie eller antallet af mails din mailserver har lov til at aflevere
samtidig der sætter grænsen.

> - scriptet skal gerne ku afsende ~300 mail af gangen...

Tja, så skal PHP aflevere mailen til mailserveren 300 gange i stedet
for en gang, men da den alligevel skal afleveres videre til 300
forskellige mailservere rundt omkring bagefter er det nok alligevel
ikke der flaskehalsen ligger.

Hvis du let har mulighed for det, så sæt den til at sende det hele på
en gang, ellers så vil jeg bare tro det tager et par sekunder mere
at køre scriptet.

Du kan jo køre det på den tunge måde første gang og se om det tager
for lang tid, gør det det, så kan du lave det på den smarte måde.

Er der i øvrigt nogen god grund til at sende de mails fra PHP og ikke
i et shell-script eller noget andet lidt mere fikst til formålet?

--
Jacob
Don't anthropromorphize computers. They hate that.

Mickey (03-06-2001)
Kommentar
Fra : Mickey


Dato : 03-06-01 22:47

"Jacob Bunk Nielsen" <spam@bunk.cc> skrev i en meddelelse
news:m37kyt6zy0.fsf@paven.bunk.cc...
> "Mickey" <news002@susie.dk> writes:

> > er det noget der betyder det helt store når det kommer til stykket ?
>
> Det kommer jo an på hvor meget mail man sender, og hvor vigtigt det er
> at holde belastningen på serveren nede. Hvis jeg har ret i at du
> "bare" kører det fra en ADSL-forbindelse, så er det nok alligevel din
> linie eller antallet af mails din mailserver har lov til at aflevere
> samtidig der sætter grænsen.

der er ikke til min ADSL forbindelse, det skal på et webhotel hos enavn.dk

> Er der i øvrigt nogen god grund til at sende de mails fra PHP og ikke
> i et shell-script eller noget andet lidt mere fikst til formålet?

tjaa, det er jo til at køre som en browserbaseret mailliste, og det der med
shellescripts... - har ingen ide om hvordan man laver den slags + jeg ved
ikke om de kan afvikles på serveren...



--
|-|$235-|)k - Mickey
http://susie.dk - mickey(at)susie.dk
http://susie.dk/www.tv3.dk.26.05.2001.html



Jacob Bunk Nielsen (03-06-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 03-06-01 23:12

"Mickey" <news002@susie.dk> writes:

> der er ikke til min ADSL forbindelse, det skal på et webhotel hos enavn.dk

OK, jeg skal nok lade være med at komme med flere antagelser lige nu

> tjaa, det er jo til at køre som en browserbaseret mailliste, og det der med
> shellescripts... - har ingen ide om hvordan man laver den slags + jeg ved
> ikke om de kan afvikles på serveren...

Der er vel ingen der siger at det skal sendes fra serveren, er der?

Du kan lave noget i retning af:

#!/bin/bash

for modtager in modtagerliste.txt;
do
mail -s "subject" $modtager < email.txt
done

Nåh, men det var PHP vi kom fra ...

--
Jacob
But I can't upgrade my kernel, I've got some mad uptime!

Mickey (04-06-2001)
Kommentar
Fra : Mickey


Dato : 04-06-01 00:24

"Jacob Bunk Nielsen" <spam@bunk.cc> skrev i en meddelelse
news:m3lmn95i2y.fsf@paven.bunk.cc...
> "Mickey" <news002@susie.dk> writes:
>
> > der er ikke til min ADSL forbindelse, det skal på et webhotel hos
enavn.dk
>
> OK, jeg skal nok lade være med at komme med flere antagelser lige nu
>
> > tjaa, det er jo til at køre som en browserbaseret mailliste, og det der
med
> > shellescripts... - har ingen ide om hvordan man laver den slags + jeg
ved
> > ikke om de kan afvikles på serveren...
>
> Der er vel ingen der siger at det skal sendes fra serveren, er der?

hvor sku de så sendes fra ? - der er ingen telnetaccess + det er en kunde
(der ved minus om puter og web) der skal bruge det!


--
|-|$235-|)k - Mickey
http://susie.dk - mickey(at)susie.dk
http://susie.dk/www.tv3.dk.26.05.2001.html



Jacob Bunk Nielsen (04-06-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 04-06-01 00:47

"Mickey" <news002@susie.dk> writes:

> > Der er vel ingen der siger at det skal sendes fra serveren, er der?
>
> hvor sku de så sendes fra ?

Din egen computer. Skulle jeg lave sådan noget til mig selv er jeg ret
sikker på at jeg ikke ville lave det i PHP. Men det er en anden ting.

> - der er ingen telnetaccess

Man kan også bruge ssh
Nej, side til spøg. Hvis det ikke kan foregå fra din egen maskine er
det nok fint nok at lave det i PHP fra en hjemmeside.

> + det er en kunde
> (der ved minus om puter og web) der skal bruge det!

Se det ændrer jo lidt. Jeg gik og troede det var til dig selv.
Det med kunder der fatter minus om computere kender jeg godt :-\

Held og lykke med projektet!

--
Jacob
Abort, Retry, Ignore, Fail? It's so depressing!

Mickey (04-06-2001)
Kommentar
Fra : Mickey


Dato : 04-06-01 13:26

"Jacob Bunk Nielsen" <spam@bunk.cc> skrev i en meddelelse
news:m3d78l5dor.fsf@paven.bunk.cc...
> "Mickey" <news002@susie.dk> writes:
>
> > > Der er vel ingen der siger at det skal sendes fra serveren, er der?
> >
> > hvor sku de så sendes fra ?
>
> Din egen computer. Skulle jeg lave sådan noget til mig selv er jeg ret
> sikker på at jeg ikke ville lave det i PHP. Men det er en anden ting.

ja outlook express er meget godt til den slags ;)
- har jeg faktisk brugt et par gange efter at det gamle script begyndte at
strejke (uden varsel, uden forklaring - men det har det gjort på andre
servere også, derfor vil jeg nu lave mit eget!)

> > - der er ingen telnetaccess
>
> Man kan også bruge ssh
> Nej, side til spøg. Hvis det ikke kan foregå fra din egen maskine er
> det nok fint nok at lave det i PHP fra en hjemmeside.
>
> > + det er en kunde
> > (der ved minus om puter og web) der skal bruge det!
>
> Se det ændrer jo lidt. Jeg gik og troede det var til dig selv.
> Det med kunder der fatter minus om computere kender jeg godt :-\

takker - ender nok med at smide scriptet på en eller anden af de der
"download scripts" sider (i hvert fald hvis det bliver godt!)


--
|-|$235-|)k - Mickey
http://susie.dk - mickey(at)susie.dk
http://susie.dk/www.tv3.dk.26.05.2001.html



Mickey (03-06-2001)
Kommentar
Fra : Mickey


Dato : 03-06-01 19:25

"Jonas Koch Bentzen" <ingen.emailadresse@eksempel.dk> skrev i en meddelelse
news:9fdsgl$1mrv$1@news.cybercity.dk...

> > //afsend mail
> > mail($recipient, $subject, $message, $headers);
>
> Hvorfor ikke bruge BCC? Så går det meget hurtigere, og det belaster
> også systemet mindre.

det kan være scriptet virker hurtigere, men der skal jo stadig afsendes
f.eks. 300 mails fra smtp'en, og det belaster den vel ca. ligemeget om det
er i BCC: eller TO: ikke ?


--
|-|$235-|)k - Mickey
http://susie.dk - mickey(at)susie.dk
http://susie.dk/www.tv3.dk.26.05.2001.html



Anders Johannsen (03-06-2001)
Kommentar
Fra : Anders Johannsen


Dato : 03-06-01 19:22

> hvordan tester man performance på et PHP script ?
> - jeg har følgende script som jeg vil køre i en lykke x gange (til der
> ikke
> er flere mailadresser i en textfil)

Jeg har produceret et par simple funktioner til samme formål. En kørsel af

test.php
<?php
include 'xlog.php';
xlog('Begin loop');
for ($i = 0; $i < 50000; $i++) { }
xlog('End loop');
?>

vil resultere i:

## 03/06/01 20:16:56 Xlogging initiated in /home/aj/public_html/xlog.php
0.0001 Begin loop
0.0989 End loop
## 03/06/01 20:16:56 Xlog finished. Total execution time (0.1006 s.)

hvis

xlog.php:
<?php
/* Activate xlog */
define("XLOG", true);

/* Number of decimals in time */
define("XLOG_PRECISION", 4);

/* Logfile */
define("XLOG_FILE", "/tmp/xlog.txt");

if (XLOG) {
register_shutdown_function("_xlog_shutdown");
}

if (!isset($xlog_init)) {
$xlog_init = microtime();
}

function xlog($msg) {
global $xlog_msg;

$xlog_msg[microtime()] = $msg;
}

function _xlog_shutdown() {
global $xlog_init, $xlog_end,$xlog_msg;

if (empty($xlog_init)) exit;

$xlog_init = _xlog_format_time($xlog_init);
$xlog_end = _xlog_format_time(microtime());

$arrMsg[] = "## " . strftime("%d/%m/%y %R:%S", (int) $xlog_init) . " Xlogging initiated in ".__FILE__;

foreach ($xlog_msg as $time => $msg) {
$arrMsg[] = number_format(_xlog_format_time($time) - $xlog_init, XLOG_PRECISION) . " " . $msg;
}

$arrMsg[] = "## " . strftime("%d/%m/%y %R:%S", (int) $xlog_init) .
" Xlog finished. Total execution time (".number_format($xlog_end - $xlog_init, XLOG_PRECISION)." s.)";

echo $strMsg = implode("\n", $arrMsg) . "\n";

$fp = fopen(XLOG_FILE, "a");
fwrite($fp, $strMsg, strlen($strMsg));
fclose($fp);

}

function _xlog_format_time($microtime) {
$microtime = explode(" ", $microtime);
return $microtime[1] + $microtime[0];
}

?>

/A

Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408868
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste