2012-01-03 13 views
65

क्या लिनक्स टॉप कमांड के लिए कोई विकल्प है जहां मैं नाम से प्रक्रियाओं को फ़िल्टर कर सकता हूं और लॉग फ़ाइल में प्रत्येक 1 सेकंड के उस प्रक्रिया के सीपीयू उपयोग को लिख सकता हूं?प्रक्रिया के नाम से फ़िल्टर करें और सीपीयू उपयोग

उत्तर

111

प्रक्रिया नाम से top के उत्पादन में फिल्टर करने के लिए, आप pgrep उपयोग कर सकते हैं तो उन्हें top की -p विकल्प को पारित प्रक्रिया नाम से PIDs की एक सूची प्राप्त करने के लिए। उदाहरण के लिए:

top -p $(pgrep -d',' http) 

नोट: -d',' विकल्प कॉमा, जो है क्या top -p से आशा की जाती है साथ PIDs delimits। नोट 2: toppgrep में निर्दिष्ट नाम से मेल खाने वाली कोई रनिंग प्रक्रिया नहीं है, तो विफलता संदेश लौटाएगा।

फ़ाइल में top के परिणाम लिखने के लिए, -n 1 विकल्प (केवल एक पुनरावृत्ति) का उपयोग करें और आउटपुट को अपनी लॉग फ़ाइल में रीडायरेक्ट करें।

top -p $(pgrep -d',' http) -n 1 >> your_log_file 

कि हर दूसरा, शायद एक while एक sleep साथ पाश करना होगा ऐसा करने के लिए?

while :; do top -p $(pgrep -d',' http) -n 1 >> your_log_file; sleep 1; done 

प्रत्येक प्रविष्टि टाइमस्टैम्प के, आप date के उत्पादन में जोड़ सकते हैं। जैसे

while :; do top -p $(pgrep -d',' http) -n 1 >> log.txt; date >> log.txt; sleep 1; done 
+0

धन्यवाद शॉन, प्रत्येक 1 सेकंड के लिए दिनांक और समय लॉग कैसे करें।, ताकि यह मुझे अलग-अलग प्रक्रिया में कितनी बार और कितनी सीपीयू का उपयोग करने में मदद करेगी। – BalaB

+0

@bala उत्तर में अपडेट देखें। –

+0

सुरुचिपूर्ण और बहुत उपयोगी। धन्यवाद! –

5

एक अन्य विकल्प है:

top -b -d 1 -p $(pgrep -d',' java) -n 120 > log.txt 
  • विकल्प -d शीर्ष द्वारा प्रयोग किया जाता डेटा ताज़ा करने के लिए आवृत्ति सेट करने के लिए अनुमति देता है।
  • विकल्प -b का अर्थ है कि शीर्ष का पारंपरिक इंटरफ़ेस उपयोग नहीं किया गया है। इसके बजाय, यह सब कुछ मानक आउटपुट में भेजता है और फिर आप एक पाइप (|) या एक पुनर्निर्देशन (>) का उपयोग कर सकते हैं।
  • विकल्प -n पुनरावृत्तियों शीर्ष की संख्या के बारे में सूचित करता है निष्पादित करना चाहिए।

उसके बाद आप लिख सकते हैं:

cat log.txt | grep USER_OF_PROCESS 

आप प्रक्रिया के निष्पादन के समय और भी% सीपीयू, मेमोरी और जो कुछ देखेंगे।

2
#You can run following script as ./cpurecorder.sh pid filename 
#It will generate output file with memory usage and cpu utilisation. 
#You can log other variable by searching man for ps. 

`enter code here`filepath=/home/rtcsadm    # modify as desired 
interval=20       # reports per minute 
timelimit=6000      # how long to run, in seconds 

mydate=`date "+%H:%M:%S"`   # the timestamp 
freq=$((60/$interval))    # for sleep function 

while [ "$SECONDS" -le "$timelimit" ] ; do 
    ps -p$1 -opid -opcpu -opmem -ocomm -c | grep $1 | sed "s/^/$mydate /" >> $filepath/$2.txt 
    sleep 3 
    mydate=`date "+%H:%M:%S"` 
done 
संबंधित मुद्दे