Hız için LAMP sitelerini optimize etmek için en iyi yöntemler?

8 Cevap php

Ben LAMP yığını üzerinde tipik bir siteyi oluştururken nasıl mümkün olan en iyi yükleme süreleri için optimize mi bilmek istiyorum. Ben tipik bir DB güdümlü sitesi resmeden duyuyorum.

Bu yüksek düzeyli bir görünüm ve muhtemelen söz konusu çekin ve bana yığın her katmanın içine yıkmak izin verebilir.

L - sistem düzeyinde, (kurulum ve dosya sistemi) Eğer hızını artırmak için ne yapabilirim? Aklıma bir şey görüntü boyutları olduğunu, bir şey optimize etmenize yardımcı burada kompresyon olabilir?

A - burada web sunucusu site hızı ile ilgili ayarları bir ton olmak zorunda. Benim Forte. Muhtemelen aynı anda çalışan kaç site bir çok bağlıdır.

M - MySQL veritabanı tabanlı site DB performans anahtarıdır. Bağlantı tabloları kullanarak daha iyi bir normalleşme yaklaşım yani, var mı? Web geliştiriciler genellikle sadece 1nF benzeyen basit bir monolitik tablolar yapmak ve bu performansı öldürebilir.

P - kenara programcı yüksek düzeyde performansını etkileyecek ne yapabilirim önbelleğe alma gibi performans arttırıcı ayarları, gelen? Gerçekten MVC tasarım daha hızlı-ve-kirli daha vurmak performans yaklaşımları olmadığını bilmek istiyorum. Gibi diğer basit ipuçları hızlı kurabiye bilmek ilginç olurdu daha oturumları vardır.

Açıkçası aşağı ve kirli detaya almak ve sizi yavaşlatan ne kod bulmak zorunda. Ayrıca ben birçok site çok farklı performans özelliklerine sahip olduğunu biliyoruz, ama en fazla yazıyor sonra okur bir tipik bir siteyi düşünelim.

En iyi uygulamaların bir demet derlemek ve tam biz etkili bir kontrol listesi işlenip böylece insanların diğer sorulara bağlantı bekleyebilirsiniz, ben sadece merak ediyorum.

Amacım bile performans olağan konulara ek olarak biz en iyi uygulamaları özet ile birlikte gitmek için size kırpma kadar düşünmek olmayabilir, bazı tuhaf şeyler görebilirsiniz görmek için.

Yani benim soru Sıfırdan başlayan olsaydı, nasıl sure LAMP sitesi hızlı yapmak istiyorsunuz, nedir?

8 Cevap

İşte ben her zaman benim LAMBASI uygulamalarında kurulmuş bir kaç kişisel zorunluluktur-dos bulunuyor.

  • Install mod_deflate for apache, and do not use PHP's gzip handlers. mod_deflate will allow you to compress static content, like javascript/css/static html, as well as the usual dynamic PHP output, and it's one less thing you have to worry about in your code.

  • Be careful with .htaccess files! Enabling .htaccess files for directories in your app means that Apache has to scan the filesystem constantly, looking for .htaccess directives. It is far better to put directives inside the main configuration or a vhost configuration, where they are loaded once. Any time you can get rid of a directory-level access file by moving it into a main configuration file, you save disk access time.

  • Prepare your application's database layer to utilize a connection manager of some sort (I use a Singleton for most applications). It's not very hard to do, and reducing the number of database connections your application opens saves resources.

  • If you think your application will see significant load, memcached can perform miracles. Keep this in mind while you write your code... perhaps one day instead of creating objects on the fly, you will be getting them from memcached. A little foresight will make implementation painless.

  • Once your app is up and running, set MySQL's slow query time to a small number and monitor the slow query log diligently. This will show you where your problem queries are coming from, and allow you to optimize your queries and indexes before they become a problem.

  • For serious performance tweakers, you will want to compile PHP from source. Installing from a package installs a lot of libraries that you may never use. Since PHP environments are loaded into every instance of an Apache thread, even a 5MB memory overhead from extra libraries quickly becomes 250MB of lost memory when there's 50 Apache threads in existence. I keep a list of my standard ./configure line I use when building PHP here, and I find it suits most of my applications. The downside is that if you end up needing a library, you have to recompile PHP to get it. Analyze your code and test it in a devel environment to make sure you have everything you need.

  • Lütfen Javascript küçültmek.

  • Be prepared to move static content, such as images and video, to a non-dynamic web server. Write your code so that any URLs for images and video are easily configured to point to another server in the future. A web server optimized for static content can easily serve tens or even hundreds of times faster than a dynamic content server.

Ben kafamın üst kapalı düşünebilirsiniz budur. PHP en iyi uygulamalar için yaklaşık google'da yanı sıra daha hızlı / daha iyi kod yazmak için nasıl ipuçları bir sürü bulabilirsiniz (Mesela: echo daha hızlıdır print).

İlk olarak, performans tekrarlanan bir süreç olduğunu biliyoruz. Sen, bir tek geçişte bir web uygulaması oluşturmak başlatmak ve tekrar üzerinde çalışmak asla yoktur. Siteniz büyüdükçe Aksine, küçük başlamak ve adresi performans sorunları.

Şimdi, özelliklerini üzerine:

  1. Profil. Senin darboğazları tespit. Bunun en önemli adımdır. Eğer iyi sonuçlar alırsınız nereye çaba odaklanmak gerekir. Ne (ler) sunucu üzerine oluyor içine görünürlük vererek, (kaktüsler ya Munin gibi) yerinde izleme çözümünün çeşit olmalıdır
  2. Önbellek, önbellek, önbellek. Ama kendi bunu doğrulamak gerekir - Muhtemelen veritabanı erişimi arka ucunda sizin en büyük darboğaz olduğunu göreceksiniz. Neyse ki, muhtemelen çok fazla trafik kaynaklarının küçük bir set için olduğunu göreceksiniz. Kendinizi veritabanı isabet tasarrufu ve daha iyi backend performans sonucunda, memcached gibi bir şey bu kaynakları önbelleğe alabilir.
  3. Diğerleri Yukarıda belirtildiği gibi, ydn performans kurallara bir göz atın. accompanying book alıp düşünün. Bu ön uç performansı ile size yardımcı olacak
  4. PHP APC takın, ve tüm derlenen PHP için tutmak için yeterli hafıza ile yapılandırılmış emin olun. Biz son zamanlarda bizim APC kurulum neredeyse yeterli ram yoktu keşfetti; yarısında kesim bizim CPU zamanı çalışmak için yeterince veren ve% 10 oranında disk etkinliği
  5. Veritabanı tabloları düzgün endeksli olduğundan emin olun. Bu yavaş sorgu günlük izleme ile el ele gider.

Yukarıda çok uzakta alacak. Bu bile oldukça db-ağır site yukarıda yaptık eğer tek bir alçakgönüllülükle-spec 'sunucuda bir frontpage digg hayatta gerekir, söylemektir.

Sen sonunda varsayılan apache yapılandırma daima, gelen isteklere yetişmek mümkün olmayacak bir noktaya vuracak. Bu duvara çarptığında, yapılacak iki şey vardır:

  1. Yukarıda olduğu gibi, profil. Apache etkinliğini izlemek - trafik ani patlamaları olsun zaman kaç bağlantıları etkin bağlantıların maksimum sayısına ek olarak, herhangi bir zamanda aktif bir fikir olmalı
  2. Bu düşünce ile apache yapılandırın. Bu gördüğüm apache config en iyi kılavuzdur: Practical mod_perl chapter 11
  3. Olabildiğince apache kapalı kadar yük almak. Verimli statik içerik sunmak için Apache çok ağır. Sen statik içerik sunmak için, ve müşterilerine yavaş kaşık-besleme bayt işi devralmak için daha hafif ters proxy (kalamar gibi) veya web sunucusu (lighttpd'nin veya nginx) kullanıyor olmalıdır. Bu en iyi yaptığı şeyi yapmak için Apache bırakır: kodunuzu yürütmek. Yine, mod_perl kitap explaining this iyi bir iş yok.

Bu kadar kazanılmış ettik, daha büyük ölçüde önbelleğe bir mesele, ve veritabanı üzerinde bir göz tutmak. Sonunda, tek bir sunucuyu büyümek olacak. İlk olarak, muhtemelen tek bir veritabanı sunucusu tarafından desteklenen daha ön uç kutuları, ekleyeceğiz. Sonra muhtemelen Sharding göre, etrafında veritabanı yükü yaymak başlamak zorunda gidiyoruz. Bu büyüme sürecinde mükemmel bir özeti için bkz this livejournal presentation

Yukarıda çok az bir daha derinlemesine bakmak için, Flickr ün, Cal Henderson, Building Scalable Web Sites check out. Hakkında var portions of the book available for preview

I MysqlTuner Benim mysql sunucuları ve performans analizi için kullandım onun Googling, yanı sıra kendi öneriler yapmak için daha fazla sorunları içine iyi bir fikir verilmiş

Sizin için yararlı olabilecek bir kaynak YDN set of performance rules olduğunu.

Kullanıcıların uzak sunucudan binlerce kilometre olması ve tek bir sayfa oluşturmak için onlarca dosya indirme gerçeğini unutmayın. Bu gecikme, ve onların tarayıcılarda sayfa render havai size bilgi toplama ve sayfasını oluşturuyor harcadıkları zamanı miktarı daha fazla olabilir.

Best Practices for Speeding Up Your Web Site yaklaşık Yahoo Developer Network sayfalarını görmek, ve YSlow tool zaman alıyor sitenin indirme hangi bölümünün görmek için.

Dosya sisteminiz için atime kapatmayı unutmayın!

I Jet Profiler for MySQL herhangi bir kötü sorguları bulmak için kullanmanızı tavsiye ederim. Ben başarılı benim sitelerin bir çift üzerinde kullandım. Gerçekten yararlı ve yavaş sorgu günlüğüne göre sindirimi çok daha kolay.

I http://highscalability.com/ ile başlayan tavsiye ederim

Sizin önerileriniz gelince:

Görüntüler için sıkıştırma, kesinlikle hayır. Sistem dosyalarını tunning tipi, evet, bazı etkisi var, ama çok az olabilir. Ama aslında iyi-bellek ters vekil, hatta daha iyi CDN kullanmaktır.

Apache için temelde sadece ihtiyacınız modülleri yükleyin. Başka bir şey yüklemeyin. Sadece MPM çatallama kullanabilirsiniz PHP ile olduğu gibi, ince onu tutmak için önemlidir. Eğer yeterli işlemci varsa optimum ayarlarla gelince, iyi belirli bir uygulama için ayar onları ince zorunda, vb donanım, bu mod_deflate kullanmanız tavsiye bulunuyor. Daha hızlı sunucu istemciye veri gönderebilir, daha hızlı bir sonraki isteği işleme başlayabilirsiniz.