Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Koliko se opterecuje server sa scriptom?

[es] :: PHP :: Koliko se opterecuje server sa scriptom?

[ Pregleda: 3022 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

define

Član broj: 41934
Poruke: 288
*.beotel.net.



Profil

icon Koliko se opterecuje server sa scriptom?19.01.2006. u 20:02 - pre 221 meseci
Kako mogu znati koliko ce moja scripta da opterecuje server, da bih sve odradio sto bolje?

Konkretno me interesuje da li mnogo opterecuje kada obavim 3 kverija da povadim neke podatke, koje posle smestim u array i posle ih stampam u 3 razlicite while petlje.

[Ovu poruku je menjao define dana 19.01.2006. u 21:14 GMT+1]
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
195.252.99.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Koliko se opterecuje server sa scriptom?19.01.2006. u 21:26 - pre 221 meseci
Nije to veliko opterecenje...
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

dado_k
Varaždin

Član broj: 57122
Poruke: 300
*.cmu.carnet.hr.

ICQ: 326865106
Sajt: radim baš novi sajt u ph..


Profil

icon Re: Koliko se opterecuje server sa scriptom?19.01.2006. u 21:26 - pre 221 meseci
mislim da se ne trebaš previše time opterečivati!
 
Odgovor na temu

Jezdimir Lončar
Aka Blazeme
PHP/jQuery Dev, BildStudio
Crna Gora / Pljevlja

Član broj: 74833
Poruke: 674
*.crnagora.net.

Jabber: jezdonet@gmail.com


+4 Profil

icon Re: Koliko se opterecuje server sa scriptom?19.01.2006. u 22:27 - pre 221 meseci
Recimo na ovom mom serveru sam stavio While petlju dok je $x > 0 ,a $x sam stavio 1 000 000.On mi je rekao da je to ogromno opterecenje i da mogu izgubiti hosting.Mislim da ovo sto si ti naveo nije ni Bog zna koji dio opterecenja koje sam ja uradio na server.
“I never think of the future - it comes soon enough.” - Albert Anštajn (Albert Einstein)
 
Odgovor na temu

Ivan Miladinović
Ivan Miladinovic
All around the web

Član broj: 26492
Poruke: 592
*.smin.sezampro.yu.

ICQ: 321748581
Sajt: www.sanovniktumacenjesnov..


+1 Profil

icon Re: Koliko se opterecuje server sa scriptom? - prosirenje teme20.01.2006. u 21:57 - pre 221 meseci
Da ne otvaram novu temu...

Koristi li neko od vas funkciju sleep()?

Negde sam procitao da ukoliko je rec o nekom loop-u ili tako necemu sto se desava npr. 10000 puta, sleep() moze da dosta sjebe server, napuni mu output buffer ili tako nesto pa se radi nesto flush()...

Konkretno pitanje glasi:

Da li kada koristim funkciju sleep(1); u nekom loop, tipa while ima redova u bazi radi nesto... a redova ima 10000, da li opterecujem mnooogooo server?

I kako se koristi flush();

I ja cu da procitam na PHP.net-u sve sto mi treba....
Ali pitam za iskustva.

Puno pozdrava!
 
Odgovor na temu

Frane Marinković
MNGR & Technical Support Dept.,
Get-Host.net Group
Hrvatska

Član broj: 23984
Poruke: 513
*.adsl.net.t-com.hr.

Jabber: frane.marinkovic@elitesecurity.org
Sajt: get-host.net


+1 Profil

icon Re: Koliko se opterecuje server sa scriptom?20.01.2006. u 22:13 - pre 221 meseci
sleep() uzima i do 10MB rama,evo na php.net sam prije 1mj, a i sad osvježio pamčenje da se sa sleep može i blokirati neki serveri, evo text
Citat:

You can of course *always* run a DoS on any server at any time. If you have a few hundred hijacked machines, then you can incapacitate even huge sites like amazon or worldpay who have really large resources, as has been done before. Unluckily, there is not much you can do against braindead crimials. Even if you block them on the IP layer, they can still fill the wire with datagrams
However, sleep() makes an attack a lot cheaper. If the target uses for example sleep(5); then the attacker can safely assume that one request will keep one process running for 5 seconds.
So, only a few dozen requests (w/ dropped connections), will safely run you into "MaxClients" and you will not be able to accept legitimate requests any more. So what, increase "MaxClients" then, I hear you say? The attacker can do this for hours, but you can't...
10MB of memory for a server process is not a unreasonable assumption. If your web server has 2GB of RAM then it will start thrashing after starting 200 processes. A 32 bit machine is out of virtual memory after 400. That can be achieved using a 14.4k modem...


don't try this at home
 
Odgovor na temu

Ivan Miladinović
Ivan Miladinovic
All around the web

Član broj: 26492
Poruke: 592
*.smin.sezampro.yu.

ICQ: 321748581
Sajt: www.sanovniktumacenjesnov..


+1 Profil

icon Re: Koliko se opterecuje server sa scriptom?20.01.2006. u 23:54 - pre 221 meseci
Ima li neko ideju kako drugacije to izvesti?

Hocu da skript napravi jedan loop, pa da napravi malu pauzicu, pa da nastavi dalje.
 
Odgovor na temu

dragancesu
subotica

Član broj: 38340
Poruke: 2189
*.40.eunet.yu.



+73 Profil

icon Re: Koliko se opterecuje server sa scriptom?21.01.2006. u 08:31 - pre 221 meseci
Kojeg to smisla treba da ima? Svi se trude da brze urade
Pomozite Micro$oftu u borbi protiv piraterije, poklonite prijatelju Linux
 
Odgovor na temu

Ivan Miladinović
Ivan Miladinovic
All around the web

Član broj: 26492
Poruke: 592
*.adsl.sezampro.yu.

ICQ: 321748581
Sajt: www.sanovniktumacenjesnov..


+1 Profil

icon Re: Koliko se opterecuje server sa scriptom?21.01.2006. u 14:20 - pre 221 meseci
Kakvo je to pitanje? Pa ima svoju svrhu. Gledaj primer iz ove teme:

Citat:
Neohacker: Recimo na ovom mom serveru sam stavio While petlju dok je $x > 0 ,a $x sam stavio 1 000 000.On mi je rekao da je to ogromno opterecenje i da mogu izgubiti hosting.Mislim da ovo sto si ti naveo nije ni Bog zna koji dio opterecenja koje sam ja uradio na server.



sta uraditi u ovom slucaju?

Ja sam razmisljao da bi se ovde negde mogao staviti sleep i u tom slucaju bi se ovaj 1 000 000 raspodelio sa pauzama i ne bi toliko opterecivao server.

Ili ja fantaziram?

Recite sta mislite, nikada to nisam radio ali mi je to trenutno neophodno, pa trazim logicno resenje.


Hvala.
Puno pozdrava od Ivana.
 
Odgovor na temu

Techcode.NET
Aleksandar Petorvic
Beograd

Član broj: 84870
Poruke: 13
213.244.197.*

Sajt: www.techcode.net


Profil

icon Re: Koliko se opterecuje server sa scriptom?14.02.2006. u 22:14 - pre 220 meseci
Imas vise opcija za resavanje tog problema.

Jedna je i sleep - to je svakako laksa za implementaciju.

Ali sta ako se server resetuje na pola tvog posla? U nekim slucajevima je to prihvatljivo, a nekada nije ...

Druga opcija je dosta komplikovanija, ali je zato mnogo sigurnija. U teoriji bi to bilo da posao izdelis i odradjujes iz X puta. Podesis cron (scheduled task) da svakih Y sekundi/minuta/sati zove tvoj program. A pri tome pamtis dokle si stigao sa poslom, pa sledeci put nastavis ... tako sto recimo koristis bazu sa transakcijama (MySQL izmedju ostalih podrzavatransakcije ali kada je tabela InnoDB tipa).



Inace obicno se kod web aplikacija desava da sama inicializacija prevodioca bude veci deo posla (PHP, Perl, Ruby, Python ... ). A jos vise ucitavanje kalasa (modula ili kako se vec to zove u svakom od navedenih).

Napisi obican hello world ( print('Hello World'); ) a u drugoj varijanti dodaj i ucitavanje nekih vecih klasa bez da ista radis sa njima, pa sa ab (dolazi uz Apache) benchmarkuj oba... Naravno ako klase i prevodilac nemaju "lazy loading" koji prevodi samo ono sto se koristi u aplikaciji. Neverovatno kolika je razlika.

To naravno ne znaci da klase ne trebaju da se koriste ... glupo je i navoditi razloge zbog kojih ih treba koristiti.


Resenja tipa FastCGI, SGCI (koja rade na mnogim web serverima) ili u slucaju Apache web servera mod_perl, mod_php, mod_python, mod_* ... interpretator "ugradjuje" u sam Apache. Smanjuju opterecenje jer je prevodilac stalno u memoriji - a u nekim resenjima su i klase koje aplikacija koristi samo jednom prevedene na pocetku, kao i same aplikacije. Cak je moguce odrzavati i stalnu konekciju sa bazom u nekim implementacija ...

Pod obicnim CGI-jem, bilo da je u pitanju PHP, Perl, ili exe koji je dobijen kompajliranjem C/C++ koda - dobar deo ode na sam CGI deo.

A sto se interakcije sa bazom tice - mnogo vise "kosta" samo konektovanje nego neki "obican" upit. Naravno to ne vazi za tabele sa zilion rekorda i suludim upitima :)


Za kraj, evo slican primer programcica koji svakih par sati obradjuje neke poruzbine.Nije bas ono sto tebi treba, ali veoma slicno. A ocigledno da je veoma bitno da se neka ne propusti, ili recimo dva puta obradi ...

Pisan je u Perl-u koji je slican sa PHP-om (i ostalim jezicima jer i onako svi sada "pozajmljuju" dobre ideje jedni od drugih).

Code:

#!/usr/bin/perl

#######################################################################################


use lib '/home/reorder1/www/AutoReorder/CPAN/';
use lib '/home/reorder1/www/';

use strict;
use HTML::Template;
use Locale::Currency::Format;

use AutoReorder::Foundation::Email;
use AutoReorder::Foundation::DataBase;


my $DB = AutoReorder::Foundation::DataBase->new('/home/reorder1/www/AutoReorder/Config/databases.conf');

$DB->dbh->{RaiseError} = 1;
$DB->dbh->{PrintError} = 1;

# There is no chance that this will be runned under mod_perl, right?
# Storing those here so we wouldn't make same queries several times
my $customers = {}; # Will hold customers info


########## Get all recurring orders that should be reordered today ##########
my $SQL = <<SQL;

SELECT * FROM recurring_orders WHERE
((start_date <= NOW()) AND (last_reorder IS NULL))
OR
((((UNIX_TIMESTAMP(CURRENT_DATE()) - UNIX_TIMESTAMP(start_date)) / 86400) % frequency) = 0
AND (last_reorder < NOW()));
SQL

my $recurring = $DB->execute(sql     => $SQL,
                             method  => 'fetchall_aohref');

########## Get info about all the products ##########
$SQL = <<SQL;
SELECT p.products_id, p.products_price, pd.products_name, tr.tax_rate tax_rate
FROM products p INNER JOIN products_description pd ON p.products_id = pd.products_id
LEFT JOIN tax_class tc ON tc.tax_class_id = p.products_tax_class_id
LEFT JOIN tax_rates tr ON tc.tax_class_id = tr.tax_class_id
WHERE p.products_price > 0 AND p.products_status = 1                   
SQL

my $products = $DB->execute(sql => $SQL,
                            database => 'oscommerce')->fetchall_hashref('products_id');

########## Do the things for each found recurring order ##########
foreach my $row (@{$recurring}){
    my $items = $DB->execute(
        sql      => 'SELECT * FROM recurring_items WHERE recurring_id = ?',
        data     => [$row->{id}],
        method   => 'fetchall_aohref',);
    
    my $customer_id = $row->{customer_id};

    unless(defined $customers->{$customer_id}){
        $customers->{$customer_id} =
            $DB->execute(sql    => 'SELECT * FROM customers WHERE id =?',
                         data   => [$row->{customer_id}])->fetchrow_hashref();
    }
    
    ## Turn off autocommit
    $DB->dbh()->{AutoCommit} = 0;
    $DB->dbh()->{RaiseError} = 1;
    $DB->dbh()->{PrintError} = 1;
    
    eval {
        my $order_id = &make_order($customers->{$customer_id}, $row, $items);
        &send_email($order_id);
        
        $DB->execute(sql => 'UPDATE recurring_orders SET last_reorder = CURRENT_DATE()
                             WHERE id = ?',
                     data => [$row->{id}]);
        
        ##### TRANSACTION END #####
        $DB->dbh()->commit();
    };
    
    if($@){
        # OOOPS! Transaction failed.
        eval {  $DB->dbh()->rollback()   };
        print "Couldnt insert/add data", "There is a problem with transaction.";
    }
}

print "All recurrig orders for this day processed sucesfully.";

sub make_order {
    my ($customer, $recurring, $items) = @_;
    
    require Date::Format;
    my $date = Date::Format::time2str('%Y-%m-%d', time);
    
        $DB->insert(table => 'orders',
                    data => {date           => $date,
                             recurring_id   => $recurring->{id},
                             customer_id    => $recurring->{customer_id},
                             });
        
        my $order_id = $DB->dbh()->{'mysql_insertid'};
        
        foreach my $row (@{$items}){
            my $product_id = $row->{product_id};
            
            my $product = $products->{$product_id};
            
            $DB->insert(table   => 'order_items',
                        data    => {product_id      => $product_id,
                                    order_id        => $order_id,
                                    quantity        => $row->{quantity},
                                    tax_percentage  => ($customer->{pays_tax} ? $product->{tax_rate} : 0),
                                    # If customer doesn't pays tax, set it to 0 ...
                                    price           => $product->{products_price}
                                    });
        }
        
    return $order_id;
}

sub send_email {
    my $order_id = shift;
    
    my $order = $DB->execute(sql => "SELECT id, recurring_id, customer_id, status, comment,
                             DATE_FORMAT(date, '%m-%d-%Y') as date FROM orders WHERE id = ?",
                             data => [$order_id],)->fetchrow_hashref();
    
    my $customer = $DB->execute(sql => 'SELECT * FROM customers where id = ?',
                                data => [$order->{customer_id}],
                                method => 'fetchall_aohref');
    
    my $STH = $DB->execute(sql => "SELECT *, (price + price * tax_percentage / 100) as 'price_tax'
                           FROM order_items WHERE order_id = ?",
                           data => [$order_id]);
    
    my $items;
    $order->{grand_total} = 0;
    
    while(my $row = $STH->fetchrow_hashref()){
        $row->{sub_total} = $row->{quantity} * $row->{price_tax};
        
        $order->{grand_total} = $order->{grand_total} + $row->{sub_total};
        
        $row->{price} = currency_format('usd', $row->{price}, FMT_SYMBOL);
        $row->{tax_percentage} = substr(currency_format('usd', $row->{tax_percentage}, FMT_SYMBOL),1) . '%';        
        $row->{price_tax} = currency_format('usd', $row->{price_tax}, FMT_SYMBOL);
        $row->{sub_total} = currency_format('usd', $row->{sub_total}, FMT_SYMBOL);
        $row->{product_name} = $products->{$row->{product_id}}->{products_name};
        
        push (@{$items},$row);
    }
    
    $order->{grand_total} = currency_format('usd', $order->{grand_total}, FMT_SYMBOL);
    
    my $template = HTML::Template->new(filename => '/home/reorder1/www/AutoReorder/Templates/Email/order.dwt', 
                                       die_on_bad_params => 0);
    
    $template->param(%{$order});
    $template->param(customer => $customer);
    $template->param(items => $items);
    
    my $mail = AutoReorder::Foundation::Email->new(type         => 'html',
                                                   subject      => 'New Order #' . $order_id,
                                                   text         => $template->output(),
                                                   config_file  => '/home/reorder1/www/AutoReorder/Config/email.conf');
    
    return 1; 
}




Heh - eto sad sam primetio par stvari koje mogu da budu pomerene van petlji pa bi za koji sekund ubrzale stvari :) Ali u trenutku pisanja nije bila potreba za daljom optimizacijom posto radi zadovoljavajuce ...
 
Odgovor na temu

[es] :: PHP :: Koliko se opterecuje server sa scriptom?

[ Pregleda: 3022 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.