• 29-10-2018, 15:50:46
    #1
    Merhabalar,
    Java ile native olarak yazılmış bir android iddaa tahmin uygulamam var. Bu uygulamada günlük maç sayısına göre onlarca farklı maç için php ile mysql tablosuna veriler gönderiyoruz. Ev sahibi, deplasman, oran, güven oranı, analiz, kredi, tahmin, tarih gibi tablolarımız var. Bunların her biri dolduruluyor.

    Uygulamada ücretli / ücretsiz şeklinde maçlar paylaşılıyor. Şu anda yaklaşık 25.000 civarı indirme, 9.000 civarı etkin yükleme var.

    Sorun şu ki, onesignal üzerinden kullanıcılara bildirim attığım anda mysql sorguları tavan yapıyor ve haliyle cpu tüketimi aşırı rakamlara çıkıyor. Sonrasında tahmin edeceğiniz gibi sunucudaki tüm siteler ile birlikte uygulama bir süre kapalı kalıyor.

    Kulladığım sunucunun kötü bir sunucu olduğunu düşünmüyorum. Aynı sunucuda ufak tefek farklı sitelerde barındırıyorum. Ama bu uygulamadaki aktif kullanıcı sayısı artıp, onesignal üzerinden bildirim gönderdiğimde direk bu sorun ile karşılaşıyorum.

    İlk önce onesignal ile veri gönderilirken benim sunucuma bağlanılmasının etkisi olacağını düşündüm, fakat bu kadar olacağını düşünmedim.

    Şimdi varsa hem android hem php/mysql dan anlarım diyen bir babayiğit, önerilerini öğrenmek isterim. Daha babayiğit biri varsa, ben bu işi çözerim diyorsa ücreti mukabilinde yardımcı olabilirse sevinirim.

    Sunucu değiştirmenin çözüm olabileceğini sanmıyorum. Çünkü inanılmaz bir cpu yükselişi oluyor. Taş olsa patlar sanırım. Ama işin diğer tarafında uygulamayı yazan arkadaşta her ne kadar aramız bozuk olsa da bu işi gayet iyi bilen birisi. Sunucuyu çok yoracak yapıda bir kod yazmış olacağını da sanmıyorum. Ama elbette uzmanları daha iyi bilecektir.

    Son çare bir süre idare edecek olsa bile, bildirimleri kendi sunucumdan parça parça göndermeyi deneyeceğim sanırım. En azından bunu yapabilirim diyen varsa ona da kapım açık.

    Son olarak bu tür projeler için bu tür sorunlarda nasıl bir çözüm üretilebilir? Yani daha büyük uygulamalar bu işi nasıl çözüyor? Bu konuda da bilgi sahibi olanlar bizi aydınlatırsa iyi olacaktır.

    Herkese kolay gelsin.
  • 29-10-2018, 16:05:50
    #2
    sunucuoptimizasyon.com
    Cpu kullanımının arttığı anlarda anlık sql sorgularını incelemek sağlıklı olacaktır.

    Fazla sayıda sleep, long query veya wait lock konumda bekleyen sorgular varsa sorunun yazılımsal olduğu sonucuna ulaşabiliriz. İşlemci, bellek, disk i/o tarafının yeterli seviyede olduğunu varsayıyorum.
  • 29-10-2018, 16:08:45
    #3
    Server tarafında cache yapmak sorunu çözebilir belki.
  • 29-10-2018, 16:49:08
    #4
    NoSQL redis mongodb gibi çözümleri öneririm.
  • 29-10-2018, 16:57:08
    #5
    Sağlam bir çalışma gerekiyor.

    Verim alacağımı düşünüyorum.

    İmzamdaki konuları inceleyebilir, uygunsa Skype'dan ulaşabilirsiniz.

    İyi çalışmalar dilerim.
  • 31-10-2018, 00:25:42
    #6
    İlgilenen ve yardım etmeye çalışan herkese teşekkür ederim.

    Elazığlı168 adlı üyeden alıntı: mesajı görüntüle
    Cpu kullanımının arttığı anlarda anlık sql sorgularını incelemek sağlıklı olacaktır.

    Fazla sayıda sleep, long query veya wait lock konumda bekleyen sorgular varsa sorununu yazılımsal olduğu sonucuna ulaşabiliriz. İşlemci, bellek, disk i/o tarafının yeterli seviyede olduğunu varsayıyorum.
    Öncelikle teşekkür ederim.

    Sağ olsun arkadaş inceledi ve dediği gibi yazılım tarafının sorunlu olduğuna kanaat getirdik.

    Bildirim gönderdiğimizde doğal olarak bir anda bir yığılma oluyor ve altta arkadaşın bana ilettiği gibi bir çok mysql sorgusu bir anda çalışıyor. Doğal olarak sunucu kilitleniyor.

    Alıntı
    11476 uygulama_api localhost uygulama_api Query 149 Sending data SELECT code, matches.id, home, away, credit, oran, matches.status, start_time, trust, (SELECT bet FR
    11520 uygulama_api localhost uygulama_api Query 149 Sending data SELECT code, matches.id, home, away, credit, oran, matches.status, start_time, trust, (SELECT bet FR
    11523 uygulama_api localhost uygulama_api Query 148 Sending data SELECT code, matches.id, home, away, credit, oran, matches.status, start_time, trust, (SELECT bet FR
    11532 uygulama_api localhost uygulama_api Query 148 Sending data SELECT code, matches.id, home, away, credit, oran, matches.status, start_time, trust, (SELECT bet FR
    Bu şekilde bir anda bir çok sorgu olunca haliyle sunucu yetersiz kalıyor.

    Şimdi yazılım tarafında bu problemin giderilmesi için neler yapmamız gerekir? Bu konuda ücreti karşılığında yardımcı olabilecek arkadaşlar pm atabilirlerse sevinirim.
  • 31-10-2018, 00:45:53
    #7
    cache yapısı kullanabilirsiniz. daha ileri durumlarda kullanıcı sayısınız çok fazla olduğunda load balancing üzerine yoğunlaşabilirsiniz.
  • 31-10-2018, 01:59:46
    #8
    Merhaba.

    SQL cache neden kullanmıyorsunuz? SQL cache ile kullanıcılar düz dosya ile veri cekerler mysql işlemlerini sadece siz yaparsınız. Bu yöntem mysql veri aktarımında %98 tasartuf sağlar.

    Iyi forumlar
  • 31-10-2018, 02:12:26
    #9
    "Bunca yıldır bu işin içindeyim ama doğru düzgün hiçbir şey öğrenemedim" diyerek bir öz eleştiri yapmak geldi içimden.