Bloga dön
·10 dk okuma·productdevbook

macOS'ta nettop Nasıl Çalışır (Ve Neden Bir Arayüz İstersiniz)

macOS'ta nettop için samimi bir tur: ne gösterir, ne göstermez ve grafiksel bir bant genişliği izleyicisinin devreye girdiği yer neresidir.

  • Developer tools
  • macOS
  • Network monitoring
  • Tutorial

Terminal'i açın ve nettop yazın. Bir saniye içinde Mac'inizde ağ I/O yapan her sürecin canlı, top tarzı bir görüntüsüne sahipsiniz — gelen baytlar, giden baytlar, aldıkları yollar, kullandıkları protokoller. Sahip olduğunuzu bilmediğiniz bir araçtır ve onu bulduktan sonra Activity Monitor'un Network sekmesini neden açtığınızı merak edersiniz. Bu, nettop macos turu, gerçekten önemli bayraklar ve nettop'un yolun sonuna ulaştığı yerlerdir.

Spoiler: nettop tek seferlik bir bakış için harikadır. "Slack dün 15:00'te ne yapıyordu?" için harika değildir. Aynı çekirdek sayaçlarının üzerinde bir UI'ın doldurduğu boşluk budur.

nettop macos gerçekte nedir

nettop macOS ile birlikte gelir, /usr/bin/nettop'ta yaşar ve en az 10.7'den beri oradadır. Activity Monitor ve Instruments'ın kullandığı aynı çekirdek API'lerinin üzerinde küçük bir komut satırı ön ucudur — öncelikle proc_pidinfo'nun soket ve istatistik varyantlarıyla, artı yol başına sayaçlar. Çoğu kullanım için root gerektirmez. Paket yakalamaz. Yükleyiciye ihtiyaç duymaz.

Bayrak olmadan çalıştırın:

nettop

Şuna benzer bir şey göreceksiniz:

Processes
  Google Chrome.40621      tcp4         34.117.x.x.443        Established
  Google Chrome.40621      tcp4         142.250.x.x.443       Established
  Slack Helper.41218       tcp4         52.5.x.x.443          Established
  ...

Çıkmak için q, yardım için ?, oranlar vs toplamlar arasında geçiş yapmak için r, delta moduna geçmek için d tuşuna basın.

Bilinmeye değer bayraklar

Çok sayıda nettop bayrağı var. Çoğu gürültü. Gerçekten kullandıklarım bunlar.

Mod için -m

-m route yol başına trafiği gösterir — yerel ağ üzerinden mi, VPN tüneli üzerinden mi yoksa varsayılan yol üzerinden mi gittiğinizi görmek için faydalıdır.

-m tcp ve -m udp tek bir protokole filtreler.

-m process varsayılandır ve çoğu zaman istediğinizdir.

Süreç seçici için -P

-P, nettop'u canlı yenileme yerine bir kez çalıştırır ve statik bir anlık görüntü boşaltır. Komut dosyasıyla kullanırken veya başka bir araca yönlendirirken istediğiniz budur.

nettop -P -L 1

Bu, nettop'u bir örnek için etkileşimli olmayan modda çalıştırır ve çıkar. Temiz günlük çıktısı için sütunları sınırlamak için -J ile birleştirin (aşağıda daha fazlası).

Günlük modu için -L

-L <count>, nettop'u verilen örnek sayısı için günlük modunda çalıştırır ve çıkar. -L 0 sonsuza kadar çalıştırır, her aralıkta bir örnek satırı boşaltır. Varsayılan aralık 1 saniyedir; -s ile değiştirin.

nettop -L 60 -s 1 -P -J bytes_in,bytes_out,interface,state

Bu, sadece önemsediğiniz sütunlarla 60 saniye boyunca saniyede bir örnek yakalar ve çıkar. Daha sonra analiz için bir dosyaya yönlendirin.

Sütun seçimi için -J

-J virgülle ayrılmış bir sütun adı listesi alır. Yararlı sütunlar:

  • bytes_in, bytes_out — sürecin başlangıcından bu yana toplamlar
  • rx_dupe, rx_ooo — TCP yeniden iletimleri ve sıra dışı paketler
  • re-tx — yeniden iletimler
  • rtt_avg — gidiş-dönüş süresi, yavaş ağları tespit etmek için faydalı
  • rcvsize, tx_win — soket tampon durumu
  • interface — hangi arayüz (en0, utun0, lo0)
  • state — bağlantı durumu (Established, TimeWait, Listen)

Tam liste man nettop'tadır. Yaklaşık 30 sütun var; çoğu zaman bytes_in,bytes_out,interface,state yeterlidir.

XML için -x

-x plist XML formatında çıktı verir — ayrıştırılabilir, okuması acı verici, ancak nettop'u başka bir komut dosyasına beslemek istiyorsanız faydalı. Pratikte -J ve -L aracılığıyla JSON şeklindeki sütun çıktısı genellikle çalışmak için daha kolaydır.

Gizlemek için -k

-k <column> umursamadığınız bir sütunu gizler. -J'nin tersi. Canlı görüntüyü tutmak ancak gürültüyü kırpmak istediğinizde etkileşimli kullanın.

Çıktıyı okuma

nettop macos'un raporladığı sayılar hakkında bilinmesi gereken birkaç şey:

Toplamlar nettop'u başlattığınızdan değil, sürecin başlangıcından beridir. cloudd gibi uzun ömürlü bir süreç sessiz bir sistemde bile yüzlerce MB gösterebilir. Gerçek oranları görmek için delta modunu kullanın (etkileşimli olarak d veya -L günlük çıktısından deltaları hesaplayın).

Her satır bir akıştır, bir süreç değil. 40 sekmeli tek bir Chrome süreci 40+ satıra sahip olabilir. PID'ye göre kendiniz toplulaştırın — nettop yapmayacak.

Yardımcı süreçler yardımcı adlarıyla görünür. Google Chrome Helper (Renderer), Slack Helper, com.docker.backend. Katlama yok. Ham çekirdek görünümünü görüyorsunuz.

Yollar şaşırtıcı olabilir. VPN tüneli üzerinden geçen bir bağlantı en0 değil, utun0 veya benzeri bir arayüz gösterecektir. Tanımadığınız bir arayüzde trafik görüyorsanız, bu araştırmaya değer.

nettop'un düştüğü yerler

Ücretsiz, yerleşik bir araç için, nettop gerçekten yararlıdır. Ancak gerçek sınırlar vardır.

Geçmiş yok

nettop'tan çıkın ve veriler gider. Günlük dosyası, yuvarlanan pencere, kalıcı durum yok. Artış sırasında izlemiyordunuz, görmediniz. Yakalamak istediğiniz olaydan önce ayarlarsanız -L günlük modu yardımcı olur, ancak bu planlama, hata ayıklama değil.

Yardımcı katlama yok

Belirtildiği gibi, Google Chrome Helper (GPU), (Plugin), (Renderer) vb.'yi ayrı satırlar olarak görürsünüz. Onları 30 kısa ömürlü oluşturucu süreç boyunca zihinsel olarak toplamak yorucu ve hata yapmaya açıktır.

Yalnızca terminal

Canlı bir nettop oturumu bir Terminal penceresi alır. Kod yazarken "şu anda bir şey bant genişliği kullanıyor mu?" diye bakmak istiyorsanız, bağlam değiştirmeniz gerekir. Menü çubuğu widget'ı, bildirimi, tepsi simgesi yok.

Kafa karıştırıcı sütun adları

re-tx, rtt_var, tx_dupe — sütunlar insanlar için değil, çekirdek TCP istatistikleri için adlandırılmıştır. Man sayfası dostunuzdur, ancak öğrenme eğrisi gerçektir.

Uygulama veya kategoriye göre filtre yok

"Bana yalnızca Chrome'u ve yardımcılarını göster" veya "sistem süreçleri dışında her şeyi göster" diyemezsiniz. grep'e yönlendirerek filtrelersiniz, bu işe yarar ama hoş değildir.

Uyarı yok

Bir uygulamanın aniden 50 MB/sn kullanmaya başladığını bilmek isterseniz, nettop size söylemez. Onu, örnekleri farklayan ve bir eşiğe karşı karşılaştıran bir yoklama komut dosyasında sarmalamanız gerekir.

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

Bir UI neden yardımcı olur

Çoğu zaman, gerçekten akış başına TCP istatistiklerini bilmek istemezsiniz. Bilmek istediğiniz:

  1. Şu anda bir şey bant genişliği kullanıyor mu?
  2. Hangi uygulama?
  3. Son saatte, günde, haftada her uygulama ne kadar kullandı?

ova gibi bir menü çubuğu uygulaması, nettop'un okuduğu kabaca aynı çekirdek verisini okur, ancak üzerine üç şey yapar:

  • Yardımcı süreçleri üst uygulama altında katlar, yani "Slack" tek bir satırdır
  • Geçmişi yerel olarak saklar, böylece geriye kaydırabilir ve "14:47'de ne oldu" diye sorabilirsiniz
  • Menü çubuğunda yaşar, böylece çalışırken bir bakış uzaktadır

Bu nettop'tan daha iyi değil — farklı. nettop, anlarda uzandığınız bir hata ayıklama aracıdır. Bir bant genişliği izleyicisi ortam farkındalığıdır.

Tek yerde canlı + geçmiş
ova menü çubuğunuzda mevcut oranı ve arkasında tam kaydırılabilir bir zaman çizelgesini gösterir. nettop canlı oranı gösterir. ova ayrıca dün 15:00'i de mevcut tutar.

nettop'u diğer araçlarla birleştirme

nettop birkaç başka yerleşikle iyi eşleşir.

nettop + lsof

nettop size hangi PID'in bant genişliği kullandığını gösterir. lsof -p <PID>, o PID'in açık olan her dosyasını ve soketini gösterir. Birlikte "bu uygulama hangi uzak uç noktayla konuşuyor?" sorusunu yanıtlarlar.

lsof -i -P -n -p 41218

Bu, PID 41218 tarafından açılan her IPv4/IPv6 soketini, uzak adresler ve portlarla listeler.

nettop + log show

Bir sistem hizmetinin yanlış davrandığından şüpheleniyorsanız, birleştirilmiş günlük genellikle nettop'tan daha fazla bağlama sahiptir. nettop'ta suçlu bir süreci tespit ettikten sonra çalıştırın:

log show --last 5m --predicate 'process == "cloudd"'

…aynı zamanda cloudd'un ne yaptığını görmek için.

nettop + tcpdump

Hatta gerçekte ne olduğunu bilmeniz gerektiğinde, paket yakalama cevaptır. nettop size "Chrome 142.250.x.x'e 12 MB/sn yüklüyor" der. sudo tcpdump -i en0 host 142.250.x.x size HTTP/2 mi yoksa QUIC mi olduğunu, SNI'ın ne olduğunu, hangi yanıt kodlarının geri geldiğini söyler.

Çalışılmış bir örnek

Boştayken dizüstünüzün fanı tepiyor olduğunu varsayalım. Araştırma zinciri:

  1. Bir terminal açın, nettop -P -L 5 -s 2 -J bytes_in,bytes_out,interface çalıştırın.
  2. Çıktıyı okuyun. Diyelim cloudd 10 saniyede 80 MB yukarı gösteriyor.
  3. log show --last 1m --predicate 'process == "cloudd"' --info çalıştırın.
  4. Günlük, iCloud'un bugün daha önce telefonunuzda çekilen fotoğrafları yüklediğini söylüyor.
  5. Bekleyip bekleyemeyeceğinize, iCloud'u kısıp kısmayacağınıza veya yüklemeyi duraklatıp duraklatmayacağınıza karar verin.

Bu tüm dizi yaklaşık 90 saniye sürer. Bir gün önce ova'yı yüklemiş olsaydınız, 1. adım "menü çubuğuna bak" olurdu ve bir terminal açmadan önce zaten cloudd'un suçlu olduğunu bilirdiniz. Birleştirilmiş günlük adımı hâlâ geçerlidir.

Toparlarken

nettop macos, kimsenin pazarlamadığı küçük, hızlı, yerleşik bir araçtır. Var olduğunu bildikten sonra, "şu anda ne kullandığını görmem gerek" için doğru cevaptır. Sınırları gerçektir — geçmiş yok, katlama yok, yalnızca terminal — ancak kapsamı içinde ücretsiz olarak yenmek zordur.

Bir komut yazmadan ortam farkındalığı, kaydırılabilir geçmiş ve uygulama başına katlama için bir menü çubuğu uygulaması istersiniz. ova o kısmı yapar: yaklaşık 3 MB, macOS 14+, Apple Silicon ve Intel, kabaca 1 Hz'de örnekler, her şeyi diskte yerel olarak saklar. nettop ve ova bitişik problemleri çözer ve çoğu macOS kullanıcısı her ikisine de sahip olmaktan yararlanır.