Tek bir işlemin bant genişliği kullanımını izleyebilen bir araç var mı?


15

Tek bir işlemin çeşitli çalışma zamanı verilerini kaydetmemi sağlayan güzel bir monitör buldum . Bant genişliği kullanımı için aynı şeyi yapan bir eşdeğer arıyorum. İdeal olarak, komutun benzemesi gerekir bwmon --pid 1 --log init.log. Böyle var mı? Yönetici ayrıcalıkları olmadan çalışabilir mi?



Yanıtlar:


3

başlamanız için bir şey (sadece kendiniz yazmak istediğinizde):

#!/bin/bash
#
# usage: bwmon PID

IN=0; OUT=0; TIME=0

get_traffic() {
    t=`awk '/eth0:/ { printf("%s,%d,%d\n",strftime("%s"),$2,$10); }' < /proc/$1/net/dev`
    IN=${t#*,}; IN=${IN%,*}
    OUT=${t##*,};
    TIME=${t%%,*};
}

get_traffic $1
while true
do
    _IN=$IN; _OUT=$OUT; _TIME=$TIME
    get_traffic $1
    echo "$TIME,$(( $TIME - $_TIME )),$IN,$(( $IN - $_IN )),$OUT,$(( $OUT - $_OUT))"
    sleep 1
done

yorumlar:

  • sadece eth0'ı kontrol eder
  • her 1 saniyede bir kontrol eder
  • yalnızca linux altında çalışır, ancak diğer unix'ler benzer çalışır (procfs veya her neyse)
  • çıktı ile bir sqlite.db saklanabilir stat --printf="%N\n" /proc/PID/exe | cut -d ' ' -f 3

11
Bunun aslında işlem başına bir sayaç olduğunu düşünmüyorum; Bence bu sadece süreç açısından toplam arayüz sayımı. Istemci / sunucu ncçifti localhost üzerinden koştum , saniyede bir bayt gönderdim ve izledim /proc/<listening-nc-pid>/net/dev. Sonra ikinci bir ncçift koştum , maksimum hızda gönderdim. İzlediğim dosya, ilk çiftle birlikte ikinci çiftin verilerini saydı. Linux 2.6.32 üzerinde çalışıyor.
Jander

Bir hatayla karşılaştım function strftime never defined; gawk yüklenerek düzeltildi .
tshepang

4
@Jander Doğru /proc/<pid>/net/devve /proc/net/devburada aynı içeriğe sahip. Bu nedenle, script verilen işlem için değil, yalnızca eth0 için trafiği rapor eder.
scai

1
Bunun bir cevap olmadığını doğrulamak. eth0Süreç tarafından görüldüğü gibi , arayüz sayacını ölçer . O mu değil o arayüz üzerinden işlem tarafından gönderilen verileri saymak.
Navin

@Navin, soruyu cevaplamaya çalışan bir şeydir. Bir yanlış cevap hala bir cevaptır. Eğer bu yanlışsa, o zaman aşağıya doğru oy verebilirsiniz, ama yine de bir cevap.
terdon

6

Kullanılan genel G / Ç bant genişliğinden memnunsanız (veya programınız neredeyse tamamen G / Ç ağını kullanıyorsa), /proc/<pid>/iodosyayı izleyebilirsiniz . İstediğiniz rcharve wcharalanları. Çıkarmak isteyebilirsiniz read_bytesve write_bytesbunlar depolama katmanına okumaları ve yazmaları temsil eder. Http://www.kernel.org/doc/Documentation/filesystems/proc.txt adresinin 3.3 bölümüne bakın .

Daha fazla çözüme ihtiyacınız varsa .... belki bunu kullanarak komut dosyası olabilir lsofve strace, ancak tüm köşe vakaları doğru almak acı verici olurdu. Temel fikir çıkışını ayrıştırmak için strace -p <pid>, ilk parametreyi kapma (= dosya tanıtıcı) ve dönüş değeri (= bayt sayısı) read(), write(), send(), ve recv()aramaları ( NOT ı cenneti'; dinlemek için birkaç daha syscalls vardır t hepsini izledi). Negatif değerleri atın; hataları gösterirler. Kullanım lsof -p <pid>rakama hangi dosya tanımlayıcıları TCP / UDP soketleri vardır ve fd başına sayıları toplayın. Bu strateji, incelemekte olduğunuz sürece sahip olduğunuz sürece kök gerektirmez, ancak iyi yazmasına izin vermek, yazmak gerçekten kıllı olurdu.


3

nethogs'u deneyin :

NetHogs küçük bir 'net top' aracıdır. Çoğu araçta olduğu gibi protokol veya alt ağ başına trafiği azaltmak yerine bant genişliğini işleme göre gruplandırır. NetHogs yüklenecek özel bir çekirdek modülüne güvenmez. Birden fazla ağ trafiği varsa, NetHogs'u tetikleyebilir ve buna hangi PID'nin neden olduğunu hemen görebilirsiniz. Bu, çılgına dönmüş ve birdenbire bant genişliğinizi kaplayan programları belirlemenizi kolaylaştırır.

2
Ne yazık ki, tek bir işlemi izleyemiyor ve günlüğe kaydetmiyor. İkinci gereksinim (günlük kaydı) ilk gereksinimden çok daha önemlidir. Oh, ve yönetici ayrıcalıkları olmadan çalışmaz :(
tshepang

1
Bunun için neredeyse kesinlikle kök ayrıcalıklarına ihtiyacınız olacak.
Falmarri

-T bayrağıyla (tracemode) nethogs kullanmayı deneyebilirsiniz. Elde edilen çıktı daha sonra ilgilendiğiniz tek bir işlemin trafiğini çıkarmak için ayrıştırılabilir.
Valerio Schiavoni
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.