Re: 回复: PHP Performance/Scalability
| From: | Deepak Goel | Date: | Thu, 28 Oct 2021 18:16:53 +0000 |
| Subject: | Re: 回复: PHP Performance/Scalability | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 12 13 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-327801@lists.php.net to get a copy of this message | ||
Hi
Let me check it out. Will get back.
Also, has anyone deployed PHP and it has scaled vertically to a higher
number of users? Can you please post the results and the machine
configuration details? It will help.
Thanks.
On Thu, 28 Oct 2021, 23:39 Jose Nobile, <jose.nobile@gmail.com> wrote:
> 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 <deicool@gmail.com> 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
>> deicool@gmail.com
>>
>> 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 <jose.nobile@gmail.com>
>> 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@gmail.com> 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
>>>> deicool@gmail.com
>>>>
>>>> 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 <shiplu.net@gmail.com> 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@gmail.com> 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
>>>>>> deicool@gmail.com
>>>>>>
>>>>>> 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 <
>>>>>> rosenberger@taoweb.at> 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
>>>>>>> > deicool@gmail.com
>>>>>>> >
>>>>>>> > 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@taoweb.at> 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@gmail.com>;
>>>>>>> > > > 发送时间: 2021年10月26日(星期二) 晚上11:15
>>>>>>> > > > 收件人: "Alex"<al-php@none.at>;
>>>>>>> > > > 抄送: "php-general General
>>>>>>> > > > List"<php-general@lists.php.net
>>>>>>> >;"Deepak
>>>>>>> > > > Sharma"<deepak@techxp.tech>;
>>>>>>> > > > 主题: 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@gmail.com
>>>>>>> > > >
>>>>>>> > > > 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@none.at> 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@gmail.com <|U
>>>>>>> > > > > > ,ÂíÃ…,©lmailto:deicool@gmail.com>
>>>>>>> > > > > >
>>>>>>> > > > > > 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>
>>>>>>> > > > >
>>>>>>> > >
>>>>>>>
>>>>>>>