Sistem CPU darboğazının nerede olduğu hızlı bir şekilde nasıl analiz edilir? (Bilmediğiniz bilgi noktaları)

Yazar Ni Pengfei (Kıdemli Microsoft Mühendisi, Kubernetes Project Maintainer)

CPU'nun o kadar çok performans göstergesi var ki, çok sayıda CPU performans analiz aracı kullanılıyor ve yerine fiili çalışma senaryoları geliyor.Hangi göstergeler izlenmeli ve hangi performans aracı seçilmelidir?

Endişelenmeyin, bugün sizin için "hızlı ve doğru" bir darboğaz konumlandırma rutinini özetlemek için yılların performans optimizasyonu deneyimini kullanacağım ve size gösterge araçlarını nasıl seçeceğinizi ve farklı senaryolarda performans darboğazlarını nasıl bulacağınızı anlatacağım.

CPU performans indeksi

Önce gözden geçirelim ve CPU'nun performans göstergelerinin neler olduğunu açıklayalım. Bir kağıt bulabilir ve onu hafızadan yazabilir ya da bir önceki makaleyi açıp kendiniz özetleyebilirsiniz.

Her şeyden önce, Düşünmesi en kolay şey CPU kullanımıdır , Bu aynı zamanda gerçek ortamdaki en yaygın performans göstergesidir.

CPU kullanım oranı, toplam CPU süresi içindeki boşta kalma süresinin yüzdesini açıklar.Mpu üzerinde çalışan farklı görevlere göre, kullanıcı CPU'su, sistem CPU'su, I / O CPU'su bekleme, soft interrupt ve hard interrupt olarak ayrılır.

  • Kullanıcı modu CPU kullanım oranı (kullanıcı) ve düşük öncelikli kullanıcı modu CPU kullanım oranı (güzel) dahil olmak üzere kullanıcı CPU kullanım oranı, CPU'nun kullanıcı modunda çalıştığı sürenin yüzdesini temsil eder. Kullanıcı CPU kullanımı yüksektir ve genellikle meşgul uygulamaların olduğunu gösterir.

  • Sistem CPU kullanım oranı, CPU'nun çekirdek modunda çalıştığı sürenin yüzdesini gösterir (kesintiler hariç). Yüksek sistem CPU kullanımı, çekirdeğin meşgul olduğunu gösterir.

  • G / Ç'yi bekleyen CPU kullanımı, genellikle iowait olarak da adlandırılır ve G / Ç için bekleme süresinin yüzdesini temsil eder. Yüksek ilerleme, genellikle sistem ile donanım aygıtı arasındaki G / Ç etkileşim süresinin nispeten uzun olduğu anlamına gelir.

  • Sırasıyla yumuşak kesme ve sert kesme CPU kullanım oranı, çekirdeğin yumuşak kesme işleyicisini ve sert kesme işleyicisini çağırdığı sürenin yüzdesini temsil eder. Yüksek kullanım oranları genellikle sistemde çok sayıda kesinti olduğunu gösterir.

  • Yukarıdakilere ek olarak, sanallaştırılmış bir ortamda kullanılan, sırasıyla diğer sanal makineler ve konuk sanal makineyi çalıştıran CPU tarafından kullanılan CPU süresinin yüzdesini temsil eden çalma CPU kullanımı (çalma) ve konuk CPU kullanımı (konuk) vardır. Zaman yüzdesi.

İkincisi düşünmek daha kolay, Yük Ortalaması olmalı , Sistemdeki ortalama aktif işlem sayısı. Sistemin genel yükünü yansıtır ve esas olarak son 1 dakika, son 5 dakika ve son 15 dakikanın ortalama yükünü ifade eden üç değer içerir.

İdeal olarak, ortalama yük mantıksal CPU sayısına eşittir, bu da her CPU'nun tam olarak kullanıldığı anlamına gelir. Ortalama yük, mantıksal CPU sayısından büyükse, bu, yükün ağır olduğu anlamına gelir.

Üçüncüsü, sütun üzerinde çalışmadan önce muhtemelen pek bir şey fark etmeyeceksiniz, bağlam değiştirme işlemi ,Dahil etmek:

  • Kaynakların elde edilememesinden kaynaklanan gönüllü bağlam değiştirme;

  • Sistem tarafından zorunlu programlamanın neden olduğu istem dışı bağlam değiştirme.

Bağlam değiştirme, Linux'un normal çalışmasını sağlamak için temel bir işlevdir. Bununla birlikte, aşırı bağlam değiştirme, kayıtlar, çekirdek yığını ve sanal bellek gibi verilerin kaydedilmesi ve geri yüklenmesi için orijinal çalışan işlemin CPU süresini tüketecek, işlemin gerçek çalışma süresini kısaltacak ve performans darboğazı haline gelecektir.

Yukarıdakilere ek olarak, Ayrıca CPU önbelleğinin isabet oranı olan bir gösterge var . CPU'nun gelişimi, belleğin geliştirilmesinden çok daha hızlı olduğu için, CPU'nun işlem hızı belleğin erişim hızından çok daha hızlıdır. Bu şekilde CPU belleğe eriştiğinde kaçınılmaz olarak belleğin yanıtını bekleyecektir. İkisi arasındaki büyük performans açığını uzlaştırmak için, CPU önbelleği (genellikle çok seviyeli bir önbellek) ortaya çıktı.

Yukarıdaki resimde gösterildiği gibi, CPU önbelleğinin hızı CPU ile bellek arasındadır ve önbelleğe alınan bellek verileri sıcaktır. Büyüyen hotspot verilerine göre bu önbellekler, boyutlarına göre L1, L2, L3 ve diğer üç seviyeli önbelleklere ayrılır.Bunlardan L1 ve L2 yaygın olarak tek çekirdekte, L3 ise çok çekirdekte kullanılır.

L1'den L3'e, üç seviyeli önbelleğin boyutu sırayla artar ve buna göre performans sıralı olarak azalır (elbette bellekten çok daha iyidir). Ve isabet oranı CPU önbelleğinin yeniden kullanımını ölçer. İsabet oranı ne kadar yüksekse, performans o kadar iyi olur.

Bu göstergeler çok kullanışlıdır ve onlara hakim olmamızı gerektirir, bu yüzden onları sınıflandırmanıza ve hatırlamanıza yardımcı olmak için onları bir resim halinde özetledim.

Performans araçları

CPU'nun performans göstergelerine hakim olduktan sonra, bu göstergeleri, yani araçların kullanımını nasıl elde edeceğimizi de bilmemiz gerekir.

Önceki durumlarda hangi araçların kullanıldığını hatırlıyor musunuz? Burada ayrıca CPU performans araçlarını birlikte inceliyoruz.

İlk olarak, ortalama yük durumu. İlk olarak sistemin ortalama yükünü kontrol etmek için çalışma süresini kullandık; ortalama yük arttıktan sonra sırasıyla her CPU'nun ve her işlemin CPU kullanımını gözlemlemek için mpstat ve pidstat kullandık ve ardından ortalama yükteki artışı bulduk. Süreç bizim stres testi aracımızdır.

İkincisi, bağlam değiştirme durumudur. Önce vmstat'i sistemdeki bağlam anahtarlama ve kesintilerinin sayısını görüntülemek için kullandık; sonra pidstat aracılığıyla sürecin istemli ve istemsiz bağlam anahtarlarını gözlemledik ve son olarak pidstat aracılığıyla iş parçacığının bağlam değiştirmesini gözlemledik ve bağlamı bulduk Artan sayıda geçişin temel nedeni, karşılaştırma aracı sysbench'imizdir.

Üçüncü durum, işlem CPU kullanımındaki artıştır. Önce sistemin ve işlemlerin CPU kullanımını kontrol etmek için top'u kullandık ve CPU kullanımının arttığı sürecin php-fpm olduğunu gördük; sonra php-fpm çağrı zincirini gözlemlemek için perf top kullandık ve sonunda CPU artışının temel nedenini bulduk. Yani, kütüphane işlevi sqrt ().

Dördüncü durum, sistemin CPU kullanımındaki artıştır. Önce sistem CPU'sunun top ile arttığını gözlemledik, ancak top ve pidstat sayesinde CPU kullanımı yüksek olan süreci bulamadık. Bu yüzden, top'un çıktısını yeniden inceledik ve düşük CPU kullanımı olan ancak Çalışıyor durumdaki süreçlerle başladık ve şüpheli noktalar bulduk.Son olarak, performans kaydı ve performans raporu aracılığıyla, işleri kandıran kısa vadeli bir süreç olduğunu gördük.

Ek olarak, kısa vadeli işlemler için, süreç tarafından çağrılan harici komutları gerçek zamanlı olarak izleyebilen özel bir execsnoop aracı da ekledim.

Beşincisi, kesintisiz süreçler ve zombi süreçleri durumudur. Önce top kullanarak yükselen iowait problemini gözlemledik ve çok sayıda kesintisiz süreçler ve zombi süreçler bulduk; sonra bunun disk okumalarından kaynaklandığını bulmak için dstat'ı kullandık ve daha sonra ilgili işlemleri bulmak için pidstat kullandık. Ancak süreç sistem çağrısını görüntülemek için strace kullandık, ancak başarısız olduk.Son olarak, işlem çağrı zincirini analiz etmek için perf'i kullandık ve temel nedenin doğrudan disk G / Ç olduğunu gördük.

Sonuncusu, yumuşak kesinti durumudur. Baştan sona sistemin soft interrupt CPU kullanımının arttığını gözlemledik; sonra / proc / softirqs'i kontrol ettik ve daha hızlı bir değişim oranına sahip birkaç yumuşak kesinti bulduk; sonra sar komutuyla bunun bir ağ paketi sorunu olduğunu bulduk ve sonunda onu kullandık tcpdump, ağ çerçevesinin türünü ve kaynağını bulur, bunun bir SYN FLOOD saldırısından kaynaklandığı belirlenir.

Bu noktada, sanırım zaten başınız dönüyor.Sadece birkaç durumda, bir düzineden fazla CPU performans aracı kullandık ve her araç için uygulanabilir senaryolar farklı! Bu kadar çok aracı nasıl ayırt edersiniz? Gerçek performans analizinde nasıl seçilir?

Benim deneyimim, onları iki farklı boyuttan anlamak, canlı bir şekilde öğrenmek ve uygulamaktır.

Öğrenin ve kullanın, performans göstergelerini performans araçlarıyla ilişkilendirin

İlk boyut, CPU'nun performans göstergelerinden başlar. Başka bir deyişle, belirli bir performans indeksini görüntülemek istediğinizde, bunu hangi araçların yapabileceğini bilmeniz gerekir.

Farklı performans göstergelerine göre, gösterge sağlayan performans araçlarını sınıflandırın ve anlayın. Bu şekilde, performans sorunlarını gerçekten giderirken, hangi araçların istediğiniz ölçümleri sağlayabileceğini, tek tek herhangi bir temele dayanmadan denemek ve şansınızı yakalamak yerine, açıkça bilebilirsiniz.

Aslında, önceki durumda bu fikri birçok kez kullandım. Örneğin, yumuşak kesme CPU kullanım oranının yüksek olduğunu bulmak için top'u kullandıktan sonra, bir sonraki adım doğal olarak belirli bir yumuşak kesme türünü bilmek isteyecektir. Çeşitli yumuşak kesintilerin işleyişini nerede görebilirim? Tabii ki proc dosya sistemindeki / proc / softirqs dosyasıdır.

Daha sonra, örneğin, bulduğumuz yumuşak kesintinin türü ağ alımı ise, ağ alımı hakkında düşünmeye devam etmeliyiz. Sistemin ağ alımı nedir? Ağ alımını hangi araçlar kontrol edebilir? Bizim durumumuzda bu dstat.

Tüm araçları ezberlemeniz gerekmese de, her göstergeye karşılık gelen araçların özelliklerini anlayabiliyorsanız, onları daha verimli ve esnek bir şekilde kullanmalısınız. Burada, ilişkileri çözmenizi ve anlamanızı ve hatırlamanızı kolaylaştırmak için CPU performans göstergeleri sağlayan bir araç tablosu yaptım. Elbette, bunu "gösterge araçları" için bir kılavuz olarak da kullanabilirsiniz.

Şimdi ikinci boyuta bakalım.

İkinci boyut araçlarla başlar. Yani, bir araç kurduğunuzda, aracın hangi göstergeleri sağlayabileceğini bilmeniz gerekir. . Bu aynı zamanda gerçek ortamda, özellikle üretim ortamında çok önemlidir, çünkü çoğu durumda, yeni araç takımları kurma yetkiniz yoktur, sistemdeki kurulu araçlardan yalnızca en iyi şekilde yararlanabilirsiniz, bu da onları işlemenizi gerektirir. Yeterli anlayışa sahip olun.

Her aracın kullanımına özel, genellikle çok sayıda yapılandırma seçeneğini destekler. Ancak endişelenmeyin, bu yapılandırma seçeneklerinin ezberlenmesine gerek yoktur. Yalnızca hangi araçların mevcut olduğunu ve bu araçların temel işlevlerinin neler olduğunu bilmeniz gerekir. Onları gerçekten kullanmak istediğinizde, kılavuzlarını kontrol etmek için man komutunu kullanabilirsiniz.

Benzer şekilde, bu yaygın olarak kullanılan araçları da sizin ayırt etmeniz ve anlamanız için bir tablo halinde derledim Doğal olarak, bunu bir "araç göstergesi" kılavuzu olarak da kullanabilirsiniz, sadece gerektiğinde tabloyu kontrol edin.

CPU'nun performans darboğazını hızlı bir şekilde analiz etme

Bu noktada, CPU'nun performans göstergelerine zaten aşina olduğunuza ve her bir performans göstergesini elde etmek için hangi araçların kullanılabileceğini de bildiğinize inanıyorum.

Bu, bir CPU performans sorunuyla her karşılaştığınızda, yukarıdaki tüm araçları çalıştırmanız ve ardından tüm CPU performans göstergelerini analiz etmeniz gerektiği anlamına mı geliyor?

Muhtemelen bu basit arama yönteminin bir aptal aramak gibi olduğunu düşünüyorsunuz. Ancak şaka yapmayın, çünkü ilk başta ben yaptım. Tabi ki tüm göstergeleri bulup tekdüze analiz etmek mümkün olduğu gibi sistemde potansiyel darboğazlar da bulmak mümkündür.

Ancak bu yöntemin etkinliği gerçekten çok düşük! Büyük bir indeks sisteminin önünde zaman alıcı ve yoğun emek gerektirir, yanlışlıkla belirli bir ayrıntıyı gözden kaçırabilir ve boşa giden bir çabaya yol açabilirsiniz. Birçok kez acı çektim.

Bu nedenle, gerçek üretim ortamında, genellikle sistemin darboğazını olabildiğince çabuk bulmayı ve ardından performansı olabildiğince çabuk optimize etmeyi, yani performans sorununu hızlı ve doğru bir şekilde çözmeyi umuyoruz.

Sistem darboğazlarını hızlı ve doğru bir şekilde bulmanın bir yolu var mı? Cevap Evet.

Pek çok CPU performans göstergesi olmasına rağmen, hepsi sistemin CPU performansını tanımladığından, tamamen izole olmayacaklarını bilmelisiniz.Birçok göstergenin belirli korelasyonları vardır. Performans göstergelerinin alaka düzeyini anlamak için her bir performans göstergesinin çalışma prensibini anlamalısınız. . Bu yüzden her bir performans indeksini tanıttığımda, ilgili sistem ilkelerini karıştırmalı ve açıklamalıyım.Umarım bunu hatırlarsınız.

Örneğin, kullanıcı CPU kullanımı yüksek, çekirdek modu yerine işlemin kullanıcı modunu kontrol etmeliyiz. Kullanıcı CPU kullanımı, kullanıcı modundaki CPU kullanımını yansıttığından ve çekirdek modundaki CPU kullanımı yalnızca sistem CPU kullanımını yansıtır.

Gördüğünüz gibi, bu temel anlayışla araştırmanın kapsamını daraltabilir ve zamandan ve emekten tasarruf edebiliriz.

ve bu yüzden, İnceleme kapsamını daraltmak için genellikle ilk önce top, vmstat ve pidstat gibi daha fazla göstergeyi destekleyen birkaç araç çalıştırırım. . Neden bu üç araç? Aşağıdaki resme daha yakından bakın, net olacaksınız.

Bu resimde, top, vmstat ve pidstat tarafından sağlanan önemli CPU göstergelerini listeledim ve performans analizinin bir sonraki yönüne karşılık gelen ilişkiyi belirtmek için noktalı çizgiyi kullandım.

Bu resimden, bu üç komutun neredeyse tüm önemli CPU performans göstergelerini içerdiğini görebilirsiniz, örneğin:

  • Yukarı çıktısından CPU kullanımı, zombi süreçleri ve ortalama yük gibi çeşitli bilgiler alabilirsiniz.

  • Vmstat çıktısından bağlam anahtarlarının sayısını, kesintilerin sayısını, çalışma durumunu ve kesintisiz durumdaki işlemlerin sayısını alabilirsiniz.

  • Pidstat çıktısından, kullanıcının CPU kullanım oranını, sistem CPU kullanım oranını ve sürecin gönüllü ve istem dışı bağlam anahtarlamasını elde edebilirsiniz.

Ek olarak, bu üç araçtan çıkan göstergelerin çoğu birbiriyle ilişkilidir, bu nedenle ilişkilerini belirtmek için kesikli çizgiler de kullanıyorum Birkaç örnek vererek daha kolay anlaşılabilir.

İlk örnekte, pidstat tarafından işlem çıktısının kullanıcı CPU kullanımındaki artış, kullanıcı CPU kullanım çıktısının en üst düzeyde artmasına neden olacaktır. Bu nedenle, kullanıcının CPU kullanım çıktısında topa göre bir sorun olduğunu bulduğunuzda, bunu belirli bir işlemden kaynaklanıp kaynaklanmadığını görmek için pidstat çıktısıyla karşılaştırabilirsiniz.

Performans sorununa neden olan süreci bulduktan sonra, sistem çağrılarını analiz etmek için strace kullanmak ve çağrı zincirindeki tüm seviyelerde işlevlerin yürütülmesini analiz etmek için performans gibi sürecin davranışını analiz etmek için süreç analizi araçlarını kullanmak gerekir.

İkinci örnekte, en üstteki ortalama yük çıktısı artar.Yük artışına hangi işlemin neden olduğunu gözlemlemek için, bunu çalışma durumundaki işlem sayısı ve vmstat'ın kesintisiz durum çıktısı ile karşılaştırabilirsiniz.

  • Kesintisiz işlemlerin sayısı artarsa, G / Ç durumunu daha ayrıntılı analiz etmek için dstat veya sar gibi araçlar kullanmak için G / Ç analizi gerekir.

  • Çalışan işlemlerin sayısı arttıysa, hangi işlemlerin çalışır durumda olduğunu bulmak için başa dönüp pidstat yapmanız ve ardından daha fazla analiz için işlem analizi aracını kullanmanız gerekir.

Son örnekte, üstten yumuşak kesme çıktısının CPU kullanımının arttığı tespit edildiğinde, soruna hangi yumuşak kesmenin neden olduğunu belirlemek için / proc / softirqs dosyasındaki çeşitli yumuşak kesme türlerinin değişikliklerini kontrol edebilirsiniz. Örneğin, sorunun ağ alımının kesintiye uğramasından kaynaklandığını fark ederseniz, bunu ağ analiz araçları sar ve tcpdump ile analiz etmeye devam edebilirsiniz.

Bu şekilde yalnızca temel performans araçlarını listelediğime dikkat edin, hepsini değil. Bunu yapmak, bir yandan sizi geniş bir araç listesiyle korkutmak istemez. Öğrenmenin başlangıcında tüm temel veya niş araçlara erişimin olması illa ki iyi bir şey değildir. Öte yandan, umarım önce temel araçlara odaklanabilirsiniz Sonuçta, sorunların çoğunda ustalaşırsanız çoğu sorunu çözebilirsiniz.

Bu nedenle, bu resmi CPU performans analizi için fikirlerin bir grafiği olarak kaydedebilirsiniz. Temel araçlardan başlayarak, sunduğum vakalar aracılığıyla bunları gerçek bir ortamda uyguladım ve aldım.

Bir programcı olarak performans optimizasyonu kaçınılmaz bir şeydir.Aynı zamanda bir yazılım sistemindeki en zorlu görevlerden biridir.Ayrıca her mühendisin ustalaşması gereken temel bir beceridir. Sütunun en büyük özelliği: Yazar, yılların pratik deneyimini birleştirir ve Linux performansının temel göstergelerini ve araçlarını açıklamak için vakaya dayalı fikirleri kullanır ve ayrıca öğrendikten hemen sonra kendi optimizasyon çalışmanıza uygulanabilecek ilgili gözlem, analiz ve ayarlama yöntemlerini kullanır. içinde.

TensorFlow ile mi oynuyorsunuz? Bu 30 işlevi bilmeniz gerekir
önceki
Suwon Kiko gibi süper modeller yardım etmek için burada! Alexander Wang 2018 ilkbahar ve yaz serisine ilk bakış!
Sonraki
3'ten 0'a, c9 Afreeca'yı süpürdü! Kuzey Amerika yarı finale girdi
Sabah Okuma | Etiyopya, 11'inci ulusal yas günü ilan etti | Otelin resmi hesabı kadınlara hakaret ediyor Huazhu Group özür diliyor
Samsung, Apple'ı yine alay etti: sadece patlama değil, aynı zamanda frekans azaltma
BAT, akıllı şehirlerin inşasını hızlandırır ve dijital dönüşümü teşvik etmek için bilgi paylaşımını sağlar Smart City Weekly
Dake Youyangın klasik animasyonu "Akira" canlı çekimde yapılacak! Yönetmen tarafından yönetilen "Thor 3"
60'tan fazla uzun bacak Magic City'ye inmek üzere
Beş saatten fazla bir süre sonra IG, KT'yi LCK'nın kapısında yendi!
Kılıç dünyanın birinci sınıfını ifade eder! West Lake Üniversitesi resmi olarak onaylandı!
Linux'ta find komutunun kullanımı özetlenmiştir, okuduktan sonra hiçbir işe yaramaz olmayacak!
2019 Oscar ödüllü `` Serbest Kaya Tırmanışı '' filmi, Pekin Film Festivali'nde görücüye çıktı.
Satın al, satın al, satın al N NIGO, Toru Nishiyama ve Takahashi Dun'u orijinal fiyattan alabilir misin?
LOL ve King of Glory arasında en yüksek benzerliğe sahip beş kahraman, netizenler: sonuncusu aynı ada sahip
To Top