PHP ve MultiThreading

223 views
Skip to first unread message

Abdulkadir Bener

unread,
Jul 4, 2013, 4:45:02 AM7/4/13
to bnr...@googlegroups.com
Her makinede altışar işlemci toplam 96 Çekirdek CPU, 480 küsür GB Ram ve 4 TB SSD disk olan bir sistem var.
Aslında dört ayrı sunucunun toplamı bunlar.
Hayvan gibi bir yapı yani.
Aynı anda yaklaşık maksimum 350 internal user login oluyor ve iş üretiyor.
Bir de webden gelip sorgu üreten userlar var. Bunlar da 1000 connection kadar.
Sorgular cevap olarak yaklaşık 10 KB boyutlu XML dosyalar alıyorlar.
 
Sistemi analiz eden firma şöyle bir rapor yazmış:
 
"Yoğun olarak PHP ve PHYTON kullanılmış. PHP multithread değil, gördüğümüz kadarıyla worker listesi kabarık. CPU yetmiyor! CPU alın!!"
 
Mantıklı mıdır?
Bu adamlar genişlemeden ne anlıyor olabilir?
Yorumunuz ya da öneriniz var mı?
 
Not:
Bu arada bilgibedava.com hazır, dosyaları da upload ettim. Ama MVC ayarlarıyla ilgili bir sunucu hatası nedeniyle çalışamıyor. Customerrorsmode off yaptığım halde hata mesajını göremiyorum. Thread açtım. Cevaba göre hareket edeceğim.
 
Saygılar.

Yılmaz Kirlikaya

unread,
Jul 4, 2013, 4:56:17 AM7/4/13
to bnr...@googlegroups.com
Uygun kurulumla ve dogru kodlamayla php thread destegi sunar.

iPhone'umdan gönderildi

4 Tem 2013 tarihinde 11:45 saatinde, Abdulkadir Bener <abdulka...@gmail.com> şunları yazdı:

--
Bu e-postayı Google Grupları'ndaki "bnr_net" adlı gruba abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için bnr_net+u...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için, https://groups.google.com/groups/opt_out adresiniz ziyaret edin.
 
 

Tufan Dayi

unread,
Jul 4, 2013, 4:59:36 AM7/4/13
to bnr...@googlegroups.com
Bu sisteme aynı anda 1350 kişi yüklensede cevap vermesi lazım. Tabi yapılan işlemler de önemli ne kadar zaman alıcı işlemler gerçekleşiyor bunları bilmek gerekiyor. ayrıca php yerine başka bir dilde yazılmış olup multi thread kullanılsa bile işlemci kullanılmayacak mı? Ne alaka işlemci almayla php nin multi thread olmayışı .net framework olsa multi thread kullanılsa işlemler işlemci yerine dvd roomda mı yapacak! :) biz astronot için daha düşük özelliklerde tek bir sunucuda yoğun bir iş akışını test ettiğimizde 2000 kullanıcıya kadar sistem kaynaklarının yarısından biraz fazlasını kullanmıştı. Bu noktoda altını çizerek belirtmekte fayda var  bahsi geçen sistem nasıl bir iş akışı söz konusu bilemem ama veri okuma yazma işi yapıyorsa bence sunucu konfigurasyonunda sıkıntı var derim.

Tahminen iyi bir load balance, apache konfigurasyonu gerekiyor. Takdir edersiniz ki apache ve php linux sistemler üzerinde tabir-i caizse yardırıyorrrrr.....


Date: Thu, 4 Jul 2013 11:45:02 +0300
Subject: PHP ve MultiThreading
From: abdulka...@gmail.com
To: bnr...@googlegroups.com

Yılmaz Kirlikaya

unread,
Jul 4, 2013, 5:03:31 AM7/4/13
to bnr...@googlegroups.com
Tahminen iyi bir load balance, apache konfigurasyonu gerekiyor. Takdir edersiniz ki apache ve php linux sistemler üzerinde tabir-i caizse yardırıyorrrrr.....

Php dogru optimizasyonla iis + fastcgi + mssql uclemesiyle , apache + mysql ikilisine bes basiyor ;) bizzat denedim

iPhone'umdan gönderildi

4 Tem 2013 tarihinde 11:59 saatinde, Tufan Dayi <td...@hotmail.com> şunları yazdı:

Abdulkadir Bener

unread,
Jul 4, 2013, 5:49:23 AM7/4/13
to bnr...@googlegroups.com
Teşekkürler yorumlar için. (Bu arada Asp.Net + IIS daha güzel yardırıyor bilginiz olsun ;)
 
Peki siz bu sistemi incelemek zorunda kalsanız nereye bakardınız? Nasıl bakardınız? Ne kullanarak ölçüm yapardınız? Mevzu Asp.Net olsaydı ben bir sürü yöntem biliyorum ama PHP olunca hangi araçla neyi ölçmem gerektiği konusunda bir fikrim yok? (Sunucu linux (sanırım ubuntu) ve web uygulama nginx kullanılarak yayınlanıyor, arkada mysql + solr + cassandra mevcut.)
 
Teşekkürler...


2013/7/4 Yılmaz Kirlikaya <yil...@nbt.com.tr>

Tufan Dayi

unread,
Jul 4, 2013, 6:34:12 AM7/4/13
to bnr...@googlegroups.com
Bu konuda benden daha iyi bir analiz planı çıkaracağınıza eminim. Fikir beyan etmek için tam olarak sorun nedir?

Uygulama geç cevap veriyor?
Uygulama cevap vermiyor?
Sunucu hiç cevap veremiyor?



Date: Thu, 4 Jul 2013 12:49:23 +0300
Subject: Re: PHP ve MultiThreading

Abdulkadir Bener

unread,
Jul 4, 2013, 7:08:39 AM7/4/13
to bnr...@googlegroups.com
%90 1.durum,
%10 2.durum,
 
??
 


2013/7/4 Tufan Dayi <td...@hotmail.com>

Tufan Dayi

unread,
Jul 4, 2013, 8:14:40 AM7/4/13
to bnr...@googlegroups.com
Php tarafında maalesef benimde performance testleri ile ilgili bilgim yok ama benim izleyeceğim yol şu şekilde olurdu;

1. Uygulamanın sunuculara ne şekilde dağıtıldığına bakarım.
2. Veri tabanının hangi sunucuda durduğuna ve bu sunucunun üzerinde başka bir yük olup olmadığına bakarım.
3. Geç cevap vermesine neden olan şeyin ne olduğunu anlamak için en yoğun şikayet alan ekranların arkasındaki iş akışına bakarım.
4. MultiThread bir yapı olmaması neticesinde apache üzerinde yürüyen her requet istediğinin ana thread üzerinde işlem göreceği için apachenin sistem kaynaklarının ne kadarını kullanabildiğine bakarım. (Bu ayar IIS tarafında da yapılabildiği için mantık yürütüyorum.)
5. Eğer 4. madde de yer alan bir neden den dolayı apache gelen requestleri üzerindeki iş yoğunluğundan dolayı bekletiyorsa baştada söylediğim gibi load balance ve apache konfigurasyonuna bakarım.

Bahsettiğiniz sistem çok çok iyi benim tahminim sistemi yoran bir kod yapısı ya da sql sorgusu yoksa 1350 kullanıcının altından kalkamaması biraz saçma geliyor bana.



Date: Thu, 4 Jul 2013 14:08:39 +0300

Erdem Bener

unread,
Jul 4, 2013, 8:45:13 AM7/4/13
to bnr...@googlegroups.com

Merhabalar,

 

Aslında bizim Telekomda genel olarak karşılaştığımız problem. Uygulama yavaş acaba neden?

Bunun tespiti de baya zahmetli oluyor aslında.

Java veya .net ise nispeten daha kolay. Wily diye bir tool satın alındı ve tüm işlemler hakkında bilgi toplayıp sizi çözüme yönlendirebiliyor.

 

Eğer böyle bir tool kullanılmıyorsa (php tarafında var mı bilmiyorum) .

 

1.       Access logları incelenip request süreleri kontrol edilebilir. Linux da bu işlem çok daha pratik. (söylemek zoruma gidiyor ama windows ta olmayan pratiklikler var) bu sayede sorun tek bir sayfada yada birden fazla sayfada olduğu tespit edilip oraya odaklanılabilir.

2.       Access loglarından birşey bulunamazsa daha zor olan yönteme geçilir. Bu da thread dump alıp bu dumpları analiz etmek. Kabaca sistem şöyle çalışıyor. İlgili process id si tespit edilir. (ps –ef ... komutu ile linux da process listesi, id leri ve hangi kullanıcı ile çalıştığı öğrenilebilir.)

İlgili php process id si tespit edildikten sonra thread dump aşamasına geçilebilir.

Burada mantık şu mesela 5 saniye boyunca her 1 saniyede bir thread dump alınır. Daha sonra elinizde 5 adet thread dump bulunur. 1. Ve 5. Thread dumplarında bulunan bir thread uzun sürüyor demektir. Bu sayede ilgili thread in hangi işlem için uğraştığı tespit edilebilir.

Kabaca 1. Resimde ve 5. Resimde de varsa bunda bir pislik vardır mantığından hareketle ilgili thread in yaptığı işe yoğunlaşılır.

 

Neticede kaynağın yetersiz oluşunun sebebi genellikle requestlerin uzun sürmesi ve thread lerin uzun süre meşgul edilmesi (neticede sistemin aynı anda açabileceği thread sayısı belirlidir).

 

Yukarıdaki yöntemler genellikle bize sorun çözmek için gelen danışmanların başvurduğu yöntemlerdir.

 

İyi çalışmalar.

Abdulkadir Bener

unread,
Jul 4, 2013, 8:51:04 AM7/4/13
to bnr...@googlegroups.com
Tufan teşekkür ederim.
Yorumunda bence de haklısın.
 
Web sunucuda fiziksel Ram kullanımı %10 dolayında.
Veritabanı sunucularında ortalama Cpu kullanımı %1 - %2 dolayında.
Veritabanı sunucularında ortalama Ram kullanımı %50 dolayında. yani database'ler full ramda çalışıyor ve yormuyor.
Buradan çıkan sonuca göre sıkıntı mysql veya solr veya cassandra değil.
 
Ama EMC-VNX loglarına baktım son bir aylık dönemde web sunucunun cpu'su %10 - %70 arasında gidip gelmiş.
Gece hiç user yokken bile %10 civarında cpu usage var.
En yoğun saatlerde her gün günde bir kere yaklaşık %70'e çıkıyor, ama %70'i hiç geçmemiş.
Sunucu ayarlarına göre web server dışında çalışan process veya başka bir servis filan yok, bu %10 - %70 arası kullanım tamamen apache-nginx ile ilgili.
 
Yavaşlık bence tamamen kodlama algoritmalarıyla veya PHYTON ilişkileriyle ilgili. Sanırım; galiba.
 
Birisi kodları inceleyecek artık. beni aştı yani. :)
 
Herkese teşekkürler.
Saygılar.
 
 


2013/7/4 Tufan Dayi <td...@hotmail.com>

Abdulkadir Bener

unread,
Jul 4, 2013, 8:56:15 AM7/4/13
to bnr...@googlegroups.com
Erdem senin önerilerini şimdi okudum.
Gayet teşekkür derim, de;
Windows ile ilgili parantezi kayıtlardan silmenin bir yolunu bulmak lazım.
Bir şey Windows'ta yoksa gereksiz bir şey demektir, öyle değil mi.?
 
Önerilerini ileteceğim.
 


2013/7/4 Abdulkadir Bener <abdulka...@gmail.com>

Erdem Bener

unread,
Jul 4, 2013, 9:13:07 AM7/4/13
to bnr...@googlegroups.com

Öyle kesinlikle

 

Ben bilmiyorum windowsta nasıl yapılır :)

Tufan Dayi

unread,
Jul 4, 2013, 9:31:56 AM7/4/13
to bnr...@googlegroups.com
Rica ederim, faydam olduysa ne mutlu.

Gece hiç kullanıcı olmadığı halde, %10 gibi bir kaynak harcıyorsa yolunda gitmeyen bir şeyler var sanırım. Bu %10 hangi servisler tarafından harcanıyor acaba. Hepsini apache yiyorsa kod tarafında bir şeyler timera bağlanmış oda yoğun bir iş yapıyor olabilir. Merak ettim walla bir şey çıkarsa paylaşırsanız sevinirim.


To: bnr...@googlegroups.com
Subject: RE: PHP ve MultiThreading
Date: Thu, 4 Jul 2013 16:13:07 +0300

Abdulkadir Bener

unread,
Jul 4, 2013, 9:35:33 AM7/4/13
to bnr...@googlegroups.com
Bence kedidir.
 
Sonucu paylaşırım. Kolay gelsin.


2013/7/4 Tufan Dayi <td...@hotmail.com>
Reply all
Reply to author
Forward
0 new messages