
Việc sử dụng bộ nhớ Linux có thể khó hiểu và khó hiểu. Với smem
thật dễ dàng để tìm ra bộ nhớ mà quy trình đang sử dụng và quy trình nào đang sử dụng nhiều nhất.
Sử dụng bộ nhớ
Linux cung cấp cho bạn nhiều cách để kiểm tra những gì đang xảy ra với RAM máy tính của bạn. Vấn đề là, quản lý bộ nhớ là một thách thức phức tạp đối với hệ điều hành của bạn. Nó phải kết hợp RAM vật lý, RAM ảo dưới dạng không gian hoán đổi và nhu cầu của các loại quy trình khác nhau đang chạy cùng một lúc.
Các quá trình sử dụng RAM khi chúng tự tải vào bộ nhớ. Sau đó, chúng yêu cầu thêm RAM để chúng có không gian để thực hiện bất kỳ tác vụ nào mà chúng được thiết kế để làm. Một số quy trình hầu như không ảnh hưởng đến RAM, những quy trình khác lại rất ngốn bộ nhớ.
Hạt nhân và phần còn lại của hệ điều hành, môi trường máy tính để bàn của bạn và mọi ứng dụng hoặc phiên dòng lệnh mà bạn chạy đều chiếm một phần của dung lượng RAM hữu hạn được cài đặt trong máy tính của bạn. Một số quy trình sinh ra các quy trình khác. Một số quy trình chia sẻ RAM với các quy trình khác.
Cố gắng giải mã tất cả những điều này và đưa ra câu trả lời đơn giản cho câu hỏi “Chương trình hoặc quy trình này đang sử dụng bao nhiêu RAM?” có thể là một thách thức đáng ngạc nhiên. Mức độ chi tiết là rất tốt và có vị trí của nó, nhưng không kém, thông tin quá mức cần thiết có thể là một trở ngại.
Ví dụ, sử dụng cat
để xem qua hệ thống tệp giả / proc / meminfo đã trả về 50 dòng đầu ra trên máy được sử dụng để nghiên cứu bài viết này. Bạn bắt đầu từ đâu?
cat /proc/meminfo
Và một số tiện ích Linux đưa ra các câu trả lời khác nhau. Trên máy thử nghiệm của chúng tôi, chúng tôi có một ví dụ về less
đang chạy, có ID quy trình là 2183.
Chúng ta có thể sử dụng pmap
tiện ích với -x
(mở rộng) để có được hình ảnh đầy đủ về việc sử dụng bộ nhớ của một tiến trình. Chúng tôi sẽ sử dụng nó với ID quy trình của phiên bản của chúng tôi less
:
pmap -x 2183
Ở cuối đầu ra, chúng tôi nhận được tổng số cho Kích thước bộ định cư, là dung lượng RAM chính đang được sử dụng.
Sau đó chúng tôi sử dụng ps
tiện ích với -o
(đầu ra) tùy chọn, đã chọn RSS
và chuyển cho nó ID tiến trình của cùng một phiên bản của less
:
ps -o rss 2183
Chúng tôi nhận được một kết quả khác nhau. Đây là một quyết định thiết kế về một phần của ps
các tác giả. Đây là từ ps
man
trang:
Các tác giả của các tiện ích khác có quan điểm riêng của họ về cách đo mức sử dụng RAM.
RSS, USS và PSS
Kích thước bộ định cư (RSS) là dung lượng RAM được phân bổ cho một quá trình, không bao gồm không gian hoán đổi, nhưng bao gồm bất kỳ RAM nào được yêu cầu bởi các thư viện chia sẻ mà quá trình đó đang sử dụng.
RSS hầu như luôn báo cáo quá mức sử dụng RAM. Nếu hai hoặc nhiều quá trình sử dụng một hoặc nhiều thư viện được chia sẻ, RSS sẽ chỉ cần thêm mức sử dụng RAM của mỗi thư viện vào số lượng RAM sử dụng cho mỗi quá trình đó. Cũng như sự không chính xác, có một điều trớ trêu nhất định đối với điều này. Thư viện được chia sẻ có nghĩa là mỗi tiến trình không cần tải phiên bản thư viện riêng của nó. Nếu thư viện đã có trong bộ nhớ, nó sẽ chia sẻ cái đó — và giảm dung lượng RAM.
Kích thước Tập hợp Tỷ lệ cố gắng giải quyết vấn đề này bằng cách chia dung lượng bộ nhớ được chia sẻ giữa các quá trình đang chia sẻ nó. Nếu có bốn quá trình chia sẻ một số bộ nhớ, PSS báo cáo rằng 25% RAM được chia sẻ được sử dụng bởi mỗi quá trình đó. Đây là một con số gần đúng nhưng nó gần giống với những gì đang diễn ra hơn là bức tranh mà RSS vẽ ra.
Kích thước bộ duy nhất là dung lượng RAM đang được sử dụng riêng bởi một quy trình cho dù nó được sử dụng trực tiếp bởi quy trình hay được sử dụng bởi các thư viện chỉ được quy trình sử dụng. Một lần nữa, nó bỏ qua không gian hoán đổi. Nó chỉ quan tâm đến RAM vật lý, chính hãng.
USS và PSS là các thuật ngữ và khái niệm được đề xuất bởi Matt Mackall, tác giả của smem
.
Tiện ích smem
Các smem
báo cáo tiện ích về bộ nhớ được sử dụng bởi các quy trình, người dùng, ánh xạ hoặc trên toàn hệ thống. Trên tất cả các bản phân phối mà chúng tôi đã thử nghiệm, nó yêu cầu cài đặt. Để cài đặt nó trên Ubuntu, hãy sử dụng lệnh sau:
sudo apt install smem
Để cài đặt smem
trên Fedora, bạn cần nhập:
sudo dnf install smem
Để cài đặt smem
về việc sử dụng Manjaro:
sudo pacman -Sy smem
Sử dụng smem
không có tùy chọn cung cấp cho bạn danh sách các quy trình đang sử dụng RAM.
smem
Một bảng thông tin được hiển thị trong cửa sổ đầu cuối.
Các cột là:
- PID: ID tiến trình của tiến trình đang sử dụng bộ nhớ.
- Người dùng: Tên người dùng của người dùng sở hữu quy trình.
- Yêu cầu: Dòng lệnh khởi chạy tiến trình.
- Tráo đổi: Dung lượng hoán đổi mà quá trình đang sử dụng là bao nhiêu.
- USS: Kích thước bộ duy nhất.
- PSS: Kích thước tập hợp theo tỷ lệ.
- RSS: Kích thước tập hợp thường trú.
Để xem các kích thước được biểu thị dưới dạng tỷ lệ phần trăm, hãy sử dụng -p
(phần trăm) tùy chọn.
smem -p
Kích thước tính bằng byte đã được thay thế bằng tỷ lệ phần trăm.
Để xem các số liệu được hiển thị ở dạng thân thiện với con người hơn, hãy sử dụng -k
(viết tắt) tùy chọn. Điều này thu nhỏ các số liệu và thêm các chỉ số đơn vị.
smem -k
Thay vì byte thô, kích thước được hiển thị bằng megabyte, gigabyte, v.v.
Để thêm một dòng tổng, hãy sử dụng -t
(tổng số) tùy chọn.
smem -k -t
Dòng cuối cùng của kết quả hiển thị tổng số cho mỗi cột.
Tinh chỉnh báo cáo
Bạn có thể hỏi smem
để báo cáo về việc sử dụng bộ nhớ của người dùng, ánh xạ (thư viện) hoặc trên toàn hệ thống. Để lọc đầu ra theo người dùng, hãy sử dụng -u
(người dùng) tùy chọn. Lưu ý rằng nếu bạn muốn xem nhiều hơn chỉ sử dụng của riêng mình, bạn sẽ cần chạy smem
với sudo
.
smem -u
sudo smem -u
Như bạn có thể thấy, đầu ra bị bẻ cong đối với tên người dùng dài hơn tám ký tự.
Để xem việc sử dụng được ánh xạ tới các thư viện đang được sử dụng, bất kể quy trình nào đang sử dụng thư viện cũng như người dùng nào sở hữu các quy trình đó, hãy sử dụng -m
(ánh xạ) tùy chọn.
smem -m -k -t
Chúng tôi cũng yêu cầu các giá trị mà con người có thể đọc được và tổng số.
Để xem mức sử dụng bộ nhớ trên toàn hệ thống, hãy sử dụng -w
(toàn hệ thống) tùy chọn.
smem -w -k -t
Báo cáo về một chương trình đơn lẻ
Với một chút phép thuật dòng lệnh, chúng ta có thể báo cáo về một chương trình duy nhất và tất cả các quy trình con của nó. Chúng tôi sẽ chuyển đầu ra từ smem
vào trong tail
và hỏi tail
để chỉ hiển thị dòng cuối cùng. Chúng tôi sẽ nói smem
để sử dụng các giá trị mà con người có thể đọc được và cung cấp tổng số. Tổng số sẽ là dòng cuối cùng, và đó là dòng tail
sẽ hiển thị cho chúng tôi.
Chúng tôi sẽ sử dụng -c
(cột) tùy chọn với smem
và cho nó biết những cột nào chúng tôi muốn được đưa vào đầu ra của chúng tôi. Chúng tôi sẽ hạn chế điều này trong cột Kích thước Tập hợp Tỷ lệ. Các -P
(bộ lọc quá trình) tùy chọn cho phép chúng tôi cung cấp một chuỗi tìm kiếm smem
. Chỉ các dòng đầu ra phù hợp mới được đưa vào.
smem -c pss -P firefox -k -t | tail -n 1
Đó là một cách nhanh chóng và gọn gàng để tìm ra mức tiêu thụ RAM của một chương trình và các quy trình con của nó.
Tạo đồ thị
Bạn có thể vượt qua --pie
hoặc là --bar
các tùy chọn để có smem
tạo đồ thị. Phải nói rằng với quá nhiều danh mục, các biểu đồ nhanh chóng trở nên khó hiểu, nhưng chúng có thể hữu ích để có một cái nhìn tổng quan trực quan nhanh chóng.
Định dạng lệnh là:
smem --pie name -s uss
Biểu đồ hình tròn xuất hiện trong cửa sổ trình xem của chính nó.
Để xem các âm mưu khác, hãy sử dụng pss
hoặc là rss
thay vì uss
. Để xem biểu đồ thanh, hãy sử dụng --bar
thay vì --pie
.
Để điều này hoạt động, bạn sẽ cần phải cài đặt Python, cùng với matplotlib
thư viện. Chúng đã được cài đặt trên các bản phân phối Ubuntu, Fedora và Manjaro mà chúng tôi đã thử nghiệm.
Những điều tốt đẹp đến trong gói nhỏ
Các smem
tiện ích có thêm một vài thủ thuật và bạn được khuyến khích xem man
trang. Tiết mục chính của nó là những gì chúng tôi đã phác thảo ở đây và đó là một công cụ nhỏ tuyệt vời cần có trong hộp công cụ CLI của bạn.