มีเครื่องมือที่อนุญาตให้บันทึกการใช้งานหน่วยความจำหรือไม่?


18

ฉันต้องการตรวจสอบการใช้หน่วยความจำของกระบวนการและฉันต้องการให้บันทึกข้อมูลนี้ เครื่องมือดังกล่าวมีอยู่จริงหรือไม่?


1
ฉันคิดว่าลิงค์นี้เกี่ยวกับการตรวจสอบการใช้หน่วยความจำกระบวนการโดยทางโปรแกรมจะเป็นประโยชน์สำหรับคุณในการแก้ไขความต้องการของคุณ
Sen

คำตอบ:


8

ฉันได้เขียนสคริปต์เพื่อทำตรงนี้ โดยทั่วไปจะทำการสุ่มตัวอย่างpsตามช่วงเวลาที่กำหนดเพื่อสร้างโปรไฟล์ของกระบวนการเฉพาะ กระบวนการสามารถเรียกใช้งานได้โดยเครื่องมือตรวจสอบเองหรืออาจเป็นกระบวนการอิสระ (ระบุโดย pid หรือรูปแบบคำสั่ง)


1
เห็นได้ชัดว่า Syrupy ถูกย้ายไปที่github.com/jeetsukumaran/Syrupy
Framester

12

บางครั้งเมื่อความจำเป็นเกิดขึ้นฉันเพิ่งทำ:

$ top -d 1 -b |grep <process> >>somefile

มันไม่ได้เป็นทางออกที่สง่างาม แต่ทำงานให้สำเร็จถ้าคุณต้องการค่าน้ำมันดิบที่รวดเร็วในการตรวจสอบสมมติฐานของคุณ


ฉันคิดว่ามันเป็นความสง่างามในความเรียบง่ายของมัน คุณอาจต้องการgrep --line-buffered <process> >>somefileบังคับให้ grep ส่งออกแต่ละบรรทัดโดยไม่ต้องบัฟเฟอร์
Ott Toomet

7

sar( System Activity Reporter ) จากแพ็คเกจsysstatคือเพื่อนของคุณในกรณีเช่นนี้

อีกวิธีหนึ่งคือการตรวจสอบรวมกับข้อมูลในอดีตเช่น Munin, pnp4nagios, rrdtools, ...


1
แต่สามารถsarเพ่งความสนใจไปที่เพียงกระบวนการเดียว? ส่วนใหญ่ดูเหมือนว่าจะตรวจสอบระบบโดยรวม
xenoterracide

3
pidstatคำสั่งจากแพคเกจ sysstat มีอินเตอร์เฟซที่เป็นธรรมสำหรับการรายงานสถิติในขั้นตอนเดียว
Steven D

@ xenoterracide Steven D มีคำตอบ ฉันไม่ทราบคำสั่งนี้มาก่อน
Christian

4

นอกจากที่กล่าวไว้ sar ผมอยากแนะนำให้อยู่บนยอด มันจะบันทึกล็อกแบบไบนารีที่คุณสามารถอ่านได้ในภายหลังและนอกจากหน่วยความจำจะบันทึกข้อมูลอื่น ๆ อีกมากมาย


3

คุณอาจจะลองValgrind

Valgrind เป็นกรอบเครื่องมือสำหรับการสร้างเครื่องมือวิเคราะห์แบบไดนามิก มีเครื่องมือ Valgrind ที่สามารถตรวจจับการจัดการหน่วยความจำจำนวนมากและเธรดบั๊กโดยอัตโนมัติและโปรไฟล์โปรแกรมของคุณอย่างละเอียด คุณยังสามารถใช้ Valgrind เพื่อสร้างเครื่องมือใหม่

การกระจาย Valgrind ขณะนี้รวมถึงหกเครื่องมือการผลิตที่มีคุณภาพ: การตรวจจับข้อผิดพลาดของหน่วยความจำสองเครื่องตรวจจับข้อผิดพลาดด้ายแคชและสาขาการทำนาย Profiler โทรกราฟสร้างแคชและสาขาการทำนาย Profiler และProfiler กอง


ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
saji89

เอกสารนี้Massifอธิบายในรายละเอียด
Shawn Xie

0

ฉันชอบคำตอบง่ายๆของ Sridhar แต่ฉันจะม้วนเองก่อนที่จะลองเขา:

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 ตามความเหมาะสม Python 3.5.something ล่ม_asdict()ดังนั้นให้ใช้ Python 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}]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.