Nginx ve PHP-FPM ile çalışan oldukça yoğun yüklü bir sunucumuz var. Bu sunucuda 6 tane web sitemiz var, PHP-FPM ve nginx kullanıyoruz. Yazılımın tümü vBulletin 3.8 ve WordPress'tir. Veritabanları ayrı bir sunucudadır.
Şimdi, bunlar oldukça popüler web siteleri olduğundan, normalde bir kerede çevrimiçi olarak 7-8.000 ziyaretçimiz vardır ve her sayfa çoğunlukla veritabanına isabet etmektedir. Bunun sorunlarımızın nedeni olduğuna inanıyorum.
MySQL sunucusunda çok fazla büyük veritabanımız olduğundan ve sorgular dürüst olmak gerekirse, yazılımda çok daha iyi olabileceğinden, MySQL'in zaman zaman PHP'ye sonuçları döndürememesi, sonuçta kaskad etkisi yaratacağını düşünüyorum. PHP-FPM'yi yeniden yükleyene kadar her şeyin durmasına neden olur. Bunu yaptıktan sonra, işler tekrar iyi çalışmaya başlar.
Bu sorunu gidermede sorun yaşama sebebim, kayıtlardan hiçbir şeyi gerçekten ayırt edemememdir. MySQL yavaş sorgu günlüğünde, aksama süresi olduğunda ilgilenilen hiçbir şey göremiyorum. Nginx kayıtlarında, okuma isteğinin zaman aşımına uğradığını veya bağlantının zaman aşımına uğradığını söyleyen binlerce giriş görüyorum (PHP-FPM'ye). Ve PHP-FPM günlüklerinde, "yürütmenin zaman aşımına uğradığını (31 sn) sonlandırdığını söyleyen birçok satır görüyorum.
Dolayısıyla bu noktada sorunu nerede arayacağımı tam olarak bilmiyorum. Açıkçası, her ne oluyorsa, bu senaryolar bazen yeterince hızlı bir şekilde yürütülmüyor çünkü (Normalde bir saniyenin altına yüklenir, ancak yükleme süresinin yükselmesine neden olan bir şey olur). Bu, günde birçok kez olur ve bizim için oldukça sorun oldu.
Şimdilik sadece her 10 dakikada bir php5-fpm yeniden yüklemesine hizmet edecek bir crontab'ım var, bu da çökme sorununu önemser. Tabii ki, PHP yeniden yüklendiğinde, nginx 502 ağ geçidi hatası veriyor, bu yüzden çok fazla bir çözüm değil.
PHP, önemliyse APC önbelleği çalıştırıyor. Birkaç noktada APC'nin bazı şartlar altında askıda kalmasına neden olabileceğini okudum.
Herhangi bir işaretçi yardımcı olacaktır. Bu makine için sürekli endişelenmek zorunda kalmamı isterdim.
Elbette daha fazla bilgi sağlanabilir. Sadece ihtiyacın olanı bana bildir.
Güncelleme: apc.php dosyasını bir web köküne kopyaladım ve istatistiklere bakmak için eriştim. İşler iyi görünüyordu. Ardından Kullanıcı istatistiklerine gitmek için bağlantıyı tıklattım ve sunucuyu BOOM anında kapattım. Php-fpm'yi yeniden yükledim ve ardından kullanıcı istatistikleri sayfasını yeniden yükledim ve iyi geçti. Bir dakika bekledim, tekrar yükledim, sunucu tekrar kapatıldı.
Yani bu kesinlikle APC ile ilgili görünüyor. Soru şu - Nasıl düzelteceğiz?
APC Yapılandırması:
[apc]
apc.enabled="1"
apc.stat = "1"
apc.max_file_size = "2M"
apc.localcache = "1"
apc.localcache.size = "256"
apc.shm_segments = "1"
apc.ttl = "3600"
apc.user_ttl = "7200"
apc.gc_ttl = "3600"
apc.cache_by_default = "1"
apc.filters = ""
apc.write_lock = "1"
apc.num_files_hint= "10000"
apc.user_entries_hint="10000"
apc.shm_size = "1G"
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.include_once_override = "0"
apc.file_update_protection="2"
apc.canonicalize = "1"
apc.report_autofilter="0"
apc.stat_ctime="0"
Güncelleme 2: Burada bu konuda bir miktar ilerleme kaydettik. WordPress önbelleğe alma eklentisinin (W3 Total Cache) çökmelere neden olduğu ortaya çıktı. Nedenini hala bilmiyoruz, ancak devre dışı bırakılmış durumdayken PHP'yi yaklaşık 4 saattir yeniden yükleme, yavaşlama ve çökme olmadan çalıştırıyoruz. Hala vBulletin forumlarında APC kullanıyoruz ve sorun yok. NEDEN APC'nin çökmekte olduğunu tespit etmenin bir yolu var mı ? Bunu WordPress kurulumlarımızda kullanmayı çok isterdim, ancak kırılgan bir sistemin maliyetine değil.