Faydalanmanız dileğiyle;
Bir süre önce, bir LEMP (Linux, Nginx, MySQL ve PHP web sunucusu) ile yavaş performans sorunları yaşayan bir istemciden bir e-posta aldım . Tam denetim sırasında sunucunun yük ortalamasının oldukça düşük olduğunu gördüm (yukarıdaki ekran görüntüsüne bakın). Ancak, web sitesi gerçekten çok yavaştı. Bazı yanlış yapılandırmalar vardı, ancak ana PHP performans darboğazlarından biri, zayıf CPU tek iş parçacıklı performansıydı.

Daha fazla araştırma yaptıktan sonra, web trafiğinin 18 çekirdeğin tümünü aynı anda etkinleştirmek için yeterli olmadığını buldum. Ayrıca, her bir CPU çekirdeğinin PHP isteklerini tamamlaması ortalama 1 ila 3 saniye sürdü. Belirtildiği gibi, başka kod verimliliği sorunları da vardı, ancak bu makale için CPU tek iş parçacıklı performansına (CPU çekirdek hızları) odaklanacağız .

Her PHP-FPM işlemi tek bir CPU çekirdeği kullanır. PHP, CPU tek iş parçacıklı performansından büyük ölçüde yararlanır.
Buna geçmeden önce, PHP'nin web sunucunuzun CPU'sunu nasıl kullandığına bakalım. Fark etmiş olabileceğiniz gibi, PHP çoklu kullanım için tasarlanmamıştır . Bu nedenle, her sayfa/istek bir PHP işlemi tarafından sunulur ve her işlem bir CPU çekirdeğine kilitlenir. Bu, PHP'nin MySQL sorgularının tamamlanmasını beklediği zaman da geçerlidir. Ancak, PHP'den farklı olarak MySQL çok iş parçacıklıdır, ancak bu başka bir konudur.
PHP'nin çalışması için bu şekilde tasarlanmıştır. Web sunucunuzun eşzamanlı sayfa istekleri varsa, aynı zamanda her biri bir CPU çekirdeği kullanan ve aynı anda çalışan birkaç PHP işleminiz olur. Bu, CPU seçiminizi çok önemli hale getirir!
Bu düşük trafikli sunucuda 18 çekirdek ile sunucunun yük ortalaması her zaman 18'in altında kaldı. Aslında, izleme sırasında , en yoğun trafik sırasında PHP tarafından aynı anda 6 10 çekirdekten daha fazlası kullanılmıyordu. Sonuç olarak, PDF denetim raporumda yer alan diğer önerilere ek olarak aşağıdakiler de önerildi:
Çok fazla CPU çekirdeğiniz (18) var ama çekirdek hızı sadece 2.0GHz. PHP işlemleri çekirdek başına yürütüldüğünden, 3+GHz çekirdekli bir VPS, iş yükünüze daha iyi uyacaktır.
Daha hızlı CPU çekirdekleri ve Ek CPU çekirdekleri
Belirtildiği gibi, sunucunun ortalama çekirdek hızı 2.0GHz olan 18 CPU çekirdeği vardı. PHP uygulamasının ve MySQL sorgularının optimizasyon gerektirmesine rağmen, sorunun yavaş CPU tek iş parçacıklı performansı nedeniyle daha da kötüleştiği , izlemeden açıkça görülüyordu . Doğru hız ve kapasite karışımına sahip olmanın önemine veya ek CPU çekirdeğine karşı daha hızlı CPU çekirdeğine sahip olmanın önemine bakalım.

Bu sunucu için trafik nispeten düşüktü ve yoğun trafik sırasında yaklaşık 6 ila 10 çekirdek kullanılıyordu.
2GHz işlemci çekirdeğinin bir isteği işlemesi 3 saniye sürüyorsa, 3GHz işlemci çekirdeği aynı isteği yaklaşık 2 saniye içinde döndürür. Bu da ek istekler için çekirdekleri daha hızlı bir şekilde serbest bırakır. Bu, çekirdek sayısını 18'den 8'e güvenle indirebileceğimiz anlamına gelir. Eşzamanlı kapasite biraz düşse de, sunucunun maksimum verimi %30'un üzerinde artacaktır. Sonuç, geliştirilmiş ölçekleme ve daha hızlı bir son kullanıcı deneyimi! Tabii ki, bu sunucu bunun yerine yüksek bir yük ortalaması (18.00+) yaşıyor olsaydı, örneğin 3GHz+ çekirdekler ile öneri farklı olurdu. Çoğu durumda, PHP'yi ve diğer ilgili performans yanlış yapılandırmalarını ele almak, performans kazanımlarıyla sonuçlanacaktır. Uygulanan optimizasyonlarla bu sunucu 1 3 saniye yerine ortalama 100ms ila 300ms sürdü.

Yavaş 2.0GHz çekirdekli istemcinin eski sunucusu
İstemci suçlu değildi çünkü web sunucularını yavaş web uygulaması performansı hakkında bilgilendirdiklerinde, ana bilgisayar, onları CPU tek iş parçacıklı performansının eksikliği konusunda uyarmak yerine, bunun yerine ek CPU çekirdekleri içeren VPS paketini yükseltmeyi önerdi. Ancak, bu yükseltmelerin her biri sırasında, CPU çekirdeklerinin 2.0GHz saat hızı değişmeden kaldı ve bu da sunucu veriminde tam olarak yüzde sıfır iyileştirme sağladı!

CPU çekirdek hızını ve çekirdek sayısını kontrol etme Linux komut satırı
Sunucunuzun CPU özelliklerinden emin olmadığınızı varsayalım. Aşağıdaki komutla hızlı bir şekilde kontrol edebilirsiniz:
lscpu
Bu, CPU özelliklerinizi listeler:
root@vps01 [~]# lscpu
Mimari: x86_64
CPU çalışma modu/modları: 32-bit, 64-bit
Bayt Sırası: Küçük Endian
CPU(lar): 8
Çevrimiçi CPU(lar) listesi:
Çekirdek başına 0-7 Konu(lar): 1
Soket başına çekirdek(ler): 8
Soket(ler): 1
NUMA düğüm(ler): 1
Satıcı Kimliği: OrijinalIntel
CPU ailesi: 6
modeli: 62
Model adı: Intel(R) Xeon(R) CPU E5-1650 v2 @ 3.50GHz
Adım: 4
CPU MHz: 3499,98
BogoMIPS: 6999,99
Hiper yönetici satıcısı: KVM
Sanallaştırma türü: tam
L1d önbellek: 32K
L1i önbellek: 32K
L2 önbellek: 256K
L3 önbellek: 12288K
NUMA düğüm0 CPU(lar): 0-7
Spesifikasyonlarla listelenen tüm çekirdekler için yalnızca çekirdek sayısını veya cat /proc/ cpuinfo'yu görüntülemek için nproc'u kullanın .
Yalnızca CLI PHP betikleri için burayı okuyun . Bir sonraki blog yazısı için şu konulardan biri hakkında yazmayı umuyorum: donanım seçimi/boyutlandırma, uygulama darboğazları veya MySQL optimizasyonu. Lütfen aşağıdaki e-posta formunu kullanarak güncellemelere abone olun.