Cách xem sử dụng bộ nhớ tóm tắt của các nhóm lệnh (thay vì các quy trình)


10

Có cách nào để nhóm các quy trình tương tự khi sử dụng các công cụ như top / htop không? Đôi khi tôi chỉ muốn biết những gì ăn bộ nhớ của tôi và một số chương trình (chủ yếu là trình duyệt) đang sử dụng nhiều quy trình, điều này khiến cho việc đọc chúng thực sự sử dụng bao nhiêu RAM.

Cho đến nay tôi chỉ nghĩ ra một thứ như thế:

ps ax -o pmem,cmd | grep opera | grep -oE '^[ ]*[0-9.]+' | paste -sd+ - | bc

Câu trả lời:


7

Bạn có thể sử dụng ps -Cđể chỉ hiển thị thông tin quá trình cho một tên lệnh cụ thể.

ví dụ

ps -C opera

Sau đó, bạn có thể sử dụng các pstùy chọn khác để trích xuất chỉ dữ liệu bạn đang tìm kiếm. Cụ thể, hhoặc --no-headersđể triệt tiêu các tiêu đề cột và -o pmemđể hiển thị phần trăm bộ nhớ được sử dụng bởi quy trình.

ps -C opera --no-headers -o pmem

Điều đó sẽ cung cấp cho bạn một loạt các tỷ lệ sử dụng bộ nhớ, mỗi tỷ lệ trên mỗi dòng.

Có rất nhiều phương pháp để tổng hợp dữ liệu như vậy, một trong những phương pháp tôi sử dụng thường xuyên là để ống nó vào xargs để chuyển đổi nó thành một phù hợp với các yếu tố giới hạn bởi không gian, sau đó vào sed để không gian chuyển đổi sang +biểu tượng, và sau đó vào bcđể thực hiện các phép tính. Phương pháp đường ống của bạn vào paste -sd+công trình là tốt hơn hoặc được cho là tốt hơn | xargs | sed.

Đặt tất cả lại với nhau, bạn nhận được:

ps -C opera --no-headers -o pmem | xargs | sed -e 's/ /+/g' | bc

hoặc là

ps -C opera --no-headers -o pmem | paste -sd+ | bc

Nói cách khác, bạn có thể sử dụng ps -Cthay vì nhiều greps nếu bạn chỉ muốn dữ liệu về một chương trình đang chạy cụ thể.

LƯU Ý: Bạn có thể sử dụng nhiều -Ctùy chọn trên cùng một dòng lệnh nếu bạn muốn thông tin về nhiều chương trình cùng một lúc. ví dụ

ps -C iceweasel -C chromium -C opera

Yay, người đầu tiên thực sự hiểu / đọc câu hỏi của tôi!
korda

Vấn đề duy nhất tôi thấy với cách tiếp cận này là một số chương trình có cùng một lệnh và tôi sẽ không muốn nhóm chúng (ví dụ java ... và vì tôi là nhà phát triển java nên tôi thường có ít nhất một vài chương trình java đang chạy). Tôi đoán không có giải pháp hoàn hảo ...
korda

luôn luôn có ps h -C java -o pmem,args | awk '/foo/ {print $1}' | ...ví dụ để tìm kiếm một chương trình java gọi là foo.
cas

0

Bạn có thể tạo một kịch bản shell

#!/bin/bash
Total=`cat /proc/meminfo | head -n1 | awk '{print $2}'`
max_usage=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $1}'`
name=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $NF}'`
echo "$Total $max_usage $name"
echo "($max_usage*$Total)/(100*1024)" | bc

Điều này sẽ cung cấp cho các ứng dụng sử dụng mem cao nhất.


Tôi đã cố gắng để làm việc này và nó không mang lại cho tôi kết quả thú vị. Ví dụ: chương trình chỉ hiển thị một chương trình và đó không phải là chương trình chiếm nhiều bộ nhớ nhất
korda

Là nó? Vâng, bạn muốn một số thứ như đầu ?? nếu có thì bạn có thể sửa đổi tập lệnh với độ trễ 2 hoặc 1 giây và chạy cùng một thứ trong một thời gian hoặc cho. Đối với tôi, nó hiển thị Ứng dụng sử dụng bộ nhớ cao nhất tại thời điểm tôi chạy Tập lệnh này. bạn đang thử loại công cụ nào, chỉ cần chạy: ps af -o pmem, cmd | sort -r Nó sẽ cung cấp cho bạn ứng dụng sử dụng mem cao nhất
RahulAN

Nó không làm việc cho tôi. Tôi đoán lý do là loại đó bao gồm không gian trắng hàng đầu
korda

Bạn có nghĩa là bạn không nhận được đúng tên của quá trình ??
RahulAN

Có, beacuse ps thêm không gian vào công cụ thụt lề. Khi một quá trình có 2 chữ số sử dụng, một giá trị sử dụng một chữ số sẽ được thụt lề và sẽ bắt đầu với không gian hàng đầu. Tôi đoán thêm một cái gì đó như sed -e 's/^[[:space:]]*//'nên sửa nó. Ngoài ra tập lệnh của bạn có thêm bộ nhớ sử dụng các tiến trình với cùng một lệnh không?
korda

0

Từ trên xuống, bạn có thể sử dụng như sau:

Press SHIFT+f
Press the Letter corresponding to %MEM
Press ENTER

Bạn cũng có thể thử:

ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5

Lệnh này sẽ cung cấp cho 5 quá trình hàng đầu bằng cách sử dụng bộ nhớ.

Tôi hy vọng bạn tìm thấy thông tin này hữu ích!


0

Điều này có thể được đơn giản hóa với termsql .

ps -C chromium-browser -o pmem | termsql -1 "SELECT SUM([%MEM]) FROM tbl"

Lưu ý rằng hiện tại nó không tải lên PyPI và cũng chỉ có thể được cài đặt trên toàn hệ thống ( setup.pybị hỏng một chút), như thế sudo pip install https://github.com/tobimensch/termsql/archive/master.zip.

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.