|
| 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
| |
|
|