Barındırma paylaşılan PHP performans

6 Cevap php

Php exec fonksiyonu ile başka bir komut dosyası çağırır php komut dosyası var. Denilen komut toplu süreci iş, bu işlem durumlarını güncelliyor yapar, (ayrı ayrı çalışır posta kuyruğuna e-postalar koyar) müşterilerine bildirir. Yani, nedeniyle çok büyük bir tablo (500000 satırlar) 20-30 dakika sürer Şimdi benim masaüstü windows makine altında çalışan yaşıyorum ve php kadar% 50 CPU, MySQL% 20 CPU kullanır. Normal bir uygulama mı? Ne ben bir hosting bu komut koyarsanız? Ben bu sorun var mı? Bu hosting kurallarını ihlal değil mi? Toplu işlem, bir kullanıcı her zaman (normalde bir ay veya daha sık olabilir) tarafından başlatılmış olabilir.

Herhangi Bu konuda tavsiye?

Okuduğunuz için teşekkürler.

6 Cevap

Neredeyse kesinlikle, ancak çok işlemci gücü paylaşılan ana (dürüst olmak için masaüstünüzde muhtemelen hakkında kadar) kullanılabilir nasıl değişir, bu durumda kendinizi kısa sırayla tekmelenmeden görürsünüz. Paylaşılan hosts barındırılan siteleri 100'ler alabilirsiniz yığını-em-yüksek işler, olma eğilimindedir.

Onlar size ne gibi yapmak için özgürlük verecek bir sanal konak için gidebiliriz, ama muhtemelen sınırlı konum CPU güç miktarı muhtemelen sizin için çok kısıtlı, sınırlı olduğunu orada göreceksiniz. Sanal barındıran bazen 4 gibi biraz, ama daha sık (ve özellikle ucuz planları için) tüm yol kadar 64 gibi, birkaç sanal Konuklar arasında ana bölmek eğilimindedir.

Üçüncü seçenek, daha sonra tam adanmış sunucu için gitmek için, bir bütün sunucu tüm kendiniz almak ve onunla ne gibi yapabilirsiniz. Bunlar sunucu donanımının çok istiyorsanız (çok pahalı elektrik bir çok kullanır çünkü), ya da bant genişliği çok pahalı olma eğilimindedir.

Açıkçası bu 3 seçenek maliyet artışı, webhosting arenada, sizin için ne ödeme olsun.

Bir webhosting forum bulmak ve orada etrafında sormak isteyebilirsiniz - CPU gereksinimlerini belirlemek için emin olun, ve ne kadar almak için onun muhtemel. Eğer (bu yedekleme ile müdahale, ya da düşük kaynak zamanınız varsa, gibi değil onlarla bir süre kabul ediyorsanız size 'saatleri dışında' sizin komut dosyasını çalıştırmak için daha fazla mutlu olacak, bazı hoster alabilirsiniz web siteleri) her zaman diliminde dünyada erişilebilir olma eğilimindedir

Genelde paylaşılan ana Ben size bir çok yoğun bir şey tavsiye etmem yani onların değerli CPU güç hogging sevmiyorum. Eğer özel bir sunucuya yatırım düşünmelisiniz toplu işlerini gerçekleştirmek için arıyorsanız, aynı zamanda genel olarak olması yararlı olacaktır.

Ben bir Facebook uygulaması (php, 350,000 bildirimleri) ile benzer bir şey yapıyorum. Ben CPU kullanımı hakkında benim hosting şirketi 1 "uyarısı" var, ama "uyarı" yükseltmek için benimle çalışmak sunan, satış geldi.

Ben aslında az çok eşzamanlı süreçler (10) yumurtlama ve birkaç noktalar bir uyku (10) komutu koyarak, bir seferde daha az CPU kullanımı için toplu iş komut dosyası değişti. Uyku komutu CPU tekrar aşağı "normal" seviyelere düşmesi için izin vermek, bu yüzden işlemci sivri değil, sürekli kullanım vardır.

Paylaşılan bir host CPU ani bekleniyor. (Herhangi bir iyi olup olmadığını) ancak sürekli yüksek bir CPU Level hosting şirketi uyarıları neden olacaktır. Sen% 50, ya da herhangi bir zaman uzun süre boyunca herhangi bir yüksek düzeyde işlemci çalıştıran önlemek istiyor.

Komut alır ve fazladan birkaç dakika eğer önemli değilse, kodunuzda bazı bekleme durumları (uyku) koymak. Bu da aynı makinede diğer kullanıcılara adil olduğunu.

Barındırma paylaşılan çalıştırmak sunucuları genellikle çok daha hızlı ortalama ev bilgisayarında daha vardır, bu yüzden muhtemelen sürece isimli yerel bilgisayarınızda çalışan yok almayacağız. Ben alarm çanları 500.000 e-postaları bir gün gönderme olsaydı çıkmak başlamak istiyorum düşünüyorum ama kısa bir süre için çok CPU bir sorun çok fazla olmaması gerektiğini kullanarak makul bir dizi varsa.

Sen her zaman bir şey sıralamak emin im, bu konuda ilk onlarla konuşabilirsin.

Kısacası, paylaşılan bir sunucuda domuz kaynaklara uygun değildir.

Diğer işlemler için yeterli zaman verim Temelde, bu kötü bir şey değil. Eğer ki tartışırken konum gibi CPU Spiking kötü bir şey ve sistemin diğer kullanıcılara hoş değil. Eğer ana döngü (usleep(100) örneğin) bir verim mekanizması var ve 19 gibi yüksek bir nice numarası ile komutunu çalıştırmanız gerekir.

Eğer toplu işlem komut bireysel ekleme / güncelleme / etc çağrıları yapıyoruz Ayrıca, gibi geliyor. MySQL sayesinde (son derece hızlı bireysel olanlara göre) mümkünse bir toplu ekler yapmak için çok daha iyi bir uygulamadır. Eğer ki bu nasıl bağlı olarak, CPU zamanı için RAM kapalı bir ticaret (örneğin, kadar bir dize ekleme tüm değerleri saklamak eğer onların bir tek insert deyimi ile eklenecek hazır, o ekleyebilirsiniz olabilir RAM bir sürü kadar). RAM bir sorun varsa, her zaman geçici bir SQL dosya oluşturmak ve ardından sürecin sonunda her şeyi alabilirsiniz.

Bir toplu insert (iki varchar sütun ile bir tablo için) gibi bir şey görünüyor:

INSERT INTO `mytable` VALUES ('Field 1-Row 1', 'Field 2-Row 1'), ('Field 1-Row 2', 'Field 2-Row 2');

Bu kez zaman bir kısmını da iki satır eklemek istiyorum.

Ama sonra tekrar, size muhtemelen başlamak için ekler bir sürü yapmamakla, betiğin amaç olarak tanımlamak ne dayalı. Ama belki hala DB güncellemeleri / eklerin tüm (veya çoğu) inşa edebileceğini / sonunda denilen bir son komut dosyası siler?

Ayrıca, size yabancı anahtar kontrolleri kapatarak, ithalat yapıyor doğru sırayla yabancı anahtarları tutmak emin iseniz de önemli ölçüde hızını artırabilir.

Olası tüm diğer öneriler belirli sizin kod optimizasyonu ve DB şema (optimize döngüler, aramaları, indeksler, vb) dayalı olacaktır.

Ben ne strongly implying Burada kaynaklarınızı eğmeden hosting böyle bir şey yapabilirsiniz, ancak DB yapısı, SQL ifadeleri ve algoritmalar (döngüler, vb) son derece optimize edilmelidir. Bunu yaparsanız, bir yararı da süreç de son derece hızlı bir şekilde bitirmek olacaktır. + Mysql = / yavaş cpu domuz ama bir programlama veya DB tasarım mesele zaman% 99 php, ortak bir yanlış anlayışı var. Kolayca birçok kayıtları ele gerekir.

I Amazon EC2 veya Mosso's Cloud Servers (Rackspace ait) gibi bir hizmeti kullanarak öneririm. Bu makul saatlik ücretler ve mükemmel API'leri sanal sunucuları. Sen asgari aylık taahhüt olmadan özel bir sunucunun güç olsun. Örneğin, normal bir web sunucusu, EC2 örneğini başlatmak işinizi çalıştırmak için bir haftalık / aylık cron işi çalıştırmak sonra, EC2 ile bir sanal sunucuyu, sonra EC2 örneği kapatıldı.