Bloga dön
·11 dk okuma·productdevbook

Mac'te Geliştiriciler ve Sistem Yöneticileri İçin Bant Genişliği İzleme

macOS'ta geliştiriciler ve sistem yöneticileri için pratik bir bant genişliği izleme kurulumu: süreç başına görünürlük, betik kancaları ve hata ayıklama taktikleri.

  • Developer tools
  • macOS
  • Network monitoring
  • Sysadmin

90 saniye sürmesi gereken bir test paketi 14 dakika sürüyor ve CI zaman aşımına uğruyor. Yerel çalıştırma da yavaş. Bir profilci ekliyorsunuz — CPU iyi. Bellek iyi. Sonra üç ay önce birinin kurulum kancasına gerçek bir API çağrısı eklediği için test fixture'unun çalıştırma başına birkaç yüz giden HTTPS isteği yaptığını fark ediyorsunuz ve şimdi her PR yeni hız sınırlanmış sandbox'lı bir uç noktayı dövüyor. Bant genişliği izleme bunu birinci günde yakalardı.

Mac'te geliştiriciler ve sistem yöneticileri için ağ gözlemlenebilirlik, bileşik olan becerilerden biridir. Hangi aracın hangi soruyu yanıtladığını bildikten sonra, aslında bariz bir şey yapan rogue bir süreç olan sorunlar üzerinde saatler harcamayı bırakırsınız. Bu yazı çalışan yığındır: ne zaman tcpdump'a uzanacağınız, ne zaman Wireshark'a, ne zaman nettop'a, ne zaman ova gibi uygulama başına bir izleyiciye ve onları nasıl birleştireceğiniz. bandwidth monitor developers mac arıyorsanız, buradaki amaç pazarlama turu değil, pratik karar ağacıdır.

Kısaca dört seviye

Teşhis araçları dört soyutlama seviyesini kapsar:

  1. Paket baytlarıtcpdump. Hat üzerindeki her bayt, artı başlıklar. En düşük seviye. Yakalayıp sonra analiz etmek için iyidir.
  2. Paket inceleme — Wireshark. tcpdump'ın verisi, okunabilir protokol katmanlarına çözülmüş. Bir bağlantının ne yaptığını anlamak için harika.
  3. Canlı süreç başınanettop. macOS'a yerel, süreç başına mevcut bağlantıları ve oranları gösterir.
  4. Zaman içinde uygulama başına toplam — ova. Menü çubuğu uygulaması, kaydırılabilir geçmiş, yardımcı süreç katlama.

Bunları iyi kullanmanın püf noktası, seviyeyi soruyla eşleştirmektir. "Test paketimiz geçen hafta ne kadar bant genişliği kullandı" diye soruyorsanız, tcpdump yanlış cevaptır; ova veya benzer bir uygulama başına geçmiş aracı doğru olandır. "Bu belirli HTTPS bağlantısı neden yavaş" diye soruyorsanız, nettop size söylemez — Wireshark'a ihtiyacınız var.

tcpdump: hat üzerindeki baytlar görünümü

tcpdump her Mac'te vardır. Şu durumlarda doğru araçtır:

  • Belirli bir protokol sorununu (TLS el sıkışma hatları, yeniden iletimler, parçalanma) şüpheleniyorsunuz.
  • Daha sonra analiz için trafiği yakalamanız gerekiyor.
  • GUI araçlarının mevcut olmadığı bir sunucu sınıfı makinede çalışıyorsunuz.

Yararlı bir varsayılan yakalama:

sudo tcpdump -i en0 -n -s 0 -w capture.pcap
  • -i en0 — Wi-Fi arayüzünde yakala (ikisi de olan Mac'lerde ethernet için en1 kullanın veya ifconfig'i kontrol edin).
  • -n — ana bilgisayar adlarını çözme (çok daha hızlı).
  • -s 0 — sadece başlıkları değil, tüm paketi yakala.
  • -w capture.pcap — Wireshark tarafından okunabilir bir pcap dosyasına yaz.

Filtrelemek için:

sudo tcpdump -i en0 -n 'host api.example.com and port 443'
sudo tcpdump -i en0 -n 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'

İlki yalnızca HTTPS üzerinden belirli bir ana bilgisayara olan trafiği yakalar. İkincisi yalnızca TCP bağlantı kurulum/yıkımını yakalar — yük baytlarına boğulmadan bağlantıları saymak için faydalıdır.

Wireshark: protokol çözme

Wireshark pcap dosyalarını okur ve onları okunabilir bir hiyerarşiye çözer: Ethernet çerçevesi, IP paketi, TCP segmenti, TLS kaydı, HTTP isteği. Ücretsiz, yerel, bulut bileşeni yok. Homebrew aracılığıyla yükleyin:

brew install --cask wireshark

Görüntüleme filtresi dili sihirdir. Birkaç yüksek etkili filtre:

  • http.response.code >= 400 — başarısız HTTP yanıtlarını göster.
  • tcp.analysis.retransmission — TCP yeniden iletimlerini göster, genellikle ağ tıkanıklığı veya eş sorunlarının işareti.
  • tls.handshake.type == 1 — TLS Client Hellos'ları göster (bağlantı başına bir tane).
  • dns and dns.qry.name contains "example.com" — belirli bir alan adı için DNS sorgularını göster.

Wireshark "Slack bugün ne kadar bant genişliği kullandı" için aşırı tepkilidir, ancak "diğerleri başarılı olduğunda bu belirli bağlantı neden 30 saniyede zaman aşımına uğruyor" için tam olarak doğrudur. Bir istemci makinesinden yakalanmış bir pcap'iniz olduğunda ve olaydan sonra araştırmanız gerektiğinde de doğru araçtır.

nettop: canlı süreç başına görünüm

nettop macOS ile birlikte gelir. Uygulama başına canlı bir izleyiciye en yakın yerleşik eşdeğerdir:

sudo nettop -P -m route

Yararlı bayraklar:

  • -P — sürece göre grupla.
  • -m route — yol bilgisini göster (hangi arayüz).
  • -x — bayt sayılarını göster (sadece oranlar değil).
  • -c <interval> — periyodik yenileme, örneğin -c 2.
  • -J bytes_in,bytes_out,interface — göstermek için belirli sütunlar seçin.

nettop yalnızca metindir, kendi ekranını yeniler ve SSH üzerinde çalışır. Uzak bir Mac'te (bir CI çalıştırıcısı, sınıflandırma için SSH yaptığınız bir meslektaşın makinesi) hızlı bir "şu anda tuhaf bir şey var mı" cevabına ihtiyacınız olduğunda doğru araçtır.

Olumsuz yönü: nettop'ın geçmişi yoktur. Çıktığınız anda, veriler gider.

ova: yardımcı katlamalı uygulama başına geçmiş

ova menü çubuğunda oturur ve nettop'ın yapmadığını sağlar: kalıcı geçmiş, kaydırılabilir zaman çizelgeleri ve yardımcı süreç katlama. Kabaca 1 Hz'de örnekleme yapar, veriler yerel olarak yazılır ve siz silene kadar kalır.

ova'nın yerleşik araçların yapmadığı iki şey:

  1. Yardımcı süreç katlama. Chrome sekme başına bir yardımcı PID oluşturur; Slack'in kendi yardımcı mimarisi vardır; Discord, Telegram, Electron uygulamaları genel olarak bunu yapar. nettop bunları ayrı satırlar olarak gösterir ("Slack Helper (Plugin)", "Slack Helper (GPU)" vb.) ki bu teknik olarak doğru ama okunamaz. ova bunları "Slack" altında katlar, böylece satır gerçekte ne demek istediğinizdir.
  2. Kaydırılabilir geçmiş. "Geçen Salı 15:00'te ne oldu" zaman çizelgesinde tıklayıp sürükleyerek yanıtlanabilir. nettop'ın cevabı "hiçbir fikrim yok, çalışmıyordum"dur.
Yardımcı süreç katlama
ova her yardımcı PID'i üst uygulamasının altında gruplar, böylece yedi yardımcı satır yerine "Slack" okuyorsunuz.

Bir geliştiricinin günlük hayatı için — "build kayıt defterini dövüyor mu," "hangi test 4 GB çekti," "her saatin başındaki o tekrarlayan artış nedir" — ova hızlıca tören olmadan yanıtlar. nettop, "şu anda, kurulum olmadan" gerektiğinde yedeklemenizdir.

Somut örnekler

Bir API dövüşünü hata ayıklama

Bir takım staging API'sinin yavaş olduğundan şikayet ediyor. Bir istemcinin yeniden deneme döngüsünde olduğundan şüpheleniyorsunuz. Suçlu geliştiricinin Mac'inin menü çubuğunda ova ile, yavaşlık zamanına kaydırırsınız ve takımın CLI aracının 15 dakika boyunca 80 MB/sn'ye sıçradığını görürsünüz. Bu ipucudur. 30 saniyelik bir yakalamada Wireshark'ı açın ve doğrulayın: her istek bir 503 alıyor ve istemci 100 ms geri çekilmeyle yeniden deniyor. Hata yeniden deneme politikasında — sürekli değil, üstel — ve şimdi tam olarak neyi düzelteceğinizi biliyorsunuz.

Kontrolden çıkmış bir test sürecini bulma

CI iyi ama yerel test çalıştırmaları yavaş. ova'yı açın, paketi çalıştırın, artışı kaydırın. 30 saniyelik bir pencerede 200 MB çeken node görüyorsunuz. Şüpheli bağlantı noktasına filtrelenmiş tcpdump, test fixture'unun kaydedilmiş fixture'ları kullanmak yerine her testte gerçek bir CDN'den canlı veri çektiğini gösterir. Yerel bir fixture ile değiştirin, paket 90 saniyeye düşer.

Bir satıcı kütüphanesinden sürpriz giden

Bir uyumluluk incelemesi kod tabanının herhangi bir yerde eve telefon edip etmediğini sorar. Statik analiz kısmidir; tek kesin cevap "temsili kullanım sırasında ağı izle"dir. ova ile bir saat boyunca uygulamayı çalıştırın; doğrulama için aynı saati tcpdump ile yakalayın. nettop'ın ana bilgisayar adı sütununda görülen hedefleri çapraz kontrol edin. Beklenmeyen her şey araştırılır. Bu tür denetim, uygulama başına geçmiş olmadan zordur.

Bir sistem yöneticisinin filosunda kontrolden çıkmış bir senkronizasyon ajanı

Dahili Slack mesajı: "Mac'im yavaş hissediyor." SSH yaparsınız, sudo nettop -P -m route çalıştırırsınız. Herkesin yüklendiğini unuttuğu bir yedekleme ajanı tam bir yeniden indeksleme yapıyor, sürekli 30 MB/sn çekiyor. Daemon'u öldürün, programı düzeltmek için bir bilet açın. Beş dakikalık düzeltme, doğru araç olmadan bir saat olurdu.

ova'yı eylemde görün

Bir bakışta görülebilir bir menü çubuğu bant genişliği izleyicisi — yerel, imzalanmış, ~3 MB.

Download for macOS

Komut dosyalanabilir kancalar

Otomasyon için:

JSON-vari çıktıda nettop

nettop -P -L 1 -k state,interface_name,rx_dupe,rx_ooo,re-tx,rtt_avg,rcvsize,tx_win,tc_class,tc_mgt,cc_algo,P,C,R,W -J bytes_in,bytes_out

Bu, bir komut dosyasına yakalayabileceğiniz tek bir örnek üretir (-L 1 bayrağı). Biraz şekillendirmeden sonra awk veya jq'a yönlendirin.

Bant genişliği eşikleri

Hızlı bir "herhangi bir süreç X'i aşarsa uyar" komut dosyası nettop etrafında inşa edilebilir:

sudo nettop -P -L 1 -J bytes_in,bytes_out -k state,interface_name,P,C,R,W \
  | awk 'NR>1 && ($2+$3) > 1000000 {print}'

(Kaba ama işlevsel.) Üretim kalitesinde bir sürüm için, ana bilgisayara göre trafik için iftop'a veya arayüz seviyesi için bmon'a bakın.

Bekçi köpeği olarak tcpdump

sudo tcpdump -i en0 -n 'host suspicious.example.com' -w "/tmp/capture-$(date +%Y%m%d-%H%M).pcap" -G 3600 -W 24

1 saatlik bir yakalama dosyasını döndürür, 24 tane saklar. "Bunun ne zaman olduğunu bilmiyorum ama bir dahaki sefere yakalamak istiyorum" için faydalıdır.

ova dışa aktarmaları

ova geçmişini yerel olarak yazar. Bunu bir panele veya rapora beslemeniz gerekiyorsa, dışa aktarma yolu doğru başlangıç ​​noktasıdır — veri sizin ve ortada bir satıcı senkronizasyon katmanı yok.

Geliştirici Mac iş akışlarının gerçekten ihtiyaç duyduğu doğru bant genişliği izleyicisini seçme

Kısa bir matris:

SoruDoğru araç
Şu anda ağımı ne kullanıyor?nettop, ova
Dün 15:00'te ağımı ne kullandı?ova
Bu belirli TCP bağlantısı neden yavaş?Wireshark
TLS el sıkışma hataları var mı?Wireshark
Geçen haftaki genel bayt toplamı nedir?ova
Süreç X, ana bilgisayar Y ile konuşuyor mu?nettop, tcpdump
Sonraki adli inceleme için yakalama mı?tcpdump → pcap
SSH üzerinden tek seferlik uzak teşhis mi?nettop

Desen şu: "ne" ve "ne zaman" için nettop ve ova, protokol seviyesinde "neden" için tcpdump ve Wireshark. Geliştiriciye yönelik soruların çoğu Wireshark'ı hiç açmadan yanıtlanır — bu, gerçekten kafa karıştırıcı protokol sorunları için ayrılmış daha düşük frekanslı bir araçtır.

Sistem yöneticisine özel desenler

Bir Mac filosunu (küçük takım, tasarım stüdyosu, video dükkanı) bakım yapıyorsanız, desenler farklıdır:

  • Önce keşif. Çalışanı görmek için her makinede SSH veya uzak yönetim aracılığıyla sudo nettop -P -m route çalıştırın. Tanımadığınız süreçleri arayın — istenmeyen tarayıcı uzantılarının, paketlenmiş reklam yazılımının veya unutulmuş beta yazılımının açıklayıcı işaretleri.
  • Güç kullanıcılarında geçmiş. Takımdaki ağır ağ kullanıcıları için (günlük dosyaları yükleyen video editörleri, büyük artefaktları iten geliştiriciler), uygulama başına bir geçmiş aracı, tam olduklarında olduklarında olmadan tekrarlayan sorunları yakalar.
  • Belgelenmiş taban çizgisi. "İyi" bir Mac ve "şikayetçi" bir Mac için nettop çıktısını yakalayın. Fark genellikle aşikardır.

Sırada ne yapmalı

Bir bandwidth monitor developers mac yığınında sıfırdan başlıyorsanız, her zaman açık geçmiş görünümü için ova'yı yükleyin, yukarıdaki üç nettop büyüsünü öğrenin ve ihtiyacınız olduğunda Wireshark'ı yer iminize ekleyin. Çalışan set budur. Bir geliştiricinin veya sistem yöneticisinin gününde sorunların çoğu uygulama başına veya süreç başına seviyede çözülür; paket seviyesi araçları, günlük değil aylık ortaya çıkan daha zor durumlar için oradadır.

Bir API'yi döven test paketi, kontrolden çıkmış senkronizasyon ajanı, derleme başına gizlice 8 GB indiren CI çalıştırıcısı — hepsi doğru aracı açtığınız anda görünür. Maliyet birkaç dakikalık kurulumdur. Geri dönüş, bir sonraki bir şey "sebepsiz yere yavaş" olduğunda ve cevap iki saatlik profilci avı yerine menü çubuğundadır.