İstekler Bazı Süreçlerde Yoğunlaşıyor

Belirtiler

Bazen php start.php status komutunu çalıştırdığımızda, isteklerin belirli bazı süreçlerde işlendiğini, diğer süreçlerin ise tamamen boşta olduğunu görebiliriz.

Rekabet Mekanizması

Workerman, birden fazla sürecin bağlantı alması varsayılan olarak rekabetçi bir yöntemle gerçekleşir; yani, istemciden bir bağlantı talep edildiğinde, tüm boşta olan süreçlerin bu bağlantıyı alma şansı vardır, en hızlı olanı önce alır. Hangi sürecin hızlı olduğunu, işletim sistemi çekirdek planlaması belirler. İşletim sistemi, en son kullanılan süreci CPU kullanım hakkını elde etmek üzere öncelikli olarak seçebilir, çünkü CPU kayıtlarında önceki sürecin bağlam bilgileri hala mevcut olabilir. Bu, bağlam değiştirme maliyetlerini azaltabilir. Dolayısıyla, iş yükü yeterince hızlı olduğunda veya stres testi sırasında, bağlantıların belirli süreçlerde yoğunlaşması durumu daha sık görülebilir; çünkü bu strateji, sık süreç geçişlerini önleyerek performansı genellikle en üst düzeye çıkarır ve bu bir sorun değildir.

Döngüsel Mekanizma

Workerman, bağlantı alma yöntemini döngüsel bir yöntemle değiştirmek için $worker->reusePort = true; ayarını yapabilir. Döngüsel yöntemle, çekirdek bağlantıları neredeyse eşit dağıtacak şekilde tüm süreçlere tahsis eder, böylece tüm süreçler birlikte istekleri işler.

Yanlış Anlama

Birçok geliştirici, tüm süreçlerin istek işleme sürecine katılmasıyla performansın daha iyi olacağını düşünmektedir; fakat bu durum her zaman doğru olmayabilir. İş yükü yeterince basit olduğunda, istekleri işleyen süreç sayısı CPU çekirdek sayısına yaklaştıkça sunucunun verimliliği artar. Örneğin, 4 çekirdekli bir sunucuda süreç sayısını 4 olarak ayarladığınızda, "helloworld" stres testinde QPS genellikle en yüksek seviyededir. Eğer istekleri işleyen süreç sayısı CPU çekirdek sayısını aşarsa, süreçler arası bağlam maliyeti artar ve bu durum performansı olumsuz etkileyebilir. Genel olarak, veritabanı içeren iş yüklerinde süreç sayısını CPU çekirdek sayısının 3 katı ile 6 katı arasında ayarlamak performansı daha iyi hale getirebilir.