Re: 回复: PHP Performance/Scalability

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Jose

1. Got it! I will try this tom afternoon (IST) and pass on the results.

2. However most of the php scripts are called from the web and not the command line. Also not all the methods are called. Typically, 1 out of 10 methods are called. (I am unsure how this would compare with the cli  time command). I guess we would have to divide by 10.

3. Also there is plenty of CPU available when I run a performance test on PHP. Only 10-15% is consumed. This would indicate that there is some synchronization happening in the PHP Infrastructure which is preventing the full usage of CPU (I don't see this in Java).
 
4. If I run a Java test, the result scales upto 6000+ users. For PHP, everything remains the same (code, cpu, db) but it scales only to 1500 users. There is no IO wait. And CPU/Memory are utilized only to 15%.

Thanks!

Deepak
"The greatness of a nation can be judged by the way its animals are treated - Mahatma Gandhi"


"Plant a Tree, Go Green"



On Thu, Oct 28, 2021 at 9:05 PM Jose Nobile <jose.nobile@xxxxxxxxx> wrote:
Hello Deepak, 

Test it using cli

> time php yourscript.php

What are the results for the time command?

For example:
time /opt/alt/php80/usr/bin/php test.php
1
real    0m0.010s
user    0m0.006s
sys     0m0.003s

It means each request is going to take 6 msecs from Linux user CPU  + 3 msecs from Linux system CPU + 1 msec from IO or other waits.

You should compare this to the Java applications testing in the same way, cli, no other process should be running (just the kernel and sys processes).

In this example, each request can be completed in 9 msecs from CPU + 1 msec from waits, at CPU level, it can handle 100 requests/sec per CPU thread, if it is a 16 threads CPU, it could handle 1600 reqs/sec

The HTTP interface can add some CPU, also the TLS (Elliptic curve are super fast, or the ciphers for TLS 1.3), it got under 1 msec when the HTTP interface is LSAPI from Litespeed Enterprise, which better than PHP-FPM, but first focus in the program itself, testing from cli, each individual requests optimizing at all levels, a kernel updated, NVMe for storage, DDR4 ECC 2933MHz, just loading the required PHP extensions, profiling SQL queries to be as efficient as possible anything from 1 msec or more can represent hundreds of potential more reqs/sec.

What are the results of the PHP and the Java program executed from cli in a dedicated system?


Regards,
José Nobile


On Thu, Oct 28, 2021 at 8:28 AM Deepak Goel <deicool@xxxxxxxxx> wrote:
Hello Shiplu

The resources mentioned  by you are not a bottleneck. There is plenty of it available.

Deepak
"The greatness of a nation can be judged by the way its animals are treated - Mahatma Gandhi"


"Plant a Tree, Go Green"



On Thu, Oct 28, 2021 at 2:15 PM shiplu <shiplu.net@xxxxxxxxx> wrote:
Hello Deepak,

If the code itself has a performance problem then it would show up even when the concurrency is 1. But it shows the issue when concurrency hits 1500. From 1 to 1500 there is the number when the response time starts to increase. That's where the problem arises. You mentioned it worked when increased the number of VMs. Check the system resource statistics when you are requesting to multiple VMs and a single VM.

It can happen that a metric is very high when you are using a single VM solution with 1500 concurrent requests. And the same metric would be very low in horizontal scaling setup. Some of these metrics can be
1. CPU 
2. Memory
3. IOWait time
4. Request Queue size
5. Open file descriptors
This is a metric you need to find out yourself. Once you find the metric you'll know horizontal scaling made it possible to lower it. Then for vertical scaling, you just need to increase that. 



Shiplu.Mokadd.im
Senior Unix Hacker

Innovation distinguishes between follower and leader 
—  Steve Jobs

An expert is a person who has made all the mistakes that can be made in a very narrow field.
—  Niels Bohr


On Thu, Oct 28, 2021 at 9:35 AM Deepak Goel <deicool@xxxxxxxxx> wrote:
We are using CodeIgniter 3.1.


Deepak
"The greatness of a nation can be judged by the way its animals are treated - Mahatma Gandhi"


"Plant a Tree, Go Green"



On Thu, Oct 28, 2021 at 1:03 PM Torsten Rosenberger <rosenberger@xxxxxxxxx> wrote:

>
> Some thoughts:
>
> 1. We are using a simple SQL Query in the code
>    $data = ""> >                         ->where(array('email' => $email_address))
>                         ->order_by('user_id', 'DESC')
>                         ->limit(1)
>                         ->get('users')
>                         ->row_array();
looks like you are using laraval

so i would start with $start =
microtime(true);

run you db code and the microtime(true) - $start;

and
compare this when you rewrite the code with native mysqli functions
like
mysqli_query

I know this is work but so you can get the feeling which
one is faster.
In small application you use frameworks but there could
be cases where a normal function ist much faster as writing a class
>
>
> 2. We are using mysqli
>
> 3. The SQL Query takes time in msec. And the Database is not a
> performance bottleneck
That could be OK for the database. But as in point 1. so the query
could be fast but the layer above could be slow.

I thing when you
compare the code sections with microtime you will find  the part eating
the time in the script.
>
> 4. We use mostly images with <img src=""> >
> 5. We have seen fpm outperform mod_php
>
> 6. The Java code accesses the same database (The database is on a
> seperate physical server). Also the queries are the same in Java as
> well PHP
>
> 7. I will try instrumenting the entire PHP code and see where the
> bottleneck is.
>
> Deepak
> "The greatness of a nation can be judged by the way its animals are
> treated - Mahatma Gandhi"
>
> +91 73500 12833
> deicool@xxxxxxxxx
>
> Facebook: https://www.facebook.com/deicool
> LinkedIn: www.linkedin.com/in/deicool
>
> "Plant a Tree, Go Green"
>
> Make In India : http://www.makeinindia.com/home
>
>
> On Thu, Oct 28, 2021 at 11:23 AM Torsten Rosenberger <
> rosenberger@xxxxxxxxx> wrote:
> > Hello Deepak
> >
> > I think PHP-FPM had heavily reduce the concurrency of PHP.
> > > PHP should immediately implement a API like WSGI/ASGI in python.
> > It
> > > is very simple but very useful.
> > >
> > > ------------------ 原始邮件 ------------------
> > > 发件人: "Deepak Goel" <deicool@xxxxxxxxx>;
> > > 发送时间: 2021年10月26日(星期二) 晚上11:15
> > > 收件人: "Alex"<al-php@xxxxxxx>;
> > > 抄送: "php-general General List"<php-general@xxxxxxxxxxxxx>;"Deepak
> > > Sharma"<deepak@xxxxxxxxxxx>;
> > > 主题: Re: PHP Performance/Scalability
> > >
> > > Hi
> > >
> > > The code is fairly simple. It contains a few images and a simple
> > SQL
> > > query (The same code in Java gives superb performance). We have
> > an
> > > Apache Web Server in front of php as of now. And I will try out
> > this
> > > (https://github.com/spiral/roadrunner).
> >
> > We are talking about a blackbox.
> > The code is simple ?
> >
> > How long take's
> > the sql query ?
> > What do you use to access the database PDO or mysqli ?
> > Y
> > ou wrote java is faster. Your java code access the same database ?
> >
> > You wrote a few images ?
> > Do you only show the images with <img src=""> > > or are you converting them for thumbnails etc.
> >
> > A long time ago there was a great presentation from Rasmus about
> > PHP
> > Performance.
> >
> > So a simple query on my Server's with mod_php and mysql
> > takes  0.0001 to 0.0008 seconds. If the simple query takes 0.01
> > Second
> > which looks fast but php have to wait for the DB. So there you can
> > loose factor 100 in the req/sec.
> >
> > Why are you using fpm and not the mod_php part in apache ?
> > OPcache is
> > active ?
> >
> > There are a lot of parameters we don't know.
> >
> > If you benchmark
> > your code with an easy microtime(true) call to see how long your
> > script
> > takes.
> > If you store the data in a file when you run your benchmark you
> > can maybe see if a code part is waiting for the database or
> > something
> > else.
> > So that the bottleneck ist not php.
> >
> > So i would go through the code
> > with microtime() an look what takes long and then go deepter.
> >
> > if the
> > code is heavy and the result dosen't change or a refresh after 5
> > min is
> > ok you can use the APCu cache or so on.
> >
> > If your code is super fast an still slow requests then you have to
> > strace the apache process to see if there is something miss
> > configured.
> >
> >
> > So as a PHP developer we cann't accept that Java is faster :)
> >
> > BR/Torsten
> >
> > > Thanks.
> > >
> > > Deepak
> > > "The greatness of a nation can be judged by the way its animals
> > are
> > > treated - Mahatma Gandhi"
> > >
> > > +91 73500 12833
> > > deicool@xxxxxxxxx
> > >
> > > Facebook: https://www.facebook.com/deicool
> > > LinkedIn: www.linkedin.com/in/deicool
> > >
> > > "Plant a Tree, Go Green"
> > >
> > > Make In India : http://www.makeinindia.com/home
> > >
> > >
> > > On Tue, Oct 26, 2021 at 5:15 PM Alex <al-php@xxxxxxx> wrote:
> > > > Hi.
> > > >
> > > > On 26.10.21 11:53, Deepak Goel wrote:
> > > > > Hello
> > > > >
> > > > > I have a very simple PHP application which I develop on
> > Apache-
> > > > Web-Server. However the application does
> > > > > not scale beyond 1500 concurrent users (150 requests/sec),
> > even
> > > > though there is plenty of hardware
> > > > > available (CPU is getting utilized 15%, Memory is getting
> > > > utilized 15%).
> > > > >
> > > > > On a similar note, when I develop the same application in
> > Java,
> > > > it scales to more than 6000 concurrent
> > > > > users (600 requests/sec) on the same hardware.
> > > > >
> > > > > Any pointers on how to address this scalability issue?
> > > >
> > > > The question is how "simple" is the PHP Code?
> > > > Maybe you can tune the Code or use another Server in front of
> > PHP
> > > > FPM like haproxy, Caddy, nginx?
> > > > Maybe you can try to run https://github.com/spiral/roadrunner
> > to
> > > > execute the PHP Code.
> > > >
> > > > Jm2c
> > > >
> > > > Regards
> > > > Alex
> > > >
> > > > > Thanks!
> > > > >
> > > > > Deepak
> > > > > "The greatness of a nation can be judged by the way its
> > animals
> > > > are treated - Mahatma Gandhi"
> > > > >
> > > > > +91 73500 12833
> > > > > deicool@xxxxxxxxx <mailto:deicool@xxxxxxxxx>
> > > > >
> > > > > Facebook: https://www.facebook.com/deicool <
> > > > https://www.facebook.com/deicool>
> > > > > LinkedIn: www.linkedin.com/in/deicool <
> > > > http://www.linkedin.com/in/deicool>
> > > > >
> > > > > "Plant a Tree, Go Green"
> > > > >
> > > > > Make In India : http://www.makeinindia.com/home <
> > > > http://www.makeinindia.com/home>
> > > >
> >


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux