Moin, wie einige mitbekommen haben ist heute/gestern der Apache freigedreht. Grund dafür war, dass ich im Zuge diverser Performance-Optimierungen auf unserem Testserver (der noch auf Debian läuft) den MPM-Mode vom Apache auf Worker gestellt hatte. Nebenbei hatte ich das Konstrukt noch auf PHP-FPM gedreht, hatte mich aber vorerst dagegen entschieden das auch direkt auf den Live-Maschinen einzusetzen. Getestet, soweit wie nötig gehalten, läuft. Denkste. Heute nach dem Deployment sind uns regelrecht alle CPU-Kerne um die Ohren geflogen, meisten Load von 30, Spitzen von 60, bei 12 Kernen. Zurückstellen könnte ich nicht, da wir nicht ausschließen können das gerade Buchalterische Sachen laufen und weil sich da niemand rantraut konnte ich erst jetzt wieder eingreifen. Was auch gut so ist. Nach ewigen herumgetüftel auf unsere Devsystem, welches auf CentOS läuft (PHP-Paket von Webtactic), bin ich auf der Suche nach der OpCache config darüber gestolpert, dass die PHP-Installationen gar kein Opcache Paket haben -.- . Japp, so hab ich auch geguckt. Also OpCache drauf, Speicher, String-Länge und Max-Datei-Anzahl (Default 4000, wir liegen mit vendor aber bei ~15k) hochgesetzt, et voila, brauchbare Antwortzeiten (Login-Seite, vorher 700ms, danach 280ms). Statt die Konfig nur zurückzudrehen, konnte ich also doch noch was brauchbares aus der Aktion ziehen. Warum genau nun Prefork besser ohne Opcache umgehen kann als MPM-Worker oder Event ist mir nicht ganz klar, aber das brachte mich zum nächsten Thema. Wenn die Kisten einmal eingerichtet sind und niemand darauf arbeitet (tatsächlich gar keine Requests) hab ich gleich noch nach Untersucht, wie sie die Verschiedenen Modi unter Last verhalten. Leider ist meine Leitung etwas begrent, aber ab hilft da weiter. AB - Apache Benchmark getestet wurden Worker, Event und Prefork (in der Reihenfolge): Worker: ➜ ~ ab -c 1000 -n 5000 -C "PHPSESSID=ong0fut5892mgr38afqttthu47" https://www.xmid.de/main/booking/get-partial-service-details/sId/\?bId\=11705 This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.xmid.de (be patient) Completed 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requests Server Software: Apache/2.4.6 Server Hostname: www.xmid.de Server Port: 443 SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,4096,128 Document Path: /main/booking/get-partial-service-details/sId/?bId=11705 Document Length: 0 bytes Concurrency Level: 1000 Time taken for tests: 116.750 seconds Complete requests: 5000 Failed requests: 55 (Connect: 0, Receive: 0, Length: 55, Exceptions: 0) Write errors: 0 Non-2xx responses: 77 Total transferred: 2581822 bytes HTML transferred: 12939 bytes Requests per second: 42.83 [#/sec] (mean) Time per request: 23350.090 [ms] (mean) Time per request: 23.350 [ms] (mean, across all concurrent requests) Transfer rate: 21.60 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 8879 11709.4 5515 81112 Processing: 331 11756 3240.6 11938 30144 Waiting: 0 11749 3358.0 11918 42206 Total: 490 20635 12612.5 18063 93474 Percentage of the requests served within a certain time (ms) 50% 18063 66% 19944 75% 21118 80% 21745 90% 28019 95% 47475 98% 84531 99% 84762 100% 93474 (longest request) ============== Event: ➜ ~ ab -c 1000 -n 5000 -C "PHPSESSID=ong0fut5892mgr38afqttthu47" https://www.xmid.de/main/booking/get-partial-service-details/sId/\?bId\=11705 This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.xmid.de (be patient) Completed 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requests Server Software: Apache/2.4.6 Server Hostname: www.xmid.de Server Port: 443 SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,4096,128 Document Path: /main/booking/get-partial-service-details/sId/?bId=11705 Document Length: 0 bytes Concurrency Level: 1000 Time taken for tests: 117.501 seconds Complete requests: 5000 Failed requests: 167 (Connect: 0, Receive: 0, Length: 167, Exceptions: 0) Write errors: 0 Non-2xx responses: 332 Total transferred: 2523071 bytes HTML transferred: 17872 bytes Requests per second: 42.55 [#/sec] (mean) Time per request: 23500.233 [ms] (mean) Time per request: 23.500 [ms] (mean, across all concurrent requests) Transfer rate: 20.97 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 7972 8189.7 5559 86900 Processing: 313 12832 2812.0 13140 31232 Waiting: 270 12818 2823.8 13132 34819 Total: 482 20804 8694.4 18921 98796 Percentage of the requests served within a certain time (ms) 50% 18921 66% 20231 75% 21485 80% 22528 90% 27933 95% 33931 98% 51330 99% 56858 100% 98796 (longest request) ============== Prefork: ➜ ~ ab -c 1000 -n 5000 -C "PHPSESSID=ong0fut5892mgr38afqttthu47" https://www.xmid.de/main/booking/get-partial-service-details/sId/\?bId\=11705 This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.xmid.de (be patient) Completed 500 requests Completed 1000 requests Completed 1500 requests Completed 2000 requests Completed 2500 requests Completed 3000 requests Completed 3500 requests Completed 4000 requests Completed 4500 requests Completed 5000 requests Finished 5000 requests Server Software: Apache/2.4.6 Server Hostname: www.xmid.de Server Port: 443 SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,4096,128 Document Path: /main/booking/get-partial-service-details/sId/?bId=11705 Document Length: 0 bytes Concurrency Level: 1000 Time taken for tests: 110.483 seconds Complete requests: 5000 Failed requests: 0 Write errors: 0 Total transferred: 2575000 bytes HTML transferred: 0 bytes Requests per second: 45.26 [#/sec] (mean) Time per request: 22096.514 [ms] (mean) Time per request: 22.097 [ms] (mean, across all concurrent requests) Transfer rate: 22.76 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 157 7907 11700.4 4872 90004 Processing: 272 12096 3321.8 11865 33737 Waiting: 224 12075 3306.7 11861 33736 Total: 429 20003 12315.3 17096 105157 Percentage of the requests served within a certain time (ms) 50% 17096 66% 18746 75% 20690 80% 22374 90% 26816 95% 34028 98% 78218 99% 83130 100% 105157 (longest request) Testbedingung: immer die selbe Maschine (der HA Balanced nach Herkunft, der alte Rassist...), immer 5000 Requests und es wird mit einer concurrency von 1000 gearbeitet. Ich nehm an, er versucht 1000 Anfragen gleichzeitig rauszuhämmern, was ich bei meiner Leitung für eher unwahrscheinlich halte, egal. Interressant ist: Gesamtzeiten: 116 | 117 | 110s Der Punkt geht an den Prefork, wobei der auch den ingesamt langsamsten Request mit 105s dabei hatte. Wenn ich mir das genau ansehe sprechen alle Werte für den Prefork. Nichtsdestotrotz zeigt der Test die CPU auslastung nicht. Die lagen nämlich bei max 50 | 30 | 15, was wieder für den Prefork spricht. Und der Prefork war auch der einzige der keine Requests gedroppt hat. Im Endeffekt bin ich gespannt wie die Last morgen auf den Kisten aussieht, ich hab wieder den Prefork als MPM-Mittel der wahl gesetzt. Sicherlich könnte man jetzt noch an der Menge der maximalen Requests, Server, Childs ect herumdoktorn, aber dafür gibts ja das nächste Release ;) Bei Fragen immer her damit! VG Felix -- Mit freundlichen Grüßen Felix Seidel - Entwicklung - ________________________________________________________ TraSo GmbH Nonnenstraße 42 D-04229 Leipzig Tel: +49 341 355 740 47 E-Mail: f.seidel@traso.de Internet: https://www.traso.de ________________________________________________________ Geschäftsführer: Haiko Gerdes Handelsregister: Amtsgericht Leipzig, HRB 21850