मैं एक प्रक्रिया के मेमोरी उपयोग की निगरानी करना चाहता हूं, और मैं चाहता हूं कि यह डेटा लॉग इन हो। क्या ऐसा कोई उपकरण मौजूद है?
मैं एक प्रक्रिया के मेमोरी उपयोग की निगरानी करना चाहता हूं, और मैं चाहता हूं कि यह डेटा लॉग इन हो। क्या ऐसा कोई उपकरण मौजूद है?
जवाबों:
मैंने ऐसा करने के लिए एक पटकथा लिखी है । यह मूल रूप ps
से विशिष्ट अंतराल पर नमूने लेता है, एक विशेष प्रक्रिया की एक प्रोफ़ाइल बनाने के लिए। इस प्रक्रिया को मॉनिटरिंग टूल द्वारा ही लॉन्च किया जा सकता है, या यह एक स्वतंत्र प्रक्रिया (पीआईडी या कमांड पैटर्न द्वारा निर्दिष्ट) हो सकती है।
कभी-कभी जरूरत पड़ने पर मैं सिर्फ यही करता हूं:
$ top -d 1 -b |grep <process> >>somefile
यह एक सुरुचिपूर्ण समाधान नहीं है, लेकिन यदि आप अपनी परिकल्पना को सत्यापित करने के लिए त्वरित कच्चे मूल्य चाहते हैं, तो यह काम पूरा हो जाता है।
grep --line-buffered <process> >>somefile
बफ़रिंग के बिना प्रत्येक पंक्ति को आउटपुट करने के लिए grep को मजबूर करने के लिए करना चाह सकते हैं
sar
( सिस्टम गतिविधि रिपोर्टर ) sysstat पैकेज से इस तरह के मामले में आपका दोस्त है।
एक अन्य तरीका ऐतिहासिक डेटा, जैसे मुनिन, pnp4nagios, rrdtools, के साथ संयुक्त निगरानी होगा ...
sar
सिर्फ एक प्रक्रिया पर ध्यान केंद्रित किया जा सकता है? ज्यादातर यह पूरी तरह से सिस्टम की निगरानी करने के लिए लगता है
pidstat
Sysstat पैकेज से आदेश भी एक प्रक्रिया पर आंकड़ों की रिपोर्ट के लिए एक काफी अच्छा इंटरफेस प्रदान करता है।
आप Valgrind की कोशिश कर सकते हैं ।
Valgrind गतिशील विश्लेषण उपकरणों के निर्माण के लिए एक इंस्ट्रूमेंटेशन ढांचा है। Valgrind टूल हैं जो स्वचालित रूप से कई मेमोरी प्रबंधन और थ्रेडिंग बग्स का पता लगा सकते हैं, और अपने कार्यक्रमों को विस्तार से प्रोफाइल कर सकते हैं। नए टूल बनाने के लिए आप Valgrind का भी उपयोग कर सकते हैं।
वैलग्राइंड वितरण में वर्तमान में छह उत्पादन-गुणवत्ता के उपकरण शामिल हैं: एक मेमोरी त्रुटि डिटेक्टर , दो थ्रेड एरर डिटेक्टर, एक कैश और शाखा-भविष्यवाणी प्रोफाइलर, एक कॉल-ग्राफ जनरेटिंग कैश और शाखा-भविष्यवाणी प्रोफाइलर, और एक ढेर प्रोफाइलर ।
मुझे श्रीधर का सरल जवाब पसंद है लेकिन मैंने अपना प्रयास करने से पहले अपना रोल निभाया:
import json, psutil, datetime, time
with open('log.txt', 'w') as f:
while True:
json.dump((datetime.datetime.now().isoformat(),
psutil.Process(7274).memory_info()._asdict()), f)
f.write('\n')
f.flush()
time.sleep(1)
यदि आप संरचित आउटपुट चाहते हैं तो यह मूल रूप से केवल उपयोगी है। 7274 को उपयुक्त के रूप में बदलें। साथ ही पायथन 3.5.समर्थन टूट गया _asdict()
, इसलिए पायथन 2 का उपयोग करें।
आउटपुट फ़ाइल इस तरह दिखती है:
["2019-03-19T11:21:53.784670", {"rss": 220389376, "vms": 538984448, "shared": 15724544, "text": 303104, "lib": 0, "data": 221364224, "dirty": 0}]
["2019-03-19T11:21:54.786136", {"rss": 220438528, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:55.787555", {"rss": 220495872, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:56.788754", {"rss": 220528640, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]