İstek sıklığı düştüğünde neden yanıt süresi patlıyor?


22

Düzeltme : yanıt süresi ( %D) ms değildir! 1

Bu, bu desenin garipliği ile ilgili hiçbir şeyi değiştirmez ancak pratik olarak daha az yıkıcı olduğu anlamına gelir.


Yanıt süresi neden talep sıklığı ile ters orantılı?

Sunucu, istekleri daha az meşgulken daha hızlı yanıt vermemeli mi?

Apache'nin daha az yükten "faydalanma" yapması için herhangi bir öneriniz var mı?

görüntü tanımını buraya girin

Bu desen periyodiktir. Bu, gösterimlerin dakika başına yaklaşık 200 isteğin altına düşüp düşmediğini gösterir - bu da (doğal kullanıcı etkinliği nedeniyle) gece geç saatlerden sabaha kadar gerçekleşir.


İstekler 1000 karakterden az bir JSON gönderen çok basit POST'lerdir - bu JSON saklanır (bir metin dosyasına eklenir) - işte budur. Cevap sadece "-" dır.

Grafiklerde gösterilen veriler Apache'nin kendisi ile kaydedilmiştir:

LogFormat "%{%Y-%m-%d+%H:%M:%S}t %k %D %I %O" performance
CustomLog "/var/log/apache2/performance.log" performance

2
Bir şeyin önbellek baskısına neden olması olasıdır ve sonuç olarak diskten bir şeyleri yeniden almak zorunda kalır mı? Disk etkinliği nasıl görünür?
TLW

2
Bu istekler mi gelmeden dakika ya istekleri başına ele Dakikada?
user253751 21:16

Bu verileri kaydetmek ve çizmek için hangi yazılımı kullandınız? Gerçekten meraklı
Délisson Junio

1
@ wingleader: Apache2 ile kaydedildi ve R
Raffael ile

@ immibis: eklediğim log konfigürasyonuna bakın - bence "geliş"
Raffael

Yanıtlar:


31

Bu, veri merkezlerinde yaygın bir davranıştır. Yanıt sürenizin yavaş olduğu zamanlar, Genel Penceresi olarak adlandırılan şeye karşılık gelir. Bu, kullanıcı etkinliğinin düşük olması ve toplu işlemlerin çalıştırılabileceği bir dönemdir. Yedeklemeler de bu dönemde yapılır. Bu faaliyetler, sunucu ve ağ kaynaklarını, sizin gibi performans sorunlarına neden olarak zorlayabilir.

Sorunlara neden olabilecek birkaç kaynak var:

  • Yüksek CPU yükü. Bu, apache'nin bir zaman diliminin isteği işleme koymasını beklemesine neden olabilir.
  • Yüksek bellek kullanımı. Bu, apache'nin kaynakları diskten okumadan kaynak sunmasını sağlayan tamponları temizleyebilir. Ayrıca, apache çalışanlarının çağrı yapmasına / değiştirilmesine de neden olabilir.
  • Yüksek disk etkinliği Bu, disk G / Ç etkinliğinin sunma içeriğinde karşılık gelen gecikmelerle sıraya alınmasına neden olabilir.
  • Yüksek ağ etkinliği. Bu, paketlerin iletim için sıraya alınmasına, yeniden denemelerin artmasına ve hizmetin bozulmasına neden olabilir.

Bu sarşekilde yayınlanan soruşturmayı kullanırım . günlük veri dosyalarına veri atsartoplamak için kullanılabilir sar. Bunlar, performansın normal olduğu gündüz saatlerinde, sistem davranışının nasıl olduğunu görmek için ve performans değişkenken overnite görmek için incelenebilir.

Sistemi muninveya kaynak kullanımını toplayan ve grafikler çizen başka bir sistemle izliyorsanız, burada bazı göstergeler bulabilirsiniz. Hala sardaha kesin buluyorum .

Etkilerini en aza indirmek için toplu işlemlere uygulanabilecek niceve benzeri araçlar vardır ionice. Yalnızca CPU veya G / Ç sorunları için etkilidirler. Bellek veya Ağ etkinliği ile ilgili sorunları çözme olasılıkları yoktur.

Yedekleme etkinliğini ayrı bir ağa taşımak ve ağ çekişmesini azaltmak. Bazı yedekleme yazılımı, kullanılacak bant genişliğini sınırlayacak şekilde yapılandırılabilir. Bu ağ çekişmesini çözebilir.

Toplu işlemlerin nasıl tetiklendiğine bağlı olarak, paralel çalışan toplu işlem sayısını sınırlayabilirsiniz. Bu, aslında aynı kaynak çekişmesine maruz kaldıkları için toplu işlemlerin performansını da artırabilir.


1
Bir bağlantı saryararlı olabilir. Bunu buldum: en.wikipedia.org/wiki/Sar_(Unix)
Roger Lipscombe

bu sadece yedeklemeler olmayabilir, vm sağlayıcıları durma sürelerinde aynı makinelere daha fazla vm taşıyabilir ve enerjiden tasarruf etmek için birkaç rafı kapatabilir (ya da gerçekten onları toplu işlere adamak için)
Jens Timmerman

8

Bu ilişki, istek gönderenlerin yeni bir istek göndermeden önce önceki bir isteğin tamamlanmasını beklemesi durumunda diğer yönde de olabilir. Bu durumda, müşteri tarafında sıraya alınma nedeniyle talep süreleri arttıkça (ne olursa olsun) trafik düşer.

Ya da ölçümünüzün bir ürünü olabilir - yukarıdaki grafik tamamlanmış talepleri gösteriyorsa , gelen taleplerin aksine , talep işleme süresi arttıkça oran azalacaktır (sonlu kapasite varsayılarak: D).


Tabii ki bu sadece olası sebeplerin yüzeyini çiziyor, ancak açılış problemi ifadesi bakması gereken bir şey değil. Bu süreç başka bir şeyle mi konuşuyor? Ne tür istekleri yerine getiriyor? İş yükü zaman içinde değişiyor mu? Ve benzeri ....
Karol Nowak

ilginç bir bakış açısı ancak semptomların periyodikliği ve süresi ile iyi gitmiyor
Raffael

7

BillThor cevabı @ rağmen olabilecek doğru, düşük yük periyodu tamamen yedekleme yöntemi ile toplanması olduğunu zor görünüyor (yani dönemleri tam eşleşmesini).

Alternatif bir açıklama sadece önbelleklemedir. Belirli bir komut dosyası / veritabanı / yakın zamanda ne kullanılmamışsa, işletim sisteminin geri kalanı için belleği boşaltmak için ilgili önbelleğe alınmış veriler bırakılmış olabilir. Bu, bir veritabanındaki dizinler veya bir dosyaya ilişkin O / S arabellekleri veya benzer herhangi bir şey olabilir. Bir sorgu son sorgulamadan bu yana bir süre geçmişse, bu bilgiyi yeniden oluşturmak zorunda kalacaktır. Yoğun dönemlerde bu, son sorgu sıkça yapıldığından gerçekleşmez. Bu aynı zamanda yoğun çalışma süresinde neden düşük yanıt süreleri ve yüksek yanıt süreleri gördüğünüzü de açıklar .


Özellikle sorgu önbelleğe alma ve / veya disk erişimi önbelleğe alma söz konusuysa. Bir kenara atılması halinde, herhangi bir "iş parçacığı yeniden kullanımı" stratejisi de varsa, bu da yardımcı olacaktır.
mckenzm

İlgili hiçbir okuma yoktur.
Raffael

1
@Raffael "Katılan herhangi bir okuma olmadığını" garanti edebileceğinizden çok şüpheliyim. Önemsiz bir düzeyde, Apache'nin sayfalarının disk belleği çıktığını, çünkü başka bir şeyin RAM istediğini varsayalım. Varsayalım ki Apache for Apache, işler boştayken ve yeni şeyler oluştururken ek yük varken, iş parçacığı / işlem sayısını azalttı mı? Cidden strace, Apache işleminde koşarsanız, read()sistem çağrısı veya benzeri bir şey görmediğinizi mi söylüyorsunuz ? Bu oldukça sıradışı olurdu.
saat

@ abligh: peki, doğru, "hizmet" benim açıkça diskten bir şey okumuyor
Raffael

Eğer işletim sistemi önbelleğe almanın etkisini test etmek istiyorsanız @Raffael (sadece), sonra yoğun bir süre boyunca echo 3 > /proc/sys/vm/drop_cachesher 5 saniyede bir yapın ve yanıt süresi üzerinde benzer etkiler alıp almadığınızı görün.
saat

2

Orada gördükleriniz bana göre istatistiksel bir sorun gibi görünüyor. Olmayabilir, @ BillThor'un cevabı doğru olabilir, ama bunu eksiksizlik için göndereceğim.

Tepki süresi grafikleri yüzdelik tabanlıdır. 800-1000 isteklik bir örnek havuz bunun için iyi bir örnek sayımdır, 50-100 isteklik bir havuz olabilir.

Yavaş istek sayısının, istek hacminin doğrusal bir işlevi olmadığını kabul edersek, taleplerde büyüklük sırası artışı, yavaş taleplerde büyüklük sırası artışıyla sonuçlanmaz; daha düşük ortalama talep süresi.


1
eğer gözlem sadece 50 ila 100 talepten oluşuyorsa, o zaman bu gerçekten rastlantısallık olabilir, fakat grafiğe bakarsanız, her biri yaklaşık 50 ila 100 talep içeren yaklaşık 60 x 5 deneyden bahsettiğimizi göreceksiniz - bu kesinlikle yeterli olacaktır. rastgeleliği ekarte et. Ayrıca yakından bakarsanız yaklaşık 2500 ms'de çıkan kararlı bir ortalama yüzde 50'lik oran göreceksiniz.
Raffael

Zorunlu değil, bu tür istatistiklerin toplu halde nasıl davrandığı tam olarak değil. Örneğin, 1 saatin üzerinde 1000 istek ve 1 dakika boyunca 1000 istek aynı şekilde davranmaz. Ayrıca muhtemelen burada da olmuyor. Küçük örneklem büyüklükleri garip davranır, bu durumda 60x5 örnek kümelerine benzer. Desen, doğrusal olmayan yükleme işleminin bir sonucu olabilir.
Kaithar

0

Yalanlar, büyük yalanlar ve istatistikler var.

Hipotezim: üç farklı istek kategoriniz var:

  1. İsteklerin çoğunu içeren normal değişken akış ve bunların tümü 200-300 withins içinde tamamlanır.
  2. Dakikada yaklaşık 20 istek sabit hızda küçük dere (gece bile). Her birinin tamamlanması yaklaşık 2.500 takess sürer.
  3. Dakikada yaklaşık 10 isteklik sabit bir hızda minik akış (geceleri bile). Her biri 4.000 aboves üzerinde iyi alır.

Geceleri, dakikada 50 istek karşılık gelen 20 + 20 + 10'dur. Ve böylece,% 50 yüzdelik sonucu şimdi güçlü bir şekilde akış 2'nin sonucuna bağlıdır. Ve% 95 yüzdelik akış 3'e bağlıdır, böylece grafikte hiçbir zaman gösterilemez.

Gün boyunca, 2 + 3 akışları% 95 yüzdelik değerin üzerine gizlenmiştir.


Akıntı ile ne demek istiyorsunuz? Talepler tamamen homojen, talep eden müşteriler ise kesinlikle heterojendir.
Raffael

0

Ne kadar çok bakarsam, veri toplamada bir sorun olduğunu düşünmeye meyilliyim.

Öncelikle, TPS'nizde çok garip bir şeyler oluyor. Genel patern normal görünse de , yaklaşık 9: 00'da ve daha sonra sabah 7: 00'da meydana gelen çok keskin bir kopma vardır. Normal bir grafik yoğun olmayan saatlere geçiş sırasında çok daha yumuşak olacaktır.

Bu, profilde bir değişiklik olduğunu ve muhtemelen 2 farklı müşteri türünüz olduğunu gösterir:

  1. Yüksek hacimlerde, yalnızca sabah 7:00 ile akşam 9 arasında (ish) çalışan ve
  2. Muhtemelen 24 saat boyunca çalışan, düşük ses seviyelerinde.

İkinci ipucu 18:00 civarında. Önce ve sonra çoğu zaman, yüksek hacim profiline sahibiz - yüksek TPS ve düşük gecikme süresi. Ancak saat 18: 00'de 800-1000 RPM'den 400 RPM'nin altına ani bir düşüş var. Buna ne sebep olabilir?

Üçüncü ipucu, yüzde 5’lik yanıt sürelerinde azalmadır. Aslında iki nedenden dolayı minimum yanıt sürelerine bakmayı tercih ediyorum (ancak 5. yüzdelik muhtemelen daha iyi): Servis süresini (yani, yanıt süresi eksi kuyruğa alma) ve yanıt süreleri bir Weibull dağılımını takip etme eğiliminde olduğunu gösteriyor. (veya en yaygın değer) asgari değerin hemen üstündedir.

Bu yüzden, yüzde 5'lik orandaki düşüş bana, seride ani bir kırılma olduğunu ve hem sapma hem de ortalama cevaplama sürelerinin büyük ölçüde artmasına rağmen hizmetin zamanının gerilediğini söylüyor.

Sonraki adımlar

Bu aşamada, 18:00 düşük hacimli numunelerden önce ve sonra yüksek hacimli numunelere kıyasla farklı olanı bulmak için kütüklere derin bir dalış yapacağım.

Ben arardım:

  • coğrafi konumdaki farklılıklar (gecikmenin $ request_time özelliğini etkilemesi durumunda)
  • URL’deki farklılıklar (hiçbiri olmamalıdır)
  • HTTP yöntemindeki farklılıklar (POST / GET) (olmamalı)
  • aynı IP’den gelen tekrarlanan istekler
  • ve diğer farklılıklar ...

BTW, 18:00 "olayı" benim için veri merkezi tıkanıklığı / etkinliği ile ilgisi olmadığını kanıtlıyor. Bunun doğru olması için, tıkanıklığın TPS'de bir düşüşe neden olması gerekir; bu, 18: 00'da mümkündür, ancak saat 9 ile 07: 00 arasında TPS'de sürekli ve düzgün bir şekilde kıvrımlı bir düşüşe neden olması muhtemel değildir.

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.