Bugün web sitesi yine takılı kaldı ve çok sayıda uyku bululdu
Uyku nedenleri:
1 İstemci programı çıkıştan önce mysql_close() çağrısı yapmadı.
2 İstemci sunucuya herhangi bir istek göndermeden wait_timeout veya interactive_timeout saniyeden fazla uykudaydı.
3 İstemci programı, veri transferinin ortasında aniden sona erdi
Aynı dönemdeki uyku süreçlerinin sayısı çok yüksekse ve diğer eyaletlerdeki toplam bağlantı sayısı max_connection değerini aşarsa, MySQL artık kök kullanıcı dışında hiçbir isteği işleyemez, herhangi bir istekle bağlantı kuramaz veya doğrudan takılır
Çözüm:
1. İlk olarak, programınızın pconnect yöntemini kullanıp kullanmadığını kontrol edin, ikincisi ise mysql_close()'nin sayfa çalıştırılmadan önce çağırılıp çağrılmadığını kontrol edin. Pconnect yöntemini kullanmamaya çalışın, yani mysql_connect kullanın. Program yürütüldüğünde, mysql_close açıkça çağrılmalıdır
2. my.cnf'e wait_timeout ve interactive_timeout ekleyin, değeri daha küçük ayarlayın, varsayılan olarak wait_timeout değeri 8 saat, 1 saat veya yarım saat olarak değiştirebilirsiniz. Bu şekilde mysql ölü bağlantıları daha hızlı öldürür. Toplam bağlantı sayısının max_connection değerini aşmasını önleyin.
wait_timeout çok büyük olursa, MySQL'de çok sayıda SLEEP işlemi zamanında yayınlanır ve sistem performansını düşürür, ancak ayarlar çok küçükse "MySQL kayboldu" gibi sorunlarla karşılaşabilirsiniz
max_connection değerini daha yüksek bir değere ayarlayın, ama bu açıkça uygun değil, ne kadar çok bağlantınız olursa, sunucunuza o kadar çok stres verir. Aslında, bu bağlantılar gereksiz ve onları mümkün olan en kısa sürede kapatmak en iyi politikadır.
3. Sistemin SQL sorgusunu adım adım analiz edin, çok yavaş olan SQL'i bulun ve optimize edin
1)interactive_timeout: Parametre anlamı: Sunucunun etkileşimli bağlantıyı kapatmadan önce bir etkinliği beklediği saniye sayısı. İnteraktif istemci, mysql_real_connect() içinde CLIENT_INTERACTIVE seçeneği kullanan bir istemci olarak tanımlanır. Parametre varsayılan: 28800 saniye (8 saat)
(2)wait_timeout: Parametre anlamı: Sunucunun etkileşimsiz bağlantıyı kapatmadan önce faaliyet için beklediği saniye sayısı. İş parçacığı başladığında, oturum wait_timeout değeri, istemci tipine (mysql_real_connect()'CLIENT_INTERACTIVE bağlantı seçeneklerine bağlı olarak, küresel wait_timeout veya küresel interactive_timeout değerine göre başlatılır. Parametre varsayılan: 28800 saniye (8 saat)
MySQL Server'ın destekleyebileceği maksimum bağlantı sayısına bir üst sınır vardır; çünkü her bağlantı kurulmuş ve bellek tüketir, bu nedenle istemcilerin MySQL Server'a bağlandıktan sonra kaplı belleği kapatıp serbest bırakmasını bekleriz. MySQL Server'ınızda çok sayıda boşta bağlantı varsa, sadece boşuna bellek tüketmekle kalmaz, bağlantılar birikmeye ve açılmaya devam ederse, sonunda MySQL Server'daki maksimum bağlantı sayısına ulaşır ve bu da 'çok fazla bağlantı' hatası bildirir. wait_timeout değer ayarı sistemin işleyişine göre değerlendirilmelidir. Sistem bir süre çalıştıktan sonra, mevcut sistemin bağlantı durumunu göster processlist komutuyla kontrol edebilirsiniz; uyku durumunda çok sayıda bağlı işlem bulursanız, bu parametre ayarının çok büyük olduğu anlamına gelir ve daha küçük ayarlamalar yapmak için uygun ayarlamalar yapabilirsiniz.
SQL Komutası:
Bu modifikasyon yöntemiMysql servisini yeniden başlattıktan sonra geçersiz olur, bu yüzden bu iki özelliği mysql yapılandırma dosyasında yapılandırmak en iyisidir.
My.cnf dosyasını Linux altında değiştirin:
|