/etc/sysctl.conf
thường được phân tích cú pháp bởi Systemd trong Ubuntu khi khởi động (tôi tin qua systemd-sysctl.service
). kể từ WSL không sử dụng Systemd, nó không được "xử lý" khi bạn tắt và khởi động lại hệ thống con WSL. Điều này tương tự như những gì tôi mô tả trong câu trả lời của mình cho câu hỏi Stack Overflow này (không cần phải đọc nó bây giờ, nhưng nó có nhiều chi tiết hơn nếu bạn cần).
Giải pháp (cũng như tôi mô tả trong câu trả lời cụ thể đó) là sử dụng kernelCommandLine
cài đặt cho kernel của WSL2:
Trong Windows của bạn %Thông tin người dùng%
thư mục (thường là C:\Users\<tên người dùng>
) tạo hoặc chỉnh sửa tệp .wslconfig
với những điều sau đây:
[wsl2]
kernelCommandLine = "sysctl.vm.swappiness=10"
Thoát Ubuntu trên WSL (và bất kỳ phiên bản WSL nào khác)
phát hành một wsl --shutdown
từ PowerShell, CMD hoặc Menu Bắt đầu
Khởi động lại
Bạn nên tìm rằng vm.swappiness
hiện vẫn được duy trì. Lưu ý rằng vì tất cả các phiên WSL2 chia sẻ cùng một kernel nên tùy chọn này sẽ có hiệu lực trên toàn cầu. Đây là trường hợp bất kể bạn thiết lập tính hoán đổi như thế nào (hoặc bất kỳ tham số kernel nào).
Cũng lưu ý rằng điều này đã được thử nghiệm từ ít nhất là Windows 10 build 18363 bởi OP của câu hỏi Stack Overflow đó.
Các lựa chọn thay thế khác
tôi tin rằng .wslconfig
tùy chọn có lẽ là tốt nhất cho việc này, nhưng bạn cũng có thể:
- Sử dụng
/etc/wsl.conf
với [khởi động]
phần trên Windows 11 để buộc hệ thống
để chạy trên mỗi lần khởi động.
- Sử dụng hồ sơ người dùng của bạn để chạy nó theo cách thủ công. Nếu bạn đi theo con đường này, hãy sử dụng một cái gì đó như
wsl.exe -u root sysctl --system
để tránh phải nhập mật khẩu hoặc cấu hình sudoers
.