Cách kiểm tra mức sử dụng bộ nhớ trên mỗi quá trình trên Linux

How Check Memory Usage Per Process Linux



Ngày nay, một máy tính có thể chạy nhiều chương trình cùng một lúc. CPU không có vấn đề gì khi xử lý tất cả các chương trình này vì CPU có nhiều lõi để xử lý đa tác vụ.

Mỗi chương trình này chạy dưới dạng một hoặc nhiều quy trình. Mọi tiến trình đều phân bổ một số dung lượng RAM hoặc bộ nhớ cho chính nó. Nó là điều cần thiết để quá trình hoạt động chính xác. Nếu một quy trình không phân bổ đủ RAM hoặc bộ nhớ, thì quy trình đó sẽ không thể được tạo và chương trình sẽ không thể bắt đầu.







Vì vậy, một trong những tác vụ cơ bản bạn thực hiện trên máy tính của mình là kiểm tra xem mỗi quá trình đang sử dụng bao nhiêu bộ nhớ hoặc RAM (Bộ nhớ truy cập ngẫu nhiên). Bởi vì, RAM hoặc bộ nhớ của máy tính của bạn có hạn.



Hãy tưởng tượng một trường hợp, trong đó bạn muốn chạy một số chương trình nhưng chương trình đó không thành công vì bạn không có đủ bộ nhớ. Có thể một số quy trình đang sử dụng nhiều bộ nhớ mà bạn không cần ngay bây giờ. Bạn có thể hủy hoặc dừng các quá trình này để giải phóng RAM hoặc bộ nhớ, để có thể khởi động các chương trình quan trọng của mình.



Trong bài viết này, tôi sẽ chỉ cho bạn cách kiểm tra mức sử dụng bộ nhớ của từng tiến trình đang chạy trên máy Linux của bạn. Tôi sẽ sử dụng Debian 9 Stretch cho tất cả các trình diễn trong bài viết này. Nhưng nó sẽ hoạt động trên bất kỳ bản phân phối Linux hiện đại nào. Bắt đầu nào.





Bạn có thể dùng ps lệnh để kiểm tra việc sử dụng bộ nhớ của tất cả các tiến trình trên Linux. Có một vấn đề với thủ tục này. ps không thực sự cho bạn biết một quá trình sử dụng bao nhiêu bộ nhớ ở định dạng KB hoặc MB, nhưng nó sẽ cho bạn biết lượng bộ nhớ đang được sử dụng theo phần trăm.

Bạn có thể kiểm tra mức sử dụng bộ nhớ (tính theo phần trăm) của tất cả quá trình đang chạy trên hệ điều hành Linux của mình bằng lệnh sau:



$ps -hoặcpid, người dùng,%mem,chỉ huycây rìu| loại -NS -k3 -NS

Như bạn có thể thấy, tất cả các quá trình sử dụng bộ nhớ theo tỷ lệ phần trăm được liệt kê theo thứ tự giảm dần (Các quá trình sử dụng phần lớn bộ nhớ được liệt kê đầu tiên).

Kiểm tra mức sử dụng bộ nhớ của các quá trình với pmap:

Bạn có thể kiểm tra bộ nhớ của một quy trình hoặc một tập hợp các quy trình ở định dạng con người có thể đọc được (tính bằng KB hoặc kilobyte) với pmap chỉ huy. Tất cả những gì bạn cần là PID của các quy trình bạn muốn kiểm tra việc sử dụng bộ nhớ.

Giả sử, bạn muốn kiểm tra lượng bộ nhớ mà quá trình với PID 917 đang sử dụng. Để làm điều đó, hãy chạy pmap như sau:

$sudopmap917

Như bạn có thể thấy, tổng bộ nhớ được sử dụng bởi tiến trình 917 là 516104 KB hoặc kilobyte. Bạn cũng có thể xem dung lượng bộ nhớ mà các thư viện và các tệp khác cần thiết để chạy quá trình với PID 917 cũng đang sử dụng tại đây.

Nếu bạn không quan tâm đến dung lượng bộ nhớ mà các thư viện hoặc các tệp phụ thuộc khác đang sử dụng, thì hãy chạy pmap như sau:

$sudopmap917 | đuôi -n 1

Như bạn có thể thấy, chỉ có tổng bộ nhớ được sử dụng bởi quá trình với PID 917 được in trên màn hình.

Nếu muốn, bạn có thể lọc thêm điều này với awk và chỉ nhận kích thước tính bằng KB hoặc kilobyte. Để làm điều đó, hãy chạy pmap như sau:

$sudopmap917 | đuôi -n 1 | awk '/ [0-9] K / {in $ 2}'

Như bạn có thể thấy, chỉ việc sử dụng bộ nhớ tính bằng KB hoặc kilobyte mới được in.

Giờ đây, bạn cũng có thể liệt kê lượng bộ nhớ được sử dụng bởi nhiều quy trình bằng cách sử dụng PID của chúng với pmap như sau:

$sudopmap917 531 | nắm chặttoàn bộ

GHI CHÚ: Ở đây 917 và 531 là ID quy trình hoặc PID. Bạn có thể đặt bao nhiêu PID tùy thích theo cách này.

Sử dụng pmap để liệt kê mức sử dụng bộ nhớ của tất cả các quá trình tính bằng Kilobyte:

Trong phần này, tôi sẽ chỉ cho bạn cách viết tập lệnh shell của riêng bạn để liệt kê việc sử dụng bộ nhớ của tất cả các tiến trình đang chạy trên hệ điều hành Linux của bạn ở định dạng con người có thể đọc được (kilobyte hoặc KB).

Đầu tiên hãy tạo một tệp mới sysmon trong thư mục làm việc hiện tại của bạn bằng lệnh sau:

$chạm vàosysmon

Bây giờ làm cho tệp thực thi bằng lệnh sau:

$chmod+ x sysmon

sysmon là tập lệnh shell sẽ hiển thị tất cả các quy trình đang chạy PID , CHỦ NHÂN , KỈ NIỆM (tính bằng KB theo thứ tự giảm dần) và CHỈ HUY . Hãy bắt đầu.

Mở sysmon kịch bản với trình soạn thảo văn bản yêu thích của bạn, tôi sẽ sử dụng Kate .

Bây giờ, lệnh đầu tiên tôi sẽ chạy sẽ cung cấp cho tôi PID , CHỦ NHÂNCHỈ HUY của tất cả các quy trình đang chạy được phân tách bằng ký hiệu dấu hai chấm (:) và lưu trữ nó trong RAWIN Biến đổi. Sau đó lặp qua đầu ra và in nó trên màn hình.

Như bạn có thể thấy, tôi đang nhận được đầu ra chính xác.

Bây giờ đã đến lúc xử lý từng dòng, lưu trữ thông tin được phân tách bằng dấu hai chấm trong các biến riêng biệt. Đó là những gì tôi đã làm ở dòng 7, 8 và 9.

Như bạn thấy, tôi có thể in PID , CHỦ NHÂNCHỈ HUY ở định dạng của riêng tôi bây giờ.

Bây giờ đã đến lúc tìm nạp mức sử dụng bộ nhớ của từng PID. Dòng 10 thực hiện điều đó.

Như bạn có thể thấy, mọi thứ đang hoạt động hoàn hảo. Bây giờ tôi cũng có thể in mức sử dụng bộ nhớ của mỗi quá trình theo kilobyte (KB).

Bây giờ tất cả những gì còn lại cần làm là định dạng đầu ra cho đẹp. Tôi thích định dạng bảng hơn. Dòng 5 in tiêu đề của mỗi cột trong bảng.

Cuối cùng, tôi đã in PID , CHỦ NHÂN , KỈ NIỆM (tính bằng KB) và CHỈ HUY của mỗi quy trình ở định dạng bảng sử dụng dòng 14.

Như bạn có thể thấy, nó đang hoạt động khá tốt. Tuy nhiên, có một chút vấn đề, các quy trình không được sắp xếp chính xác theo thứ tự giảm dần theo mức sử dụng bộ nhớ.

Để khắc phục điều đó, tôi đã xóa sắp xếp -bnr -k3 từ dòng 3 và gói mọi thứ trong một hàm shell sysmon_main () . Sau đó, bỏ công việc sắp xếp cho loại chỉ huy.

Tập lệnh shell cuối cùng trông giống như sau:

Như bạn có thể thấy, nó hoạt động rất tốt.

Bây giờ bạn có thể di chuyển nó đến một nơi nào đó như / usr / bin và thực hiện nó giống như các lệnh khác như sau:

$sudo mv -vsysmon/usr/

Đang thực thi sysmon :

Cảm ơn đã đọc bài viết này.