Re: 回复: PHP Performance/Scalability

[email protected] (Jose Nobile)
Newsgroups php.general
Message-ID <CAJ69RURuJGovp_1mmvjdS8K9tm2M2R621UVGn7hhm=2Ppjbn-w@mail.gmail.com>
Hi,
I have read all the threads, I'm updated!

The waits that I've mentioned before are a signal that can prevent you from
using the available CPU. For example, what  ifis the PHP has to read an
external HTTP resource that needs to fetch? It will be in the wait time
(network IO), rather than be speculative, test it.

You should execute the exact same code when executing from cli than the
HTTP interface, just to isolate the issue and some tests.


Regards,
José Nobile


On Thu, Oct 28, 2021 at 12:43 PM Deepak Goel <[email protected]> wrote:

> 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"
>
> +91 73500 12833
> [email protected]
>
> 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 9:05 PM Jose Nobile <[email protected]> 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 <[email protected]> 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"
>>>
>>> +91 73500 12833
>>> [email protected]
>>>
>>> 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 2:15 PM shiplu <[email protected]> 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 <[email protected]> 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"
>>>>>
>>>>> +91 73500 12833
>>>>> [email protected]
>>>>>
>>>>> 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 1:03 PM Torsten Rosenberger <
>>>>> [email protected]> wrote:
>>>>>
>>>>>>
>>>>>> >
>>>>>> > Some thoughts:
>>>>>> >
>>>>>> > 1. We are using a simple SQL Query in the code
>>>>>> >    $data = $this->db->select('user_id,email')
>>>>>> >                         ->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
>>>>>> > [email protected]
>>>>>> >
>>>>>> > 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 <
>>>>>> > [email protected]> 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" <[email protected]>;
>>>>>> > > > 发送时间: 2021年10月26日(星期二) 晚上11:15
>>>>>> > > > 收件人: "Alex"<[email protected]>;
>>>>>> > > > 抄送: "php-general General List"<[email protected]
>>>>>> >;"Deepak
>>>>>> > > > Sharma"<[email protected]>;
>>>>>> > > > 主题: 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
>>>>>> > > > [email protected]
>>>>>> > > >
>>>>>> > > > 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 <[email protected]> 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
>>>>>> > > > > > [email protected] <mailto:[email protected]>
>>>>>> > > > > >
>>>>>> > > > > > 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>
>>>>>> > > > >
>>>>>> > >
>>>>>>
>>>>>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.