क्या कोई उपकरण है जो एकल प्रक्रिया के बैंडविड्थ उपयोग की निगरानी कर सकता है?


15

मुझे एक अच्छा मॉनिटर मिला है जो मुझे एक ही प्रक्रिया के विभिन्न रनटाइम डेटा को लॉग करने की अनुमति देता है। मैं एक समतुल्य की तलाश कर रहा हूं जो बैंडविड्थ उपयोग के लिए समान है। आदर्श रूप में, कमांड को देखना चाहिए bwmon --pid 1 --log init.log। क्या ऐसा है? क्या यह बिना व्यवस्थापक विशेषाधिकारों के चल सकता है?



जवाबों:


3

आपको शुरू करने के लिए कुछ (बस मामले में आप इसे खुद लिखना चाहते हैं):

#!/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

टिप्पणियाँ:

  • केवल eth0 की जाँच करता है
  • हर 1 सेकंड की जाँच करता है
  • केवल लिनक्स के तहत काम करता है, लेकिन अन्य यूनिक्स समान काम करते हैं (खरीद या जो भी हो)
  • आउटपुट को sqlite.db में स्टोर किया जा सकता है stat --printf="%N\n" /proc/PID/exe | cut -d ' ' -f 3

11
मुझे नहीं लगता कि यह वास्तव में एक प्रति-प्रक्रिया काउंटर है; मुझे लगता है कि यह प्रक्रिया के दृष्टिकोण से सिर्फ कुल इंटरफ़ेस गणना है। मैंने ncलोकलहोस्ट पर एक क्लाइंट / सर्वर पेयर चलाया , प्रति सेकंड एक बाइट भेज रहा था, और देखा /proc/<listening-nc-pid>/net/dev। तब मैंने दूसरी ncजोड़ी चलाई , जो अधिकतम दर पर भेज रहा था। मैं जिस फ़ाइल को बहुत स्पष्ट रूप से देख रहा था, उसने पहली जोड़ी के साथ दूसरी जोड़ी के डेटा को गिना। लिनक्स 2.6.32 पर चल रहा है।
जंदर

मुझे एक त्रुटि हुई थी function strftime never defined; यह gawk स्थापित करके तय किया गया था ।
tshepang

4
@Jander यह सही है, /proc/<pid>/net/devऔर /proc/net/devयहाँ एक ही सामग्री है। इसलिए, केवल दिए गए प्रक्रिया के लिए scipt केवल eth0 के लिए ट्रैफ़िक की रिपोर्ट करता है, न कि।
स्काइ

1
पुष्टि करते हुए कि यह कोई उत्तर नहीं है। यह eth0प्रक्रिया द्वारा देखे गए इंटरफ़ेस काउंटर को मापता है। यह उस इंटरफ़ेस के माध्यम से प्रक्रिया द्वारा भेजे गए डेटा की गणना नहीं करता है।
नवीन

@Navin एक उत्तर कुछ भी है जो प्रश्न का उत्तर देने की कोशिश करता है। एक गलत जवाब अभी भी एक जवाब है। यदि यह गलत है, तो आप इसे कम कर सकते हैं, लेकिन यह अभी भी एक जवाब है।
terdon

6

यदि आप सामान्य I / O बैंडविड्थ के उपयोग से संतुष्ट हैं (या यदि आपका प्रोग्राम लगभग पूरी तरह से नेटवर्क I / O) करता है, तो आप /proc/<pid>/ioफ़ाइल देख सकते हैं । आप चाहते हैं rcharऔर wcharफ़ील्ड्स। आप घटाना read_bytesऔर घटाना चाह सकते हैं write_bytes, क्योंकि वे संग्रहण परत को पढ़ते और लिखते हैं। Http://www.kernel.org/doc/Documentation/filesystems/proc.txt का अनुभाग 3.3 देखें ।

यदि आपको अधिक रिज़ॉल्यूशन की आवश्यकता है .... तो आप इस का उपयोग करके स्क्रिप्ट कर सकते हैं lsofऔर strace, हालांकि यह कोने के सभी मामलों को ठीक करने के लिए दर्दनाक होगा। मूल विचार के उत्पादन में पार्स करने के लिए है strace -p <pid>, पहले पैरामीटर हथियाने (= फ़ाइल वर्णनकर्ता) और से वापसी मान (= बाइट की संख्या) read(), write(), send(), और recv()कॉल ( नोट मैं हेवन ', वहाँ कई और अधिक syscalls करने के लिए सुन रहे हैं टी ने उन सभी को ट्रैक किया)। नकारात्मक मूल्यों को त्यागें; वे त्रुटियों को इंगित करते हैं। उपयोग lsof -p <pid>आंकड़ा करने के लिए जो बाहर फ़ाइल वर्णनकर्ता टीसीपी / यूडीपी सॉकेट हैं, और fd प्रति मायने रखता है जोड़ें। जब तक आप इस प्रक्रिया का निरीक्षण कर रहे हैं, तब तक इस रणनीति के लिए रूट की आवश्यकता नहीं है, लेकिन यह वास्तव में लिखने के लिए बालों वाला होगा, अकेले अच्छा लिखने दें।


3

कोशिश nethogs :

NetHogs एक छोटा 'नेट टॉप' टूल है। प्रति प्रोटोकॉल या सबनेट की तरह ट्रैफ़िक को तोड़ने के बजाय, जैसे अधिकांश उपकरण करते हैं, यह प्रक्रिया द्वारा बैंडविड्थ को समूहित करता है। NetHogs लोड किए जाने के लिए एक विशेष कर्नेल मॉड्यूल पर निर्भर नहीं करता है। यदि अचानक नेटवर्क ट्रैफ़िक आता है, तो आप NetHogs को फायर कर सकते हैं और तुरंत देख सकते हैं कि PID किस कारण से ऐसा कर रहा है। यह उन कार्यक्रमों को प्रेरित करना आसान बनाता है जो जंगली हो गए हैं और अचानक आपके बैंडविड्थ को ले जा रहे हैं।

2
अफसोस की बात है कि यह एक प्रक्रिया की निगरानी नहीं कर सकता है, और यह लॉग नहीं करता है। दूसरी आवश्यकता (लॉगिंग) अधिक महत्वपूर्ण है कि पहला वाला हालांकि। ओह, और यह व्यवस्थापक विशेषाधिकारों के बिना नहीं चलता है :(
tshepang

1
आपको इसके लिए लगभग निश्चित रूप से रूट विशेषाधिकारों की आवश्यकता होगी।
फाल्मरी

आप -t ध्वज (ट्रेसमोड) के साथ नेथोग का उपयोग करने की कोशिश कर सकते हैं। परिणामी आउटपुट को उस एकल प्रक्रिया के ट्रैफ़िक को निकालने के लिए तैयार किया जा सकता है जिसमें आप रुचि रखते हैं।
Valerio Schiavoni
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.