Có một công cụ cho phép đăng nhập sử dụng bộ nhớ?


18

Tôi muốn theo dõi việc sử dụng bộ nhớ của một quá trình và tôi muốn dữ liệu này được ghi lại. Liệu một công cụ như vậy tồn tại?


1
Tôi nghĩ rằng liên kết này về việc theo dõi lập trình một quá trình sử dụng bộ nhớ sẽ hữu ích cho bạn để giải quyết nhu cầu của bạn.
Sen

Câu trả lời:


8

Tôi đã viết một kịch bản để làm chính xác điều này . Về cơ bản, nó lấy mẫu pstheo các khoảng thời gian cụ thể, để xây dựng một hồ sơ của một quy trình cụ thể. Quá trình có thể được khởi chạy bởi chính công cụ giám sát hoặc nó có thể là một quá trình độc lập (được chỉ định bởi pid hoặc mẫu lệnh).


1
Syrupy

12

Thỉnh thoảng khi có nhu cầu, tôi chỉ cần làm:

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

Đó không phải là một giải pháp tao nhã, nhưng sẽ hoàn thành công việc nếu bạn muốn giá trị thô nhanh chóng để xác minh giả thuyết của bạn.


Tôi nghĩ rằng nó thanh lịch trong sự đơn giản của nó. Bạn có thể muốn làm grep --line-buffered <process> >>somefileđể buộc grep xuất ra từng dòng mà không cần đệm
Ott Toomet

7

sar(Trình báo cáo hoạt động hệ thống ) từ gói sysstat là bạn của bạn trong trường hợp như thế này.

Một cách khác là theo dõi kết hợp với dữ liệu lịch sử, ví dụ Munin, pnp4nagios, rrdtools, ...


1
Nhưng có sarthể tập trung vào chỉ một quá trình? chủ yếu là nó dường như giám sát toàn bộ hệ thống
xenoterracide

3
Các pidstatlệnh cũng từ gói sysstat cung cấp một giao diện khá đẹp cho báo cáo thống kê về quá trình duy nhất.
Steven D

@xenoterracide Steven D đã có câu trả lời. Tôi đã không nhận ra lệnh này trước đây.
Christian

4

Ngoài sar đã nói ở trên, tôi muốn giới thiệu trên đỉnh . Nó lưu một bản ghi nhị phân mà bạn có thể xem qua sau đó, và bên cạnh bộ nhớ còn lưu rất nhiều thông tin khác.


3

Bạn có thể thử Valgrind .

Valgrind là một khung công cụ để xây dựng các công cụ phân tích động. Có các công cụ Valgrind có thể tự động phát hiện nhiều lỗi quản lý bộ nhớ và luồng, và cấu hình chi tiết các chương trình của bạn. Bạn cũng có thể sử dụng Valgrind để xây dựng các công cụ mới.

Phân phối Valgrind hiện bao gồm sáu công cụ chất lượng sản xuất: trình phát hiện lỗi bộ nhớ , hai trình phát hiện lỗi luồng, trình tạo bộ đệm dự đoán nhánh và bộ đệm, trình tạo biểu đồ cuộc gọi và trình lược tả dự đoán nhánh và trình lược tả heap .


Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
saji89

Tài liệu này massif giải thích chi tiết.
Shawn Xie

0

Tôi thích câu trả lời đơn giản của Sridhar nhưng tôi tự lăn lộn trước khi thử:

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)

Về cơ bản nó chỉ hữu ích nếu bạn muốn đầu ra có cấu trúc. Thay đổi 7274 cho phù hợp. Ngoài ra Python 3.5.s Something đã bị hỏng _asdict(), vì vậy hãy sử dụng Python 2.

Tệp đầu ra trông như:

["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}]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.