Cách tìm các tiến trình chiếm dụng tài nguyên bằng cách sử dụng dòng lệnh Linux

Tác giả Starlink, T.M.Một 09, 2024, 01:03:48 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Đây là cách thực hiện.

  • Mọi tiến trình trên Linux đều cần đến RAM và chu kỳ CPU, điều này có thể dẫn đến sự cạnh tranh về các tài nguyên này.
  • Các công cụ như free, top và htop giúp xác định những chương trình chiếm nhiều bộ nhớ và sử dụng nhiều CPU.
  • Sử dụng các lệnh như ps và top để xác định và loại bỏ các tiến trình gây lỗi và khôi phục hiệu suất hệ thống.


Mỗi đoạn mã chạy bên trong máy tính Linux của bạn đều cần RAM và chu kỳ CPU. Một tiến trình chiếm nhiều hơn mức cần thiết sẽ làm chậm các tiến trình khác. Sau đây là cách tìm ra thủ phạm.

1. Đạo luật cân bằng các quy trình và nguồn lực

Các chu kỳ RAM và CPU là tài nguyên hữu hạn. Khi mã của chương trình được thực thi, một quy trình được hình thành. Cùng với các quy trình của hệ điều hành, có các quy trình chạy môi trường máy tính để bàn của bạn và bất kỳ lệnh hoặc ứng dụng nào bạn khởi chạy. Tất cả chúng đều yêu cầu thời gian CPU và RAM.

Linux và CPU phải quản lý việc phân bổ RAM, cân bằng và lên lịch khối lượng công việc của CPU trên các lõi và luồng để đảm bảo tất cả các tiến trình đều được chia sẻ.

Các ứng dụng được viết ra để đảm bảo chúng không chiếm dụng máy tính của bạn, nhưng đôi khi mọi thứ diễn ra không như mong đợi và các tiến trình có thể cố gắng chiếm dụng toàn bộ RAM và CPU của bạn.

Đó là lúc bạn cần có khả năng xác định quy trình đường băng.

2. Điều tra việc sử dụng RAM cao

Linux sử dụng RAM trống làm bộ nhớ đệm. Mặc dù có vẻ như toàn bộ RAM của bạn đang được sử dụng, nhưng có lẽ đó là ấn tượng sai lầm. Nếu cần, các mục sẽ được xóa khỏi bộ nhớ đệm để phân bổ RAM cho các quy trình thông thường.

2.1. Lệnh free

Lệnh free cung cấp cho bạn tổng quan nhanh về việc sử dụng bộ nhớ. Tùy chọn -h (con người) giúp đầu ra dễ đọc hơn.

Tôi chạy lệnh ba lần trong cửa sổ terminal. Trong một cửa sổ terminal khác, tôi chạy một chương trình yêu cầu lượng RAM lớn.

Mã nguồn [Chọn]
free -h

RAM trống giảm ở mức báo động. Chúng ta cần xác định quy trình hoặc các quy trình đằng sau điều đó.

2.2. Đọc /proc/meminfo

Các công cụ như top và htop lấy thông tin bộ nhớ của chúng từ tệp giả /proc/meminfo. Vì /proc/meminfo hoạt động như một tệp, chúng ta có thể sử dụng các tiện ích phổ biến như cat và less để xem nội dung của nó.

Mã nguồn [Chọn]
less /proc/meminfo

Đầu ra khác nhau tùy thuộc vào kernel bạn đang chạy và kiến trúc CPU của bạn, nhưng các trường chuẩn luôn ở đó. Đây là một cách tốt để xem màn hình hiển thị chi tiết hơn về chính xác loại bộ nhớ nào đang chiếm phần lớn RAM của bạn, nhưng nó không xác định được các quy trình riêng lẻ.

2.3. Sử dụng lệnh vmstat để tìm bộ nhớ chiếm dụng

Lệnh vmstat có thể cung cấp cho chúng ta cái nhìn tổng quan về mức sử dụng bộ nhớ ảo theo thời gian.

Để xem bốn bộ kết quả, cách nhau năm giây, với các giá trị hiển thị theo MiB, chúng ta có thể sử dụng lệnh này:

Mã nguồn [Chọn]
vmstat 5 4 -S M

2.4. Sử dụng top và htop để tìm ra những kẻ chiếm dụng bộ nhớ

Cả top và htop đều cung cấp bảng thông tin hệ thống động, với bảng quy trình hiển thị một dòng thông tin cho mỗi quy trình.


Để sắp xếp bảng tiến trình theo mức sử dụng RAM, hãy nhấn Shift+M.


Một chương trình có tên gobble đã được khởi chạy hai lần. Nó sử dụng hai phần ba RAM. Chúng tôi sẽ tắt hai tiến trình đó.

Nhấn k để bắt đầu chức năng tắt.


Ở trên cùng, chúng ta cần cung cấp ID tiến trình của tiến trình mà chúng ta muốn giết. Theo mặc định, hàm giết sẽ sử dụng ID của tiến trình ở dòng trên cùng. Vì chúng ta sắp xếp bảng theo mức sử dụng RAM, đó là ID mà chúng ta muốn sử dụng, vì vậy chúng ta chỉ cần nhấn Enter.


Chúng tôi được hỏi tín hiệu nào chúng tôi nên gửi đến tiến trình. SIGKILL là tín hiệu số chín. Chúng tôi cần nhập số chín, sau đó nhấn Enter một lần nữa.

Nếu chúng ta lặp lại quá trình đó hai lần, cả hai trường hợp của chương trình gobble đều bị chấm dứt.


Trong htop, nó rất giống. Di chuyển thanh nổi bật đến tiến trình bạn muốn giết. Nhấn k để bắt đầu tiến trình giết. Một danh sách các tín hiệu sẽ xuất hiện ở bên trái cửa sổ.


Di chuyển thanh đánh dấu nhỏ đến mục 9 SIGKILL, sau đó nhấn Enter.

2.5. Sử dụng lệnh ps để tìm những kẻ chiếm dụng bộ nhớ

Lệnh ps cung cấp cho chúng ta ID tiến trình và cũng có thể cung cấp ID tiến trình cha. Nếu bạn có nhiều tiến trình chiếm dụng bộ nhớ được khởi chạy bởi cùng một tiến trình cha, việc hủy tiến trình cha cũng sẽ hủy các tiến trình con của nó.

Chúng tôi sẽ sử dụng tùy chọn -e (mọi quy trình) và tùy chọn -o (định dạng đầu ra do người dùng xác định). Trong đầu ra của chúng tôi, chúng tôi yêu cầu:

  • pid : ID tiến trình.
  • ppid : ID tiến trình cha.
  • comm : Tên lệnh.
  • %mem : Phần trăm RAM được quy trình này sử dụng.
  • rss : Kích thước thiết lập thường trú. Đây là bộ nhớ vật lý không được hoán đổi mà một tiến trình đã sử dụng, tính bằng kilobyte. Lưu ý rằng điều này không tính bộ nhớ được dành riêng chưa thực sự được sử dụng, cũng không tính bộ nhớ ảo. Tuy nhiên, đối với tác vụ trong tay, đây là một chỉ báo hoàn toàn tốt.
  • %cpu : Đây là thời gian CPU mà tiến trình đã có cho đến thời điểm hiện tại, chia cho thời gian tiến trình đã chạy.

Chúng tôi sắp xếp theo trí nhớ. Dấu trừ có nghĩa là sắp xếp ngược. Chúng tôi có thể lấy được 10 lỗi tệ nhất bằng cách đưa kết quả qua đầu.

Mã nguồn [Chọn]
ps -e -o pid,ppid,comm,%mem,rss,%cpu --sort=-%mem | head -10

3. Điều tra việc sử dụng CPU cao

Quy trình theo dõi CPU hogs rất giống với quy trình chúng ta đã thảo luận về memory hogs. Chúng ta cần xác định quy trình hoặc các quy trình vi phạm và lấy ID quy trình của chúng.

3.1. Sử dụng top và htop để tìm ra CPU Hogs

Chúng ta có thể sử dụng top và htop gần như chính xác như chúng ta đã làm để theo dõi các tiến trình ngốn bộ nhớ. Theo mặc định, top và htop sắp xếp các bảng tiến trình của chúng theo cột %CPU. Nếu bạn đã thay đổi cột sắp xếp, bạn có thể nhấn Shift+P (cho bộ xử lý) để khôi phục việc sắp xếp theo %CPU.


Có một tiến trình được gọi là drain hogging chiếm gần như toàn bộ thời gian CPU cho chính nó. Sau khi xác định được thủ phạm, chúng ta có thể nhấn k để gọi hàm kill process.

3.2. Sử dụng lệnh mpstat để theo dõi việc sử dụng CPU

Bạn cần cẩn thận khi bạn đang giết các tiến trình. Một số, đặc biệt là các tiến trình hệ thống, nên được để nguyên. Lệnh mpstat cung cấp cho bạn ảnh chụp nhanh về mức sử dụng CPU cho các tiến trình người dùng và hệ thống.

Bạn sẽ cần cài đặt mpstat trên Fedora và Manjaro, nhưng nó đã được cài đặt trên PC Ubuntu của chúng tôi.

Trên Fedora, bạn cần nhập:

Mã nguồn [Chọn]
sudo dnf install sysstat
Trên Manjaro, lệnh là:

Mã nguồn [Chọn]
sudo pacman -S sysstat
Chúng tôi sẽ sử dụng tùy chọn -P all (tất cả bộ xử lý) và yêu cầu báo cáo sau mỗi hai giây, tổng cộng là năm báo cáo.

Mã nguồn [Chọn]
mpstat -P all 2 5

Chúng ta có thể thấy rằng tải trên CPU đến từ phía người dùng, không phải phía hệ thống. Hàng thứ sáu là trung bình của năm báo cáo mà chúng tôi yêu cầu.

3.3. Sử dụng ps để tìm CPU Hogs

Chúng ta cũng có thể sử dụng ps để tìm kiếm các tiến trình sử dụng nhiều CPU. Với một chút tinh chỉnh đối với lệnh trước đó, chúng ta có thể sắp xếp theo CPU.

Mã nguồn [Chọn]
ps -e -o pid,ppid,comm,%mem,rss,%cpu --sort=-%cpu | head -10

Mục nhập về ps là một cờ sai, chúng ta biết rằng nó chỉ chạy trong một phần giây. Ở dòng thứ hai, chúng ta có thể thấy ID tiến trình của tiến trình đang độc chiếm CPU. Với thông tin này, chúng ta có thể sử dụng top hoặc htop, hoặc lệnh kill, để chấm dứt tiến trình.

4. Một chút việc nội trợ

Hầu hết thời gian, máy tính Linux của bạn sẽ chạy tốt, với tất cả các quy trình hoạt động trong phạm vi dung sai chấp nhận được. Nếu bạn nhận thấy máy tính của mình trở nên chậm chạp, hãy kiểm tra bằng các công cụ này. Bạn có thể thấy một bộ nhớ hoặc CPU ngốn quá nhiều tài nguyên.