8 çekirdekli 24 GB VPS'niz bellek yetersizliği sorunu mu yaşıyor? HestiaCP ile PHP-FPM işlem havuzu optimizasyonu için pratik rehber.

Bir sunucunun aynı anda işleyebileceği kullanıcı sayısı, sahip olduğu çekirdek sayısına değil, her bir işlemin tükettiği bellek miktarına bağlıdır.

Bu ifade bir provokasyon gibi gelebilir, ancak işletme ve bakım sektöründeki en gerçek ve acı verici deneyimi yansıtmaktadır.

Bellek neden en büyük darboğaz?

Birçok kişi 8 çekirdekli işlemciye ve 24 GB belleğe sahip bir VPS gördüğünde, bilinçaltında yüzlerce PHP-FPM işlemini kolayca çalıştırabileceğini düşünür.

Ancak gerçekte, tek bir PHP işleminin RSS bellek kullanımı genellikle 200 MB'a kadar çıkmaktadır.

Bu, komut satırı üzerinden yapılan gerçek testler sonucunda elde edilen sonuçtur:

ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'

HestiaCP'nin karmaşık yapısı ve çoklu eklenti ortamında, özellikle OPcache optimizasyonu olmadan, 200 MB normal bir değerdir.

Bu, maksimum eşzamanlılığı belirleyen asıl sınırın işlemci değil, bellek olduğu anlamına gelir.

8 çekirdekli 24 GB VPS'niz bellek yetersizliği sorunu mu yaşıyor? HestiaCP ile PHP-FPM işlem havuzu optimizasyonu için pratik rehber.

Önerilen yapılandırma dosyası (php-fpm.conf)

pm = dynamic
pm.max_children = 80
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s

Parametre hesaplama mantığı ve ayar esasları

Yapılandırma parametreleri设定值Temel hesaplama ve kurulum esasları
pmdynamicDinamik mod, eşzamanlılık gereksinimlerine bağlı olarak süreçlerin esnek bir şekilde eklenmesine veya silinmesine olanak tanıyarak yanıt hızı ve bellek kullanımını dengeler.
pm.max_children80Sistem çekirdeği hariç toplam 24 GB bellek. MySQL/RedisNginx'ten sonra PHP için yaklaşık 16 GB alan kalıyor.16,384 MB / 200 MB ≈ 81.9Değeri 80'e ayarlamak, yüksek eşzamanlılık sırasında bellek yetersizliği (OOM - Out of Memory) sorununu tamamen ortadan kaldırabilir.
pm.sunucuları başlat16Başlatma sırasında ön ısıtma, hizmetin yeniden başlatıldıktan sonra temel eşzamanlılığı anında işleyebilmesini sağlamak için CPU çekirdek sayısının iki katı (8 çekirdek × 2 = 16) olarak ayarlanmıştır.
pm.min_spare_servers8Düşük trafik dönemlerinde bile yeni isteklere her zaman yanıt verilebilmesini sağlamak için işlemci çekirdek sayısını 8'e ayarlayın.
pm.maks_yedek_sunucular24Trafik azaldıktan sonra orta düzeyde işlem sayısını korumak ve hafif dalgalanmaları yönetmek için, işlemci çekirdek sayısını işlemci çekirdek sayısının 3 katına (8 çekirdek × 3 = 24) ayarlayın.
pm.max_requests500Eğer tek bir işlem 200 MB gibi büyük bir bellek tabanına ulaşırsa, istek sayısını 500'e düşürmek işlemi yok edip yeniden oluşturarak örtük bellek sızıntılarını daha hızlı temizleyebilir.
pm.process_idle_timeout10s超出 min_spare_servers Boşta kalan işlemler, 10 saniye boyunca hiçbir istek gelmemesi durumunda otomatik olarak serbest bırakılır ve sistem belleğine geri döndürülür.

Temel Destekleyici Ayarlar ve Optimizasyon Önerileri

1. Zaman aşımı önleyici mekanizma

request_terminate_timeout = 60s İşte kilit nokta bu.

Veritabanı kilitlenmesi veya üçüncü taraf API engellemesi nedeniyle takılı kalan işlemleri zorla sonlandırabilir.

Bu arada, Nginx'in fastcgi_read_timeout En az 60 saniye bekletilmelidir, aksi takdirde istemciye erken ulaşacaktır. 504 Gateway Timeout.

2. Hafıza darboğazlarının üstesinden gelme stratejileri

En fazla 80 eşzamanlı işlem, aşırı eşzamanlılık koşullarında sistemin aynı anda en fazla 80 dinamik HTTP isteğini işleyebileceği anlamına gelir.

Kapasiteyi daha da artırmak istiyorsanız, odak noktanız işlem başına bellek kullanımını azaltmak olmalıdır.

  • OPcache'i etkinleştir:Gün php.ini Orta seviye yapılandırma opcache.enable=1 ve opcache.memory_consumption=256Bayt kodu önbellekleme, tek bir işlemin bellek kullanımını 200 MB'tan 60-100 MB'a düşürebilir.
  • memory_limit'in makul kontrolü:İrade php.ini orta memory_limit Sınırlı 128M256MBireysel anormal komut dosyalarını önlemek içinsınırsızÇok fazla bellek tüketiyor.

Tek bir işlemin bellek kullanımı 100 MB'a düştüğünde...pm.max_children Güvenli bir şekilde yükseltilebilir. 150 Ayrıca, eş zamanlı işlem kapasitesi neredeyse iki katına çıktı.

Alıntılanan yetkili görüşler

Resmi Nginx dokümanındaki önerilere göre :

"Kaynak tükenmesini önlemek için FastCGI uygulamaları her zaman zaman aşımı yönergeleriyle izlenmelidir."
(Kaynak: Nginx Belgeleri)

Resmi PHP kılavuzunda açıkça belirtilmiştir:

"pm.max_children, oluşturulacak maksimum alt işlem sayısını tanımlar. Bu en önemli yönergedir."
(Kaynak: PHP-FPM Dokümantasyonu)

Bu yetkili görüşler, uygulamalarımızla mükemmel bir uyum içindedir ve optimizasyon mantığının yalnızca deneyime değil, aynı zamanda standartlaştırılmış en iyi uygulamalara da dayandığını kanıtlamaktadır.

Sonuç: Benim Görüşlerim ve Önemli Alıntılar

Yüksek eşzamanlılık senaryolarında, CPU motor, bellek yakıt deposu ve PHP-FPM ise filo dağıtımcısıdır.

Motor ne kadar güçlü olursa olsun, yakıt deposu yeterince büyük değilse, konvoy fazla uzağa gidemez.

Gerçek uzmanlar parametreleri körü körüne maksimuma çıkarmaz, bunun yerine hem israfı hem de taşmayı önlemek için her işlemin bellek kullanımını hassas bir şekilde hesaplarlar.

Optimizasyonun özü, sınırlı kaynaklarla en uygun dengeyi bulmaktır.

Bu sadece bir teknoloji değil, aynı zamanda bir felsefe.

Bu nedenle, "çekirdek sayısı her şeyi belirler" inancından vazgeçin. Eşzamanlılık sınırını gerçekten belirleyen şey, bellek üzerindeki kontrolünüzdür.

Harekete geçin ve VPS'nizi en üst düzeyde optimize ederek, belleğin her damlasından en iyi şekilde yararlanın.

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

En gidin