Trong triết lý của Android (và Linux), RAM miễn phí bị lãng phí RAM. Hệ điều hành sẽ cố gắng sử dụng tất cả dung lượng RAM có sẵn để tăng thông lượng của nó. Theo thiết kế, Android có xu hướng giữ các hoạt động trong RAM sau khi người dùng thoát chúng. Bằng cách này, nó có thể tăng tốc mở lại chúng nếu cần. Hành vi này mặc dù có thể dễ dàng có được hệ thống trong trạng thái bộ nhớ trống. Hôm nay, chúng ta sẽ thấy làm thế nào chúng ta có thể điều chỉnh kẻ giết bộ nhớ RAM Android theo yêu cầu của chúng ta.
Low Memory Killer hoạt động như thế nào?
Android quản lý trạng thái bộ nhớ thấp bằng mô-đun Kernel được gọi là Low Memory Killer (LMK). LMK là một kẻ giết người quá trình, được thiết kế để hợp tác với Khung Android. Mỗi quy trình được gán một giá trị đặc biệt bởi Framework khi bắt đầu, giá trị oom_adj (oom_score_adj trên các nhân mới hơn). Giá trị này xác định tầm quan trọng của quá trình đối với hệ thống (mức độ ưu tiên của nó) và do đó nó có thể bị giết dễ dàng như thế nào. Các giá trị khác nhau trong khoảng từ -17 đến +15 (0 đến 1000 cho oom_score_adj). Các giá trị cao hơn được trao cho các quá trình ít quan trọng hơn bị giết trước. Hơn nữa, LMK định nghĩa 5 loại khác nhau cho các quy trình, mỗi loại chứa các quy trình có oom_adj / oom_score_adj trong một phạm vi giá trị cụ thể:
- Ứng dụng tiền cảnh Ứng
dụng hiện đang hiển thị trên màn hình và đang chạy. - Ứng dụng nền
dụng có thể nhìn thấy Các ứng dụng hiện có thể không hiển thị trên màn hình nhưng vẫn đang chạy. Chúng có thể được ẩn đằng sau lớp phủ hoặc có một cửa sổ trong suốt. - Dịch vụ máy chủ thứ cấp chạy trong nền và cần thiết để Ứng dụng hoạt động bình thường. Danh mục này bao gồm Dịch vụ Google Play chẳng hạn.
- Các ứng dụng ẩn các ứng
dụng được ẩn khỏi người dùng, nhưng đang chạy trong nền. - Nhà cung cấp nội dung
Đây là các dịch vụ cung cấp nội dung cho hệ thống như nhà cung cấp danh bạ, nhà cung cấp vị trí, v.v. - Các ứng dụng trống
Danh mục này chứa các Ứng dụng mà người dùng đã thoát, nhưng Android vẫn giữ RAM. Chúng không ăn cắp bất kỳ thời gian CPU hoặc gây ra bất kỳ tiêu hao năng lượng.
Danh mục Ứng dụng trống chứa các quy trình có giá trị oom_adj/oom_score_adj cao nhất trong khi danh mục Ứng dụng tiền cảnh Ứng dụng có giá trị thấp nhất. Ngoài ra, mỗi loại trên có ngưỡng bộ nhớ riêng và khi RAM miễn phí giảm xuống dưới ngưỡng này, LMK sẽ bắt đầu tiêu diệt các quy trình bên trong danh mục này, bắt đầu bằng các quy trình có mức độ ưu tiên thấp hơn.
Trình quản lý hoạt động Android chịu trách nhiệm gán các giá trị oom_adj/oom_score_adj cho mỗi quy trình trong thời gian chạy. Hơn nữa, hệ thống gán các ngưỡng bộ nhớ cho từng loại quy trình khi khởi động. Tuy nhiên, ngưỡng danh mục có thể được thay đổi trực tiếp thông qua kernel SysFS sau khi khởi động. Điều này tạo chỗ cho việc định cấu hình Hệ thống con quản lý bộ nhớ Android theo nhu cầu cá nhân.
Cách tinh chỉnh Android Low Memory Killer (LMK)
Điều chỉnh các thông số LMK sẽ có tác động lớn hơn đối với các thiết bị cấp thấp hơn có RAM 1 GB trở xuống do các thiết bị này thực sự căng thẳng với đa nhiệm trên Android. Để thay đổi thông số LMK, thiết bị cần phải có hỗ trợ root.
Việc thay đổi các tham số LMK có thể được thực hiện thông qua bảng điều khiển bằng cách sửa đổi trực tiếp mục nhập SysFS / sys / module / lowmemorykiller / tham số / minfree . Điều này cần dữ liệu được cung cấp ở dạng x1, x2, x3, x4, x5, x6, trong đó mỗi (x) là ngưỡng bộ nhớ và x1 đại diện cho Ứng dụng tiền cảnh, Ứng dụng có thể nhìn thấy x2, Máy chủ phụ x3, Ứng dụng ẩn x4, x5 Nhà cung cấp nội dung và x6 Ứng dụng trống. Vì vậy, đăng ký một bộ ngưỡng mới cho LMK cũng đơn giản như nhập Ứng dụng đầu cuối và viết các lệnh sau:
su
echo x1, x2, x3, x4, x5, x6> / sys / module / lowmemorykiller / tham số / minfree
thay thế mỗi x trong lệnh cuối cùng bằng các giá trị cần thiết. LMK cần các tham số được đưa ra dưới dạng các trang bộ nhớ. Trên Android, một trang bộ nhớ có kích thước 4 KB. Vì vậy, để đặt ngưỡng bộ nhớ là 50 MB cho một danh mục, giá trị (x) được gán cho nó phải là 12800 [(50 * 1024) / 4 = 12800].
May mắn thay, việc thay đổi các tham số LMK cũng có thể được thực hiện khá dễ dàng bằng Ứng dụng điều chỉnh kernel hỗ trợ thay đổi các tham số LMK, như Ứng dụng Kernel Adiutor mã nguồn mở :
Mẹo về cấu hình tham số LMK
- Việc gán các giá trị rất cao cho các danh mục Tiền cảnh và Hiển thị có thể làm cho hệ thống không ổn định.
- Không có nguy cơ giết chết các quy trình hệ thống quan trọng bằng bất kỳ cấu hình nào. Các quy trình không được giết sẽ được cung cấp một giá trị oomj_adj đặc biệt, đăng ký chúng là không thể giết được LMK.
- Các giá trị được gán cho LMK bị mất khi khởi động lại, vì vậy chúng cần được chỉ định lại mỗi khi thiết bị khởi động. Một số Ứng dụng điều chỉnh kernel có thể tự động áp dụng lại các thay đổi khi khởi động.
- Hầu hết các bộ điều biến Android chỉ thay đổi ngưỡng của danh mục Ứng dụng trống và Ứng dụng ẩn, vì các mục này có ảnh hưởng lớn nhất đến khả năng đáp ứng và đa nhiệm của thiết bị.
- Ngưỡng bộ nhớ phải được đăng ký theo thứ tự tăng dần từ Ứng dụng tiền cảnh đến danh mục Ứng dụng trống. Vì vậy, ngưỡng bộ nhớ của Ứng dụng tiền cảnh <Ứng dụng hiển thị <Máy chủ hệ thống < Ứng dụng ẩn < Nhà cung cấp nội dung < Ứng dụng trống.
- Tìm cấu hình phù hợp cho LMK là một quy trình thử và sai. Mỗi người dùng có nhu cầu sử dụng khác nhau và nên cấu hình LMK theo họ. Ví dụ, một game thủ không nên tăng ngưỡng bộ nhớ của Ứng dụng tiền cảnh và Ứng dụng có thể nhìn thấy nhiều. Các trò chơi là các ứng dụng đòi hỏi bộ nhớ và sẽ dễ dàng bị giết (ngay cả khi đang chơi) trong tình huống này. Thay vào đó, một game thủ có thể đặt ngưỡng Tiền cảnh lên khoảng 10 MB, đảm bảo rằng Ứng dụng trò chơi sẽ không bị giết dễ dàng như vậy.
- Mặc dù một số cấu hình phổ quát được liệt kê dưới đây, có sự thay đổi lớn về hiệu quả của chúng trên các thiết bị khác nhau.
- Để có được kết quả thực sự từ bất kỳ tinh chỉnh nào trên LMK, bất kỳ Kẻ giết nhiệm vụ nào khác cũng nên bị vô hiệu hóa trước, vì chúng can thiệp vào nó. Về cơ bản, LMK là một giải pháp dựa trên kernel, thực hiện chính xác công việc tương tự như Ứng dụng Killer Killer (và có thể thay thế chúng hoàn toàn khi được định cấu hình chính xác) mà không cần thêm bất kỳ chi phí nào.
Ví dụ về hồ sơ LMK phổ quát
Vì cấu hình LMK được coi là một tập hợp các ngưỡng bộ nhớ cho từng loại quy trình của LMK. Sau đây là danh sách một số cấu hình, được biết là có hiệu quả trên hầu hết các thiết bị. Chúng nên được coi là điểm khởi đầu để điều chỉnh nhiều hơn. Tất cả các giá trị được đưa ra trong các trang bộ nhớ.
Aggressive
Ứng dụng tiền cảnh: 6400
Ứng dụng có thể nhìn thấy: 7680
Máy chủ thứ cấp: 11520
Ứng dụng ẩn: 25600
Nhà cung cấp nội dung: 35840
Ứng dụng trống: 38400Cấu hình này sẽ tích cực bắt đầu quá trình tiêu diệt ở 150 MB RAM miễn phí. Với 100 MB, nó sẽ bắt đầu tiêu diệt Ứng dụng ẩn.
Chơi game nặng
Ứng dụng tiền cảnh: 2560
Ứng dụng có thể nhìn thấy: 5120
Máy chủ thứ cấp: 11520
Ứng dụng ẩn: 25600
Nhà cung cấp nội dung: 35840
Ứng dụng trống: 38400Hồ sơ này hoạt động giống như Aggressive Profile, ngoại trừ các danh mục Ứng dụng tiền cảnh và Ứng dụng có thể nhìn thấy. Nó đảm bảo rằng, nếu một trò chơi sử dụng một lượng lớn bộ nhớ, nó sẽ không bị LMK giết khi nó đang chạy trên màn hình.
Ánh sáng
Ứng dụng tiền cảnh: 2560
Ứng dụng có thể nhìn thấy: 5120
Máy chủ thứ cấp: 7680
Ứng dụng ẩn: 8960
Nhà cung cấp nội dung: 10240
Ứng dụng trống: 12800Cấu hình nhẹ nên lý tưởng cho người dùng không thực hiện đa nhiệm nặng. Trên các thiết bị có số lượng ứng dụng được cài đặt ít, cấu hình này sẽ kích hoạt LMK ít thường xuyên hơn, tiết kiệm một số chu kỳ CPU và giảm hao pin.