Có một lời giải thích chi tiết rất hay ở đây: https://bloss.kde.org/2005/09/15/measuring-memory-usage
Nhưng về cơ bản: Bạn phải thực sự đào sâu và hiểu cách ứng dụng được thiết lập.
Vì vậy, ví dụ, nhìn vào mysql:
PID PPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6004 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:40.33 mysqld
16115 16085 composit 20 0 37900 27m 2908 S 0 0.2 0:00.37 mysqld
16116 16115 composit 20 0 37900 27m 2908 S 0 0.2 2:07.34 mysqld
16117 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:00.00 mysqld
16118 16116 composit 20 0 37900 27m 2908 S 0 0.2 3:19.79 mysqld
16119 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:00.01 mysqld
16120 16116 composit 20 0 37900 27m 2908 S 0 0.2 5:31.09 mysqld
16121 16116 composit 20 0 37900 27m 2908 S 0 0.2 14:19.53 mysqld
16122 16116 composit 20 0 37900 27m 2908 S 0 0.2 36:13.67 mysqld
16123 16116 composit 20 0 37900 27m 2908 S 0 0.2 30:30.64 mysqld
16124 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:00.15 mysqld
16493 16116 composit 20 0 37900 27m 2908 S 0 0.2 0:00.00 mysqld
Tổng bộ nhớ được sử dụng là khoảng 25 MB (Lấy 27 MB RES và trừ đi chia sẻ (SHR))
Tôi đã xác thực điều này bằng cách kiểm tra tổng mức sử dụng bộ nhớ (miễn phí -m, + / bộ đệm / bộ đệm) trước và sau khi phát hành "killall mysqld". Sau khi giết tất cả các quy trình mysqld, mức sử dụng bộ nhớ giảm 25 MB theo "free -m".
Nếu bạn thấy rằng mỗi quy trình có các cột VIRT, RES và SHR giống hệt nhau, thì chúng có thể chỉ là các luồng của cùng một quy trình. (Các thư viện Linux cũ hơn đã xử lý luồng bằng cách sinh ra nhiều tiến trình thực sự chiếm cùng một bộ nhớ)
Nếu chúng khác nhau, bạn có thể ước tính nó bằng cách thực hiện SUM của (RES - SHR). Nhưng điều đó chỉ hoạt động nếu các quy trình trong thực tế là các quy trình riêng biệt và không chỉ là các luồng của cùng một quy trình. Nhìn vào PPID (ID quy trình phụ huynh) cũng có ích. Nếu tất cả họ có cùng cha mẹ, họ có thể chỉ là chủ đề (Mặc dù không nhất thiết).
Thật không may, không có cách nào thực sự dễ dàng để trả lời điều này trong Linux. Cách dễ dàng duy nhất là kiểm tra "miễn phí" ngay lập tức trước khi kết thúc quá trình và kiểm tra lại ngay sau đó. nhìn vào dòng "- / + bộ đệm / bộ đệm:" và xem mức độ sử dụng bộ nhớ giảm và điều đó sẽ cho bạn biết nó đã sử dụng bao nhiêu.