Re: 回复: PHP Performance/Scalability
[email protected] (Deepak Goel)
| Newsgroups | php.general |
|---|---|
| Message-ID | <CA+b7NVVsiRU62LG-yLFz5z7oqD0XQ6mwE2Ej3L2gv35pt9BpKg@mail.gmail.com> |
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, <[email protected]> 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 <[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> >>>>>>> > > > > >>>>>>> > > >>>>>>> >>>>>>>