Ubuntu 14.04 Sunucusunda Apache Nasıl Ayarlanır


18

Şu anda Ubuntu 14.04'te Apache 2'de (tam olarak Apache 2.4.7'de) şu ayar var:

/etc/apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module>
StartServers                    20
MinSpareServers                 100
MaxSpareServers                 250
MaxRequestWorkers               150
MaxConnectionsPerChild          0
</IfModule>

Sunucu, bazı Google reklam kampanyaları için üç sayfalık bir kayıt formu yüklemekten başka bir şey yapmayan 8 GB (RAM) bir Amazon sunucusudur.

Web'de apachetuneit.sh adlı bir komut dosyası buldum , ancak bir süre sonra Apache bu hatayı bildiriyordu:

[Sal 21 Nis: 16: 45: 42.227935 2015] [mpm_prefork: hata] [pid 1134] AH00161: sunucu MaxRequestWorkers ayarına ulaştı, MaxRequestWorkers ayarını yükseltmeyi düşünün

Bu ayarların nasıl yapıldığını nasıl değerlendirebilirim?

Ben sadece Apache 2.4 ve başka bir şey ayarlamak için nasıl soruyorum. Bu soru farklı olmasının nedeni budur bu soruya .



@JennyD Bu makale bu özel ihtiyaç için çok geniş.
ServerChecker

Bu belirli ayarları yargılamanın yolu yük testi yapmaktır.
Jenny D

@JennyD Bundan daha da kolay. Ap.sh betiğini normal yük altında günde ve ortalama olarak birkaç kez kullanın, aşağıdaki cloudinservice bağlantısına göre matematik yapın ve MaxRequestWorkers'ı bu değere ayarlayın. Ardından, MaxRequestWorkers ile Apache günlüklerini izleyin ve artırın, daha fazla RAM ekleyin, CloudFlare ekleyin veya başka bir web düğümü ekleyin. Aşırı yoğun yük testi yapmaya gerek yoktur.
ServerChecker

Bu komut dosyası hakkındaki bilgileri ve kendi yanıtınıza eklediğiniz bağlantılardan, olası bir kopya olarak işaret ettiğim soruya ilgili bilgileri içeren bir yanıt yazabilirsiniz.
Jenny D

Yanıtlar:


45
  1. Ubuntu 14.04'ün , düzenlenebilir bir dosya /etc/apache2/mods-enabled/mpm_prefork.conf içinde bulunan bir mpm_prefork modülü üzerinden çalışan PHP'li Apache 2 kullandığını unutmayın . Ayrıca, Apache 2.4'ten başlayarak MaxClients'ın artık MaxRequestWorkers olarak yeniden adlandırıldığını ve bu nedenle MaxClients ile ilgili tüm belgelerin MaxRequestWorkers olarak değiştirilmesi gerektiğini unutmayın.

  2. Apache web hizmetini aşağıdaki komutla geçici olarak durdurun:

    sudo service apache2 durdurma
  1. 5 saniye bekleyin ve ardından sunucuda ne kadar sanal belleğe sahip olduğunuzu öğrenmek için aşağıdaki komutu çalıştırın:
    sudo ücretsiz -ht

Mem: satırını okuyun ve ücretsiz sütuna bakın. Genellikle Apache'ye ayırabileceğiniz RAM miktarı olarak düşünün, ancak genellikle daha bej bir sunucuda 2GB (> 4GB'da olduğu gibi) veya daha hafif bir sunucuda 1GB düşmek isterim. Bu yüzden, ücretsiz sütun 13 GB'lık ücretsiz olduğumu söylerse, Apache 11GB vermenizi tavsiye ederim. Bu bir temel. Günlüklerde zaman zaman herhangi bir veritabanı sorunuyla karşılaşırsak (3 günlük bir süre boyunca günlüklerde 3 kez olduğu gibi) daha fazla belleğe ihtiyaç duyarsak, 11GB yerine oynamak için sadece 10GB'ımız olduğunu düşünebiliriz (bu durumda ). Apache günlüklerinde sunucunun daha fazla MaxRequestWorkers'a ihtiyacı olduğunu görürsek, bu aşağıda ele alacağım ayrı bir konudur.

  1. Apache web sunucusunu başlatın.
    sudo service apache2 başlat
  1. 10 tarayıcı sekmesi gibi açın, web sitenizden daha uzun veya daha yavaş yüklenen sayfalarınızdan bazılarına bağlanın ve her sekmede 3-4 kez yenileyin.

  2. Bunu yaptıktan sonra, hızla aşağıdaki komutu çalıştırın:

    sudo ps -ylC apache2 | awk '{x + = 8 $; y + = 1} END {print "Apache Bellek Kullanımı (MB):" x / 1024; "Ortalama İşlem Boyutu (MB):" x / ((y-1) * 1024)} '

5 kat hızlı koş.

Ortalama Proses Boyutu değerine ve bu değeri 5 kez çalıştırdığınız ortalama değere bakın.

Şimdi aşağıdaki matematiği yapın ve tüm sayıların MB değerlerinde olması için GB'yi MB'ye dönüştürdüğünüzden emin olun. Bu nedenle, gitmeniz gereken yola bağlı olarak 1024'ü çarpın veya 1024'e bölün.

MaxRequestWorkers = Baseline Free (arabellek alanı ile) / Avg İşlem Boyutu

Örneğin, 14GB'lık bir sunucum vardı, ancak Apache durdurulduğunda sunucu boşta 1GB RAM kullandığını gösterdi. Daha sonra işletim sistemi için gerekli olması durumunda ekstra bir arabellek alanında 1 GB daha sağlarım. Yani 12 GB'lık bir Baseline Free'im olacaktı. Şimdi GB'den MB'ye dönüştürmeliyim ve bu yüzden 12 x 1024'ü çarpıp 12288 elde etmeliyim. 12288 MB benim Temel Ücretsiz değerim. Benim durumumda Ortalama Süreç Boyutunun 21 MB olduğunu gördüm. Yani, 12288/21 alıyorum ve yaklaşık 585 alıyorum. Şimdi, sysops'un bu değeri yuvarlaması yaygındır ve bu yüzden 580 aldım.

  1. /Etc/apache2/mods-enabled/mpm_prefork.conf dosyasını düzenleyin ve XXX yerine MaxRequestWorkers hesaplamanızla aşağıdaki varsayılanları ayarlamayı düşünün:


`<IfModule mpm_prefork_module>`
  StartServers                    2
  MinSpareServers                 2
  MaxSpareServers                 5
  MaxRequestWorkers               XXX
  ServerLimit                     XXX
  MaxConnectionsPerChild          0
</IfModule>

Burada ServerLimit parametresini göremeyebileceğinizi unutmayın. Ekle. Bu parametre yoksa 256 değerini varsayılan olarak alır, ancak MaxRequestWorkers ile aynı değere sahip olması gerekir; aksi takdirde bir hata alırsınız.

  1. Apache yapılandırmanızdaki bir diğer kritik faktör, Zaman Aşımı değişkenine sahip /etc/apache2/apache2.conf dosyasıdır ve saniye cinsinden ölçülür. Bu, sunucu zaman aşımına uğramadan ne kadar sürede gönderip alabileceğinizdir. Ayrıca, insanların CSV veya diğer büyük dosyaları yükleyebileceği veya indirebileceği bir web siteniz varsa, örneğin bir dosya yükleme veya dosya indirme işlemini de aklınızda bulundurmanız gerekir. Ayrıca, meşgul bir veritabanı sunucusunu ve sayfa zaman aşımından önce biraz zaman ayırmanız gerekebileceğini unutmayın. Zaman Aşımı değişkenini ne kadar küçük yaparsanız, web sunucusu yeni bağlantılar almak için o kadar kullanılabilir olur. Bununla birlikte, bu değerin çok düşük olarak ayarlanmasının tarayıcı oturumu tabanlı çerezlerde olmasa da PHP oturum değişkenlerinde hasara neden olabileceğini unutmayın. Örneğin, tarayıcı oturumu çerezleri yerine web uygulaması iş akışı için PHP oturum değişkenlerine dayanan bir web sunucusu için 300 (5 dakika) değeri iyi olabilir. 45 değeri, statik reklam açılış sayfalarından başka bir şey sunmayan bir web sunucusu için iyi olabilir, ancak PHP oturum değişkenlerini çok kullanması gereken bir sunucu için korkunç olurdu. Bu nedenle, bu dosyadaki Zaman Aşımı parametresini ihtiyacınız olan miktarda düzenleyin. Bu, değerin çok düşük olup olmadığını görmek için tüm web sayfalarınızla bazı testler gerektirebilir. Bununla birlikte, büyük dosya yüklemelerinde veya büyük dosya indirmelerinde sorun görmüyorsanız, 300'den daha yüksek bir değere ayarlamaması iyi bir fikirdir. ancak PHP oturum değişkenlerini çok kullanması gereken bir sunucu için korkunç olurdu. Bu nedenle, bu dosyadaki Zaman Aşımı parametresini ihtiyacınız olan miktarda düzenleyin. Bu, değerin çok düşük olup olmadığını görmek için tüm web sayfalarınızla bazı testler gerektirebilir. Bununla birlikte, büyük dosya yüklemelerinde veya büyük dosya indirmelerinde sorun görmüyorsanız, 300'den daha yüksek bir değere ayarlamaması iyi bir fikirdir. ancak PHP oturum değişkenlerini çok kullanması gereken bir sunucu için korkunç olurdu. Bu nedenle, bu dosyadaki Zaman Aşımı parametresini ihtiyacınız olan miktarda düzenleyin. Bu, değerin çok düşük olup olmadığını görmek için tüm web sayfalarınızla bazı testler gerektirebilir. Bununla birlikte, büyük dosya yüklemelerinde veya büyük dosya indirmelerinde sorun görmüyorsanız, 300'den daha yüksek bir değere ayarlamaması iyi bir fikirdir.

  2. Şimdi Apache web hizmetinizi yeniden başlatın. Yanlış bir şey yaptıysanız, Apache muhtemelen yeniden başlattığınız andan bahsedecektir ve düzeltebilirsiniz.

    sudo service apache2 yeniden başlatma
  1. Şimdi daha önce yaptığınız 10 sekmeli tarayıcı numaralarını tekrarlayın ve Apache web sunucusu hata günlüğünde Apache yapılandırma hatalarıyla karşılaşıp karşılaşmadığınızı görün:
    sudo tail -f /var/log/apache2/error.log

... isterseniz CTRL + C tuşlarına basın.

MaxRequestWorkers (ve son zamanlarda web sunucusunu yeniden başlattığınızdan beri) ile ilgili bir şikayet arayın. Optimal MaxRequestWorkers ayarında bile görüyorsanız, büyük olasılıkla web siteleriniz veya web uygulamalarınız için daha fazla ateş gücüne ihtiyacınız vardır. Şu seçenekleri göz önünde bulundurun:

  • Büyük dosya yüklemeleri, resimler ve komut dosyaları için CDN kullanma.
  • CloudFlare veya diğerleri gibi bir önbellek hizmeti kullanma.
  • Bir yük dengeleyicinin arkasında bir "web uygulaması" olarak işlev gören birden çok web sunucusu kullanmak için web sitenizi veya web uygulama stratejinizi yeniden yapma.
  • Sunucuya daha fazla RAM eklemek ve bu hesaplamayı tekrar tekrar yapmak.

  1. Artık Apache sunucusu ayarlandığına göre, bir çeşit temel ayar yapılmıştır. 2-3 hafta boyunca kontrol etmeniz ve Apache hata günlüklerinde MaxRequestWorker sorunlarını aramanız gerekir. Bundan, optimizasyon hakkında bir karar verebilirsiniz (bkz. Adım 10). Munin'i Ubuntu'ya apt ile yükleyebilir ve zamanla Apache performansına bakabilir ve web sunucusunun işlediği trafik miktarı hakkında bir şey yapmanıza karar vermeden önce bir büyüme fikri çizebilirsiniz.

“Bu bağlantılar soruyu cevaplayabilirken, cevabın önemli kısımlarını buraya eklemek ve referans için bağlantı sağlamak daha iyidir. Bağlantı verilen sayfa değişirse yalnızca bağlantı yanıtları geçersiz olabilir. ”
Jenny D

@JennyD İyi bir nokta! Bunu yapacağım.
ServerChecker

@ Moderatör Bu cevap için biçimlendirme yardımına ihtiyacım var. Adım 7, girintiler ile conf dosya olması gerekiyordu. Adım 11'in girintili olması gerekmiyordu. İle başlayan kod komutlarının sudonormal metin olarak değil, kod olarak gösterilmesi gerekir. Biçimlendirme ile ilgili belgeleri izledim, ancak yine de burada mücadele ediyorum.
ServerChecker

1
Ne yapabilirim - markdown gerçekten karışık listeler ve kod çok iyi yapmaz, ama yine de biraz daha iyi başardı düşünüyorum.
Jenny D

benim gibi centos yeni başlayanlar için: ps -ylC apache2 yerine ps -lyU apache
user1928596

3

MaxRequestWorkers'ı ne kadar artırabileceğiniz, httpd / apache işlemlerinizin her birinin ne kadar RAM kullandığına bağlıdır. Her biri 50 MB alırsa (sadece rastgele bir sayı seçerek), aynı anda kullandığınız her 20 talep çalışanı (eşzamanlı bağlantılar) 1 GB alır. Bu örnekte, en fazla 8GB * 20 = 160 MaxRequestWorkers olabilir. Ancak, tüm RAM'i apache için kullanamazsınız, orada çalışan diğer şeyler için bazılarını ayırmanız gerekir. Ayrıca, işletim sistemi bir şeyler önbelleğe almak ve performansı hızlandırmak için kullanacağı için bazı yedek RAM bırakmak performans için yararlı olabilir (ancak site yavaş görünürken sunucunun çok hızlı olmasıyla karşılaştırıldığında bağlantıların bitmemesi tercih edilebilir. kullanıcıların tarayıcıları, hepsi tükenirse bir bağlantının kullanılabilir olmasını bekler).


Bunu profil etmenin iyi bir yolu nedir? Her apache işleminin yük altında ne kadar RAM kullandığını görmek için hangi komutları yazabilirim? Ayrıca MySQL (bir WordPress sitesi) ve normal sistem işlemleri için RAM odasına ihtiyacımız var.
ServerChecker

Kaç işlemin çalıştığını görün ve freebir bellek taban çizgisi almak için komutu çalıştırın . Ardından MinSpareServers'ı artırarak, apache'yi yeniden başlatarak, freetekrar çalıştırarak ve matematiği yaparak çalışan işlem sayısını artırın . Daha fazla bilgi ve açıklama için moreofless.co.uk/apache-memory-usage adresini ziyaret edin .
g491

Şimdi bunu yapmanın süper hızlı bir yolu olduğunu öğrendim. Aşağıdaki cevabımdaki cloudinservice.com bağlantısında özetlenmiştir. Komut, birinin anlayabileceği ap.sh komutudur. Ayrıca, MaxClients'ın Apache 2.4+ sürümünde MaxRequestWorkers olarak yeniden adlandırıldığını öğrendim.
ServerChecker
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.